Builds with protocol changes (currently untested).

This commit is contained in:
lotodore
2014-12-28 01:03:06 +01:00
parent fdfba430b2
commit 1f6c3d8ccf
44 changed files with 8769 additions and 15778 deletions
+164 -160
View File
@@ -161,6 +161,8 @@ message AuthClientRequestMessage {
// Authenticated login data is according to SCRAM SHA-1
optional bytes clientUserData = 6;
optional bytes myLastSessionId = 7;
// Ignored for guest login.
optional bytes avatarHash = 8;
}
message AuthServerChallengeMessage {
@@ -172,19 +174,14 @@ message AuthClientResponseMessage {
}
message AuthServerVerificationMessage {
required bytes serverVerification = 1;
}
message InitDoneMessage {
required bytes yourSessionId = 1;
required uint32 yourPlayerId = 2;
optional bytes serverVerification = 3;
}
message InitMessage {
// Ignored for guest login.
optional bytes avatarHash = 1;
}
message InitAckMessage {
optional bytes yourAvatarHash = 1;
optional uint32 rejoinGameId = 2;
optional bytes yourAvatarHash = 3;
optional uint32 rejoinGameId = 4;
}
message AvatarRequestMessage {
@@ -314,19 +311,22 @@ message CreateGameFailedMessage {
}
message JoinGameMessage {
optional string password = 1;
optional bool autoLeave = 2 [default = false];
optional bool spectateOnly = 3 [default = false];
required uint32 gameId = 1;
optional string password = 2;
optional bool autoLeave = 3 [default = false];
optional bool spectateOnly = 4 [default = false];
}
message RejoinGameMessage {
optional bool autoLeave = 1 [default = false];
required uint32 gameId = 1;
optional bool autoLeave = 2 [default = false];
}
message JoinGameAckMessage {
required bool areYouGameAdmin = 1;
required NetGameInfo gameInfo = 2;
optional bool spectateOnly = 3;
required uint32 gameId = 1;
required bool areYouGameAdmin = 2;
required NetGameInfo gameInfo = 3;
optional bool spectateOnly = 4;
}
message JoinGameFailedMessage {
@@ -334,13 +334,15 @@ message JoinGameFailedMessage {
invalidGame = 1;
gameIsFull = 2;
gameIsRunning = 3;
invalidPassword = 4;
notInvited = 5;
ipAddressBlocked = 6;
rejoinFailed = 7;
noSpectatorsAllowed = 8;
notAllowedAsGuest = 4;
invalidPassword = 5;
notInvited = 6;
ipAddressBlocked = 7;
rejoinFailed = 8;
noSpectatorsAllowed = 9;
}
required JoinGameFailureReason joinGameFailureReason = 1;
required uint32 gameId = 1;
required JoinGameFailureReason joinGameFailureReason = 2;
}
message GamePlayerJoinedMessage {
@@ -746,155 +748,157 @@ message AuthMessage {
message LobbyMessage {
enum LobbyMessageType {
Type_InitMessage = 1;
Type_InitAckMessage = 2;
Type_AvatarRequestMessage = 3;
Type_AvatarHeaderMessage = 4;
Type_AvatarDataMessage = 5;
Type_AvatarEndMessage = 6;
Type_UnknownAvatarMessage = 7;
Type_PlayerListMessage = 8;
Type_GameListNewMessage = 9;
Type_GameListUpdateMessage = 10;
Type_GameListPlayerJoinedMessage = 11;
Type_GameListPlayerLeftMessage = 12;
Type_GameListSpectatorJoinedMessage = 13;
Type_GameListSpectatorLeftMessage = 14;
Type_GameListAdminChangedMessage = 15;
Type_PlayerInfoRequestMessage = 16;
Type_PlayerInfoReplyMessage = 17;
Type_SubscriptionRequestMessage = 18;
Type_SubscriptionReplyMessage = 19;
Type_CreateGameMessage = 20;
Type_CreateGameFailedMessage = 21;
Type_InvitePlayerToGameMessage = 22;
Type_InviteNotifyMessage = 23;
Type_RejectGameInvitationMessage = 24;
Type_RejectInvNotifyMessage = 25;
Type_StatisticsMessage = 26;
Type_ChatRequestMessage = 27;
Type_ChatMessage = 28;
Type_ChatRejectMessage = 29;
Type_DialogMessage = 30;
Type_TimeoutWarningMessage = 31;
Type_ResetTimeoutMessage = 32;
Type_ReportAvatarMessage = 33;
Type_ReportAvatarAckMessage = 34;
Type_ReportGameMessage = 35;
Type_ReportGameAckMessage = 36;
Type_AdminRemoveGameMessage = 37;
Type_AdminRemoveGameAckMessage = 38;
Type_AdminBanPlayerMessage = 39;
Type_AdminBanPlayerAckMessage = 40;
Type_InitDoneMessage = 1;
Type_AvatarRequestMessage = 2;
Type_AvatarHeaderMessage = 3;
Type_AvatarDataMessage = 4;
Type_AvatarEndMessage = 5;
Type_UnknownAvatarMessage = 6;
Type_PlayerListMessage = 7;
Type_GameListNewMessage = 8;
Type_GameListUpdateMessage = 9;
Type_GameListPlayerJoinedMessage = 10;
Type_GameListPlayerLeftMessage = 11;
Type_GameListSpectatorJoinedMessage = 12;
Type_GameListSpectatorLeftMessage = 13;
Type_GameListAdminChangedMessage = 14;
Type_PlayerInfoRequestMessage = 15;
Type_PlayerInfoReplyMessage = 16;
Type_SubscriptionRequestMessage = 17;
Type_SubscriptionReplyMessage = 18;
Type_CreateGameMessage = 19;
Type_CreateGameFailedMessage = 20;
Type_JoinGameMessage = 21;
Type_RejoinGameMessage = 22;
Type_JoinGameAckMessage = 23;
Type_JoinGameFailedMessage = 24;
Type_InviteNotifyMessage = 25;
Type_RejectGameInvitationMessage = 26;
Type_RejectInvNotifyMessage = 27;
Type_StatisticsMessage = 28;
Type_ChatRequestMessage = 29;
Type_ChatMessage = 30;
Type_ChatRejectMessage = 31;
Type_DialogMessage = 32;
Type_TimeoutWarningMessage = 33;
Type_ResetTimeoutMessage = 34;
Type_ReportAvatarMessage = 35;
Type_ReportAvatarAckMessage = 36;
Type_ReportGameMessage = 37;
Type_ReportGameAckMessage = 38;
Type_AdminRemoveGameMessage = 39;
Type_AdminRemoveGameAckMessage = 40;
Type_AdminBanPlayerMessage = 41;
Type_AdminBanPlayerAckMessage = 42;
Type_ErrorMessage = 1024;
}
required LobbyMessageType messageType = 1;
optional InitMessage initMessage = 2;
optional InitAckMessage initAckMessage = 3;
optional AvatarRequestMessage avatarRequestMessage = 4;
optional AvatarHeaderMessage avatarHeaderMessage = 5;
optional AvatarDataMessage avatarDataMessage = 6;
optional AvatarEndMessage avatarEndMessage = 7;
optional UnknownAvatarMessage unknownAvatarMessage = 8;
optional PlayerListMessage playerListMessage = 9;
optional GameListNewMessage gameListNewMessage = 10;
optional GameListUpdateMessage gameListUpdateMessage = 11;
optional GameListPlayerJoinedMessage gameListPlayerJoinedMessage = 12;
optional GameListPlayerLeftMessage gameListPlayerLeftMessage = 13;
optional GameListSpectatorJoinedMessage gameListSpectatorJoinedMessage = 14;
optional GameListSpectatorLeftMessage gameListSpectatorLeftMessage = 15;
optional GameListAdminChangedMessage gameListAdminChangedMessage = 16;
optional PlayerInfoRequestMessage playerInfoRequestMessage = 17;
optional PlayerInfoReplyMessage playerInfoReplyMessage = 18;
optional SubscriptionRequestMessage subscriptionRequestMessage = 19;
optional SubscriptionReplyMessage subscriptionReplyMessage = 20;
optional CreateGameMessage createGameMessage = 21;
optional CreateGameFailedMessage createGameFailedMessage = 22;
optional InvitePlayerToGameMessage invitePlayerToGameMessage = 23;
optional InviteNotifyMessage inviteNotifyMessage = 24;
optional RejectGameInvitationMessage rejectGameInvitationMessage = 25;
optional RejectInvNotifyMessage rejectInvNotifyMessage = 26;
optional StatisticsMessage statisticsMessage = 27;
optional ChatRequestMessage chatRequestMessage = 28;
optional ChatMessage chatMessage = 29;
optional ChatRejectMessage chatRejectMessage = 30;
optional DialogMessage dialogMessage = 31;
optional TimeoutWarningMessage timeoutWarningMessage = 32;
optional ResetTimeoutMessage resetTimeoutMessage = 33;
optional ReportAvatarMessage reportAvatarMessage = 34;
optional ReportAvatarAckMessage reportAvatarAckMessage = 35;
optional ReportGameMessage reportGameMessage = 36;
optional ReportGameAckMessage reportGameAckMessage = 37;
optional AdminRemoveGameMessage adminRemoveGameMessage = 38;
optional AdminRemoveGameAckMessage adminRemoveGameAckMessage = 39;
optional AdminBanPlayerMessage adminBanPlayerMessage = 40;
optional AdminBanPlayerAckMessage adminBanPlayerAckMessage = 41;
optional InitDoneMessage initDoneMessage = 2;
optional AvatarRequestMessage avatarRequestMessage = 3;
optional AvatarHeaderMessage avatarHeaderMessage = 4;
optional AvatarDataMessage avatarDataMessage = 5;
optional AvatarEndMessage avatarEndMessage = 6;
optional UnknownAvatarMessage unknownAvatarMessage = 7;
optional PlayerListMessage playerListMessage = 8;
optional GameListNewMessage gameListNewMessage = 9;
optional GameListUpdateMessage gameListUpdateMessage = 10;
optional GameListPlayerJoinedMessage gameListPlayerJoinedMessage = 11;
optional GameListPlayerLeftMessage gameListPlayerLeftMessage = 12;
optional GameListSpectatorJoinedMessage gameListSpectatorJoinedMessage = 13;
optional GameListSpectatorLeftMessage gameListSpectatorLeftMessage = 14;
optional GameListAdminChangedMessage gameListAdminChangedMessage = 15;
optional PlayerInfoRequestMessage playerInfoRequestMessage = 16;
optional PlayerInfoReplyMessage playerInfoReplyMessage = 17;
optional SubscriptionRequestMessage subscriptionRequestMessage = 18;
optional SubscriptionReplyMessage subscriptionReplyMessage = 19;
optional CreateGameMessage createGameMessage = 20;
optional CreateGameFailedMessage createGameFailedMessage = 21;
optional JoinGameMessage joinGameMessage = 22;
optional RejoinGameMessage rejoinGameMessage = 23;
optional JoinGameAckMessage joinGameAckMessage = 24;
optional JoinGameFailedMessage joinGameFailedMessage = 25;
optional InviteNotifyMessage inviteNotifyMessage = 26;
optional RejectGameInvitationMessage rejectGameInvitationMessage = 27;
optional RejectInvNotifyMessage rejectInvNotifyMessage = 28;
optional StatisticsMessage statisticsMessage = 29;
optional ChatRequestMessage chatRequestMessage = 30;
optional ChatMessage chatMessage = 31;
optional ChatRejectMessage chatRejectMessage = 32;
optional DialogMessage dialogMessage = 33;
optional TimeoutWarningMessage timeoutWarningMessage = 34;
optional ResetTimeoutMessage resetTimeoutMessage = 35;
optional ReportAvatarMessage reportAvatarMessage = 36;
optional ReportAvatarAckMessage reportAvatarAckMessage = 37;
optional ReportGameMessage reportGameMessage = 38;
optional ReportGameAckMessage reportGameAckMessage = 39;
optional AdminRemoveGameMessage adminRemoveGameMessage = 40;
optional AdminRemoveGameAckMessage adminRemoveGameAckMessage = 41;
optional AdminBanPlayerMessage adminBanPlayerMessage = 42;
optional AdminBanPlayerAckMessage adminBanPlayerAckMessage = 43;
optional ErrorMessage errorMessage = 1025;
}
message GameManagementMessage {
enum GameManagementMessageType {
Type_JoinGameMessage = 1;
Type_RejoinGameMessage = 2;
Type_JoinGameAckMessage = 3;
Type_JoinGameFailedMessage = 4;
Type_GamePlayerJoinedMessage = 5;
Type_GamePlayerLeftMessage = 6;
Type_GameSpectatorJoinedMessage = 7;
Type_GameSpectatorLeftMessage = 8;
Type_GameAdminChangedMessage = 9;
Type_RemovedFromGameMessage = 10;
Type_KickPlayerRequestMessage = 11;
Type_LeaveGameRequestMessage = 12;
Type_StartEventMessage = 13;
Type_StartEventAckMessage = 14;
Type_GameStartInitialMessage = 15;
Type_GameStartRejoinMessage = 16;
Type_EndOfGameMessage = 17;
Type_PlayerIdChangedMessage = 18;
Type_AskKickPlayerMessage = 19;
Type_AskKickDeniedMessage = 20;
Type_StartKickPetitionMessage = 21;
Type_VoteKickRequestMessage = 22;
Type_VoteKickReplyMessage = 23;
Type_KickPetitionUpdateMessage = 24;
Type_EndKickPetitionMessage = 25;
Type_ChatRequestMessage = 26;
Type_ChatMessage = 27;
Type_ChatRejectMessage = 28;
Type_GamePlayerJoinedMessage = 1;
Type_GamePlayerLeftMessage = 2;
Type_GameSpectatorJoinedMessage = 3;
Type_GameSpectatorLeftMessage = 4;
Type_GameAdminChangedMessage = 5;
Type_RemovedFromGameMessage = 6;
Type_KickPlayerRequestMessage = 7;
Type_LeaveGameRequestMessage = 8;
Type_InvitePlayerToGameMessage = 9;
Type_StartEventMessage = 10;
Type_StartEventAckMessage = 11;
Type_GameStartInitialMessage = 12;
Type_GameStartRejoinMessage = 13;
Type_EndOfGameMessage = 14;
Type_PlayerIdChangedMessage = 15;
Type_AskKickPlayerMessage = 16;
Type_AskKickDeniedMessage = 17;
Type_StartKickPetitionMessage = 18;
Type_VoteKickRequestMessage = 19;
Type_VoteKickReplyMessage = 20;
Type_KickPetitionUpdateMessage = 21;
Type_EndKickPetitionMessage = 22;
Type_ChatRequestMessage = 23;
Type_ChatMessage = 24;
Type_ChatRejectMessage = 25;
Type_TimeoutWarningMessage = 26;
Type_ResetTimeoutMessage = 27;
Type_ErrorMessage = 1024;
}
required GameManagementMessageType messageType = 1;
optional JoinGameMessage joinGameMessage = 2;
optional RejoinGameMessage rejoinGameMessage = 3;
optional JoinGameAckMessage joinGameAckMessage = 4;
optional JoinGameFailedMessage joinGameFailedMessage = 5;
optional GamePlayerJoinedMessage gamePlayerJoinedMessage = 6;
optional GamePlayerLeftMessage gamePlayerLeftMessage = 7;
optional GameSpectatorJoinedMessage gameSpectatorJoinedMessage = 8;
optional GameSpectatorLeftMessage gameSpectatorLeftMessage = 9;
optional GameAdminChangedMessage gameAdminChangedMessage = 10;
optional RemovedFromGameMessage removedFromGameMessage = 11;
optional KickPlayerRequestMessage kickPlayerRequestMessage = 12;
optional LeaveGameRequestMessage leaveGameRequestMessage = 13;
optional StartEventMessage startEventMessage = 14;
optional StartEventAckMessage startEventAckMessage = 15;
optional GameStartInitialMessage gameStartInitialMessage = 16;
optional GameStartRejoinMessage gameStartRejoinMessage = 17;
optional EndOfGameMessage endOfGameMessage = 18;
optional PlayerIdChangedMessage playerIdChangedMessage = 19;
optional AskKickPlayerMessage askKickPlayerMessage = 20;
optional AskKickDeniedMessage askKickDeniedMessage = 21;
optional StartKickPetitionMessage startKickPetitionMessage = 22;
optional VoteKickRequestMessage voteKickRequestMessage = 23;
optional VoteKickReplyMessage voteKickReplyMessage = 24;
optional KickPetitionUpdateMessage kickPetitionUpdateMessage = 25;
optional EndKickPetitionMessage endKickPetitionMessage = 26;
optional ChatRequestMessage chatRequestMessage = 27;
optional ChatMessage chatMessage = 28;
optional ChatRejectMessage chatRejectMessage = 29;
optional GamePlayerJoinedMessage gamePlayerJoinedMessage = 2;
optional GamePlayerLeftMessage gamePlayerLeftMessage = 3;
optional GameSpectatorJoinedMessage gameSpectatorJoinedMessage = 4;
optional GameSpectatorLeftMessage gameSpectatorLeftMessage = 5;
optional GameAdminChangedMessage gameAdminChangedMessage = 6;
optional RemovedFromGameMessage removedFromGameMessage = 7;
optional KickPlayerRequestMessage kickPlayerRequestMessage = 8;
optional LeaveGameRequestMessage leaveGameRequestMessage = 9;
optional InvitePlayerToGameMessage invitePlayerToGameMessage = 10;
optional StartEventMessage startEventMessage = 11;
optional StartEventAckMessage startEventAckMessage = 12;
optional GameStartInitialMessage gameStartInitialMessage = 13;
optional GameStartRejoinMessage gameStartRejoinMessage = 14;
optional EndOfGameMessage endOfGameMessage = 15;
optional PlayerIdChangedMessage playerIdChangedMessage = 16;
optional AskKickPlayerMessage askKickPlayerMessage = 17;
optional AskKickDeniedMessage askKickDeniedMessage = 18;
optional StartKickPetitionMessage startKickPetitionMessage = 19;
optional VoteKickRequestMessage voteKickRequestMessage = 20;
optional VoteKickReplyMessage voteKickReplyMessage = 21;
optional KickPetitionUpdateMessage kickPetitionUpdateMessage = 22;
optional EndKickPetitionMessage endKickPetitionMessage = 23;
optional ChatRequestMessage chatRequestMessage = 24;
optional ChatMessage chatMessage = 25;
optional ChatRejectMessage chatRejectMessage = 26;
optional TimeoutWarningMessage timeoutWarningMessage = 27;
optional ResetTimeoutMessage resetTimeoutMessage = 28;
optional ErrorMessage errorMessage = 1025;
}
+15 -4
View File
@@ -71,7 +71,6 @@ HEADERS += \
src/net/clientthread.h \
src/net/genericsocket.h \
src/net/netpacket.h \
src/net/netpacketvalidator.h \
src/net/senderhelper.h \
src/net/sendercallback.h \
src/net/serverexception.h \
@@ -138,7 +137,14 @@ HEADERS += \
src/net/servermanagerfactory.h \
src/net/uploadcallback.h \
src/net/websocket_defs.h \
src/net/websocketdata.h
src/net/websocketdata.h \
src/net/validation/lobbymessagevalidator.h \
src/net/validation/authmessagevalidator.h \
src/net/validation/gamemessagevalidator.h \
src/net/validation/gameenginemessagevalidator.h \
src/net/validation/gamemanagementmessagevalidator.h \
src/net/validation/pokerthmessagevalidator.h \
src/net/validation/validationhelper.h
SOURCES += \
src/engine/game.cpp \
@@ -183,7 +189,6 @@ SOURCES += \
src/net/common/downloadhelper.cpp \
src/net/common/downloaderthread.cpp \
src/net/common/netpacket.cpp \
src/net/common/netpacketvalidator.cpp \
src/net/common/senderhelper.cpp \
src/net/common/sendercallback.cpp \
src/net/common/serverexception.cpp \
@@ -218,7 +223,13 @@ SOURCES += \
src/net/common/receivebuffer.cpp \
src/net/common/asioreceivebuffer.cpp \
src/net/common/webreceivebuffer.cpp \
src/net/common/uploadcallback.cpp
src/net/common/uploadcallback.cpp \
src/net/common/validation/authmessagevalidator.cpp \
src/net/common/validation/gamemessagevalidator.cpp \
src/net/common/validation/lobbymessagevalidator.cpp \
src/net/common/validation/pokerthmessagevalidator.cpp \
src/net/common/validation/gameenginemessagevalidator.cpp \
src/net/common/validation/gamemanagementmessagevalidator.cpp
!android:!android_test{
SOURCES += src/engine/local_engine/tools.cpp
+4 -3
View File
@@ -1203,7 +1203,7 @@ void startWindowImpl::networkNotification(int notificationId)
QMessageBox::Close);
}
break;
case NTF_NET_JOIN_GAME_NAME_IN_USE: {
case NTF_NET_CREATE_GAME_NAME_IN_USE: {
changeContentDialogImpl dialog(this, myConfig, CHANGE_INET_GAME_NAME_IN_USE);
dialog.exec();
if(dialog.result() == QDialog::Accepted) {
@@ -1211,7 +1211,7 @@ void startWindowImpl::networkNotification(int notificationId)
}
}
break;
case NTF_NET_JOIN_GAME_BAD_NAME: {
case NTF_NET_CREATE_GAME_BAD_NAME: {
changeContentDialogImpl dialog(this, myConfig, CHANGE_INET_BAD_GAME_NAME);
dialog.exec();
if(dialog.result() == QDialog::Accepted) {
@@ -1231,13 +1231,14 @@ void startWindowImpl::networkNotification(int notificationId)
QMessageBox::Close);
}
break;
case NTF_NET_CREATE_GUEST_FORBIDDEN:
case NTF_NET_JOIN_GUEST_FORBIDDEN: {
MyMessageBox::warning(this, tr("Network Notification"),
tr("You cannot join this type of game as guest."),
QMessageBox::Close);
}
break;
case NTF_NET_JOIN_INVALID_SETTINGS: {
case NTF_NET_CREATE_INVALID_SETTINGS: {
MyMessageBox::warning(this, tr("Network Notification"),
tr("The settings are invalid for this type of game."),
QMessageBox::Close);
+8 -4
View File
@@ -47,16 +47,19 @@ public:
AsioSendBuffer();
virtual ~AsioSendBuffer();
inline size_t GetSendBufLeft() const {
inline size_t GetSendBufLeft() const
{
int bytesLeft = (int)(sendBufAllocated - sendBufUsed);
return bytesLeft < 0 ? (size_t)0 : (size_t)bytesLeft;
}
inline size_t GetAllocated() const {
inline size_t GetAllocated() const
{
return sendBufAllocated;
}
inline bool ReallocSendBuf() {
inline bool ReallocSendBuf()
{
bool retVal = false;
size_t allocAmount = sendBufAllocated * 2;
if (0 == allocAmount) {
@@ -73,7 +76,8 @@ public:
return retVal;
}
inline void AppendToSendBufWithoutCheck(const char *data, size_t size) {
inline void AppendToSendBufWithoutCheck(const char *data, size_t size)
{
std::memcpy(sendBuf + sendBufUsed, data, size);
sendBufUsed += size;
}
+60 -30
View File
@@ -49,96 +49,126 @@ public:
void SetSessionData(boost::shared_ptr<SessionData> sessionData);
boost::shared_ptr<boost::asio::ip::tcp::resolver> GetResolver() const;
void SetResolver(boost::shared_ptr<boost::asio::ip::tcp::resolver> resolver);
bool GetSctp() const {
bool GetSctp() const
{
return m_sctp;
}
void SetSctp(bool sctp) {
void SetSctp(bool sctp)
{
m_sctp = sctp;
}
int GetAddrFamily() const {
int GetAddrFamily() const
{
return m_addrFamily;
}
void SetAddrFamily(int addrFamily) {
void SetAddrFamily(int addrFamily)
{
m_addrFamily = addrFamily;
}
const std::string &GetServerAddr() const {
const std::string &GetServerAddr() const
{
return m_serverAddr;
}
void SetServerAddr(const std::string &serverAddr) {
void SetServerAddr(const std::string &serverAddr)
{
m_serverAddr = serverAddr;
}
const std::string &GetServerPassword() const {
const std::string &GetServerPassword() const
{
return m_serverPassword;
}
void SetServerPassword(const std::string &serverPassword) {
void SetServerPassword(const std::string &serverPassword)
{
m_serverPassword = serverPassword;
}
const std::string &GetServerListUrl() const {
const std::string &GetServerListUrl() const
{
return m_serverListUrl;
}
void SetServerListUrl(const std::string &serverListUrl) {
void SetServerListUrl(const std::string &serverListUrl)
{
m_serverListUrl = serverListUrl;
}
bool GetUseServerList() const {
bool GetUseServerList() const
{
return m_useServerList;
}
void SetUseServerList(bool use) {
void SetUseServerList(bool use)
{
m_useServerList = use;
}
unsigned GetServerPort() const {
unsigned GetServerPort() const
{
return m_serverPort;
}
void SetServerPort(unsigned serverPort) {
void SetServerPort(unsigned serverPort)
{
m_serverPort = serverPort;
}
const std::string &GetAvatarServerAddr() const {
const std::string &GetAvatarServerAddr() const
{
return m_avatarServerAddr;
}
void SetAvatarServerAddr(const std::string &avatarServerAddr) {
void SetAvatarServerAddr(const std::string &avatarServerAddr)
{
m_avatarServerAddr = avatarServerAddr;
}
const std::string &GetPassword() const {
const std::string &GetPassword() const
{
return m_password;
}
void SetPassword(const std::string &password) {
void SetPassword(const std::string &password)
{
m_password = password;
}
const std::string &GetPlayerName() const {
const std::string &GetPlayerName() const
{
return m_playerName;
}
void SetPlayerName(const std::string &playerName) {
void SetPlayerName(const std::string &playerName)
{
m_playerName = playerName;
}
PlayerRights GetPlayerRights() const {
PlayerRights GetPlayerRights() const
{
return m_playerRights;
}
void SetPlayerRights(PlayerRights rights) {
void SetPlayerRights(PlayerRights rights)
{
m_playerRights = rights;
}
const std::string &GetAvatarFile() const {
const std::string &GetAvatarFile() const
{
return m_avatarFile;
}
void SetAvatarFile(const std::string &avatarFile) {
void SetAvatarFile(const std::string &avatarFile)
{
m_avatarFile = avatarFile;
}
const std::string &GetCacheDir() const {
const std::string &GetCacheDir() const
{
return m_cacheDir;
}
void SetCacheDir(const std::string &cacheDir) {
void SetCacheDir(const std::string &cacheDir)
{
m_cacheDir = cacheDir;
}
bool GetSubscribeLobbyMsg() const {
bool GetSubscribeLobbyMsg() const
{
return m_hasSubscribedLobbyMsg;
}
void SetSubscribeLobbyMsg(bool setSubscribe) {
void SetSubscribeLobbyMsg(bool setSubscribe)
{
m_hasSubscribedLobbyMsg = setSubscribe;
}
const std::string &GetSessionGuid() const {
const std::string &GetSessionGuid() const
{
return m_sessionGuid;
}
void SetSessionGuid(const std::string &sessionGuid) {
void SetSessionGuid(const std::string &sessionGuid)
{
m_sessionGuid = sessionGuid;
}
+1 -1
View File
@@ -391,7 +391,7 @@ protected:
virtual void InternalHandleAnnounceMsg(boost::shared_ptr<ClientThread> /*client*/, const AnnounceMessage &/*announceMsg*/) {}
virtual void InternalHandleAuthMsg(boost::shared_ptr<ClientThread> /*client*/, const AuthMessage &/*authMsg*/) {}
virtual void InternalHandleLobbyMsg(boost::shared_ptr<ClientThread> client, const LobbyMessage &lobbyMsg);
virtual void InternalHandleGameMsg(boost::shared_ptr<ClientThread> client, const GameMessage &gameMsg);
virtual void InternalHandleGameMsg(boost::shared_ptr<ClientThread> /*client*/, const GameMessage &/*gameMsg*/) {}
};
// State: Wait for start of the game or start info.
+10 -5
View File
@@ -66,19 +66,24 @@ class PingData
public:
PingData() : pingTimer(boost::posix_time::time_duration(0, 0, 0), boost::timers::portable::microsec_timer::manual_start) {}
unsigned MinPing() {
unsigned MinPing()
{
return *std::min_element(pingValues.begin(), pingValues.end());
}
unsigned MaxPing() {
unsigned MaxPing()
{
return *std::max_element(pingValues.begin(), pingValues.end());
}
unsigned AveragePing() {
unsigned AveragePing()
{
return pingValues.empty() ? 0 : (std::accumulate(pingValues.begin(), pingValues.end(), 0) / (unsigned)pingValues.size());
}
void StartPing() {
void StartPing()
{
pingTimer.start();
}
bool EndPing() {
bool EndPing()
{
bool retVal = false;
if (pingTimer.is_running()) {
pingValues.push_back((unsigned)pingTimer.elapsed().total_milliseconds());
+1 -1
View File
@@ -123,7 +123,7 @@ AsioReceiveBuffer::ScanPackets(boost::shared_ptr<SessionData> session)
}
}
if (tmpPacket) {
if (validator.IsValidPacket(*tmpPacket)) {
if (validator.IsValidMessage(*tmpPacket->GetMsg())) {
receivedPackets.push_back(tmpPacket);
} else {
LOG_ERROR("Session " << session->GetId() << " - Invalid packet: " << tmpPacket->GetMsg()->messagetype());
+48 -68
View File
@@ -587,8 +587,7 @@ AbstractClientStateReceiving::HandleLobbyMsg(boost::shared_ptr<ClientThread> cli
client->SetPlayerInfo(
playerId,
tmpInfo);
}
else {
} else {
client->SetUnknownPlayer(playerId);
}
} else if (lobbyMsg.messagetype() == LobbyMessage::Type_TimeoutWarningMessage) {
@@ -733,8 +732,7 @@ AbstractClientStateReceiving::HandleLobbyMsg(boost::shared_ptr<ClientThread> cli
break;
}
client->GetCallback().SignalNetClientMsgBox(msgCode);
}
else if (lobbyMsg.messagetype() == LobbyMessage::Type_ReportGameAckMessage) {
} else if (lobbyMsg.messagetype() == LobbyMessage::Type_ReportGameAckMessage) {
const ReportGameAckMessage &netReportAck = lobbyMsg.reportgameackmessage();
unsigned msgCode;
switch (netReportAck.reportgameresult()) {
@@ -795,7 +793,7 @@ AbstractClientStateReceiving::HandleLobbyMsg(boost::shared_ptr<ClientThread> cli
}
client->UpdateStatData(tmpStats);
}
} else if (lobbyMsg.messagetype() == GameManagementMessage::Type_ErrorMessage) {
} else if (lobbyMsg.messagetype() == LobbyMessage::Type_ErrorMessage) {
// Server reported an error.
const ErrorMessage &netError = lobbyMsg.errormessage();
// Show the error.
@@ -808,8 +806,7 @@ AbstractClientStateReceiving::HandleLobbyMsg(boost::shared_ptr<ClientThread> cli
void
AbstractClientStateReceiving::HandleGameMsg(boost::shared_ptr<ClientThread> client, const GameMessage &gameMsg)
{
if (gameMsg.messagetype() == GameMessage::Type_GameManagementMessage)
{
if (gameMsg.messagetype() == GameMessage::Type_GameManagementMessage) {
const GameManagementMessage &managementMsg = gameMsg.gamemanagementmessage();
if (managementMsg.messagetype() == GameManagementMessage::Type_RemovedFromGameMessage) {
const RemovedFromGameMessage &netRemoved = managementMsg.removedfromgamemessage();
@@ -845,8 +842,7 @@ AbstractClientStateReceiving::HandleGameMsg(boost::shared_ptr<ClientThread> clie
}
client->GetCallback().SignalNetClientRemovedFromGame(removeReason);
client->SetState(ClientStateWaitJoin::Instance());
}
else if (managementMsg.messagetype() == GameManagementMessage::Type_GamePlayerLeftMessage) {
} else if (managementMsg.messagetype() == GameManagementMessage::Type_GamePlayerLeftMessage) {
// A player left the game.
const GamePlayerLeftMessage &netLeft = managementMsg.gameplayerleftmessage();
@@ -867,22 +863,19 @@ AbstractClientStateReceiving::HandleGameMsg(boost::shared_ptr<ClientThread> clie
break;
}
client->RemovePlayerData(netLeft.playerid(), removeReason);
}
else if (managementMsg.messagetype() == GameManagementMessage::Type_GameAdminChangedMessage) {
} else if (managementMsg.messagetype() == GameManagementMessage::Type_GameAdminChangedMessage) {
// New admin for the game.
const GameAdminChangedMessage &netChanged = managementMsg.gameadminchangedmessage();
// Set new game admin and signal to GUI.
client->SetNewGameAdmin(netChanged.newadminplayerid());
}
else if (managementMsg.messagetype() == GameManagementMessage::Type_GamePlayerJoinedMessage) {
} else if (managementMsg.messagetype() == GameManagementMessage::Type_GamePlayerJoinedMessage) {
// Another player joined the network game.
const GamePlayerJoinedMessage &netPlayerJoined = managementMsg.gameplayerjoinedmessage();
boost::shared_ptr<PlayerData> playerData = client->CreatePlayerData(netPlayerJoined.playerid(), netPlayerJoined.isgameadmin());
client->AddPlayerData(playerData);
}
else if (managementMsg.messagetype() == GameManagementMessage::Type_GameSpectatorJoinedMessage) {
} else if (managementMsg.messagetype() == GameManagementMessage::Type_GameSpectatorJoinedMessage) {
// Another spectator joined the network game.
const GameSpectatorJoinedMessage &netSpectatorJoined = managementMsg.gamespectatorjoinedmessage();
// Request player info if needed.
@@ -891,8 +884,7 @@ AbstractClientStateReceiving::HandleGameMsg(boost::shared_ptr<ClientThread> clie
client->RequestPlayerInfo(netSpectatorJoined.playerid());
}
client->ModifyGameInfoAddSpectatorDuringGame(netSpectatorJoined.playerid());
}
else if (managementMsg.messagetype() == GameManagementMessage::Type_GameSpectatorLeftMessage) {
} else if (managementMsg.messagetype() == GameManagementMessage::Type_GameSpectatorLeftMessage) {
// A spectator left the network game.
const GameSpectatorLeftMessage &netSpectatorLeft = managementMsg.gamespectatorleftmessage();
// Signal to GUI and remove from data list.
@@ -995,8 +987,7 @@ ClientStateStartSession::InternalHandleAnnounceMsg(boost::shared_ptr<ClientThrea
if (announceMsg.latestgameversion().majorversion() != POKERTH_VERSION_MAJOR
|| announceMsg.latestgameversion().minorversion() != POKERTH_VERSION_MINOR) {
client->GetCallback().SignalNetClientNotification(NTF_NET_NEW_RELEASE_AVAILABLE);
}
else if (POKERTH_BETA_REVISION && announceMsg.latestbetarevision() != POKERTH_BETA_REVISION) {
} else if (POKERTH_BETA_REVISION && announceMsg.latestbetarevision() != POKERTH_BETA_REVISION) {
client->GetCallback().SignalNetClientNotification(NTF_NET_OUTDATED_BETA);
}
ClientContext &context = client->GetContext();
@@ -1022,6 +1013,14 @@ ClientStateStartSession::InternalHandleAnnounceMsg(boost::shared_ptr<ClientThrea
}
authRequest->set_login(AuthClientRequestMessage::unauthenticatedLogin);
authRequest->set_nickname(context.GetPlayerName());
string avatarFile = client->GetQtToolsInterface().stringFromUtf8(context.GetAvatarFile());
if (!avatarFile.empty()) {
MD5Buf tmpMD5;
if (client->GetAvatarManager().GetHashForAvatar(avatarFile, tmpMD5)) {
// Send MD5 hash of avatar.
authRequest->set_avatarhash(tmpMD5.GetData(), MD5_DATA_SIZE);
}
}
client->GetSender().Send(context.GetSessionData(), auth);
client->SetState(ClientStateWaitSession::Instance());
}
@@ -1115,6 +1114,14 @@ ClientStateWaitEnterLogin::TimerLoop(const boost::system::error_code& ec, boost:
throw ClientException(__FILE__, __LINE__, ERR_NET_INVALID_PASSWORD, 0);
string outUserData(tmpSession->AuthGetNextOutMsg());
authRequest->set_clientuserdata(outUserData);
string avatarFile = client->GetQtToolsInterface().stringFromUtf8(context.GetAvatarFile());
if (!avatarFile.empty()) {
MD5Buf tmpMD5;
if (client->GetAvatarManager().GetHashForAvatar(avatarFile, tmpMD5)) {
// Send MD5 hash of avatar.
authRequest->set_avatarhash(tmpMD5.GetData(), MD5_DATA_SIZE);
}
}
client->GetSender().Send(context.GetSessionData(), auth);
client->SetState(ClientStateWaitAuthChallenge::Instance());
}
@@ -1215,23 +1222,6 @@ ClientStateWaitAuthVerify::InternalHandleAuthMsg(boost::shared_ptr<ClientThread>
boost::shared_ptr<SessionData> tmpSession = context.GetSessionData();
if (!tmpSession->AuthStep(3, verificationStr.c_str()))
throw ClientException(__FILE__, __LINE__, ERR_NET_INVALID_PASSWORD, 0);
client->SetGuiPlayerId(netAuth.yourplayerid());
context.SetSessionGuid(netAuth.yoursessionid());
boost::shared_ptr<NetPacket> init(new NetPacket);
init->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = init->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_InitMessage);
InitMessage *netInit = netLobby->mutable_initmessage();
string avatarFile = client->GetQtToolsInterface().stringFromUtf8(context.GetAvatarFile());
if (!avatarFile.empty()) {
MD5Buf tmpMD5;
if (client->GetAvatarManager().GetHashForAvatar(avatarFile, tmpMD5)) {
// Send MD5 hash of avatar.
netInit->set_avatarhash(tmpMD5.GetData(), MD5_DATA_SIZE);
}
}
client->GetSender().Send(context.GetSessionData(), init);
client->SetState(ClientStateWaitSession::Instance());
}
}
@@ -1266,13 +1256,15 @@ ClientStateWaitSession::Exit(boost::shared_ptr<ClientThread> /*client*/)
void
ClientStateWaitSession::InternalHandleLobbyMsg(boost::shared_ptr<ClientThread> client, const LobbyMessage &lobbyMsg)
{
if (lobbyMsg.messagetype() == LobbyMessage::Type_InitAckMessage) {
if (lobbyMsg.messagetype() == LobbyMessage::Type_InitDoneMessage) {
// Everything is fine - we are in the lobby.
const InitAckMessage &netInitAck = lobbyMsg.initackmessage();
const InitDoneMessage &netInitDone = lobbyMsg.initdonemessage();
client->SetGuiPlayerId(netInitDone.yourplayerid());
client->GetContext().SetSessionGuid(netInitDone.yoursessionid());
client->SetSessionEstablished(true);
client->GetCallback().SignalNetClientConnect(MSG_SOCK_SESSION_DONE);
if (netInitAck.has_rejoingameid())
client->GetCallback().SignalNetClientRejoinPossible(netInitAck.rejoingameid());
if (netInitDone.has_rejoingameid())
client->GetCallback().SignalNetClientRejoinPossible(netInitDone.rejoingameid());
client->SetState(ClientStateWaitJoin::Instance());
} else if (lobbyMsg.messagetype() == LobbyMessage::Type_AvatarRequestMessage) {
// Before letting us join the lobby, the server requests our avatar.
@@ -1321,6 +1313,7 @@ ClientStateWaitJoin::Exit(boost::shared_ptr<ClientThread> /*client*/)
void
ClientStateWaitJoin::InternalHandleLobbyMsg(boost::shared_ptr<ClientThread> client, const LobbyMessage &lobbyMsg)
{
ClientContext &context = client->GetContext();
if (lobbyMsg.messagetype() == LobbyMessage::Type_CreateGameFailedMessage) {
// Failed to create a new game.
const CreateGameFailedMessage &netCreateFailed = lobbyMsg.creategamefailedmessage();
@@ -1328,41 +1321,26 @@ ClientStateWaitJoin::InternalHandleLobbyMsg(boost::shared_ptr<ClientThread> clie
int failureCode;
switch (netCreateFailed.creategamefailurereason()) {
case CreateGameFailedMessage::notAllowedAsGuest:
failureCode = NTF_NET_JOIN_GUEST_FORBIDDEN;
failureCode = NTF_NET_CREATE_GUEST_FORBIDDEN;
break;
case CreateGameFailedMessage::gameNameInUse:
failureCode = NTF_NET_JOIN_GAME_NAME_IN_USE;
failureCode = NTF_NET_CREATE_GAME_NAME_IN_USE;
break;
case CreateGameFailedMessage::badGameName:
failureCode = NTF_NET_JOIN_GAME_BAD_NAME;
failureCode = NTF_NET_CREATE_GAME_BAD_NAME;
break;
case CreateGameFailedMessage::invalidSettings:
failureCode = NTF_NET_JOIN_INVALID_SETTINGS;
failureCode = NTF_NET_CREATE_INVALID_SETTINGS;
break;
default:
failureCode = NTF_NET_INTERNAL;
break;
}
client->GetCallback().SignalNetClientNotification(failureCode);
} else if (lobbyMsg.messagetype() == LobbyMessage::Type_InviteNotifyMessage) {
const InviteNotifyMessage &netInvNotify = lobbyMsg.invitenotifymessage();
if (netInvNotify.playeridwho() == client->GetGuiPlayerId()) {
client->GetCallback().SignalSelfGameInvitation(netInvNotify.gameid(), netInvNotify.playeridbywhom());
}
}
}
void
ClientStateWaitJoin::InternalHandleGameMsg(boost::shared_ptr<ClientThread> client, const GameMessage &gameMsg)
{
ClientContext &context = client->GetContext();
if (gameMsg.messagetype() == GameMessage::Type_GameManagementMessage) {
const GameManagementMessage &managementMsg = gameMsg.gamemanagementmessage();
if (managementMsg.messagetype() == GameManagementMessage::Type_JoinGameAckMessage) {
const JoinGameAckMessage &netJoinAck = managementMsg.joingameackmessage();
} else if (lobbyMsg.messagetype() == LobbyMessage::Type_JoinGameAckMessage) {
const JoinGameAckMessage &netJoinAck = lobbyMsg.joingameackmessage();
// Successfully joined a game.
client->SetGameId(gameMsg.gameid());
client->SetGameId(netJoinAck.gameid());
GameData tmpData;
NetPacket::GetGameData(netJoinAck.gameinfo(), tmpData);
client->SetGameData(tmpData);
@@ -1378,9 +1356,9 @@ ClientStateWaitJoin::InternalHandleGameMsg(boost::shared_ptr<ClientThread> clien
client->GetCallback().SignalNetClientGameInfo(MSG_NET_GAME_CLIENT_JOIN);
client->SetState(ClientStateWaitGame::Instance());
} else if (managementMsg.messagetype() == GameManagementMessage::Type_JoinGameFailedMessage) {
} else if (lobbyMsg.messagetype() == LobbyMessage::Type_JoinGameFailedMessage) {
// Failed to join a game.
const JoinGameFailedMessage &netJoinFailed = managementMsg.joingamefailedmessage();
const JoinGameFailedMessage &netJoinFailed = lobbyMsg.joingamefailedmessage();
int failureCode;
switch (netJoinFailed.joingamefailurereason()) {
@@ -1411,6 +1389,10 @@ ClientStateWaitJoin::InternalHandleGameMsg(boost::shared_ptr<ClientThread> clien
}
client->GetCallback().SignalNetClientNotification(failureCode);
} else if (lobbyMsg.messagetype() == LobbyMessage::Type_InviteNotifyMessage) {
const InviteNotifyMessage &netInvNotify = lobbyMsg.invitenotifymessage();
if (netInvNotify.playeridwho() == client->GetGuiPlayerId()) {
client->GetCallback().SignalSelfGameInvitation(netInvNotify.gameid(), netInvNotify.playeridbywhom());
}
}
}
@@ -1463,8 +1445,7 @@ ClientStateWaitGame::InternalHandleLobbyMsg(boost::shared_ptr<ClientThread> clie
void
ClientStateWaitGame::InternalHandleGameMsg(boost::shared_ptr<ClientThread> client, const GameMessage &gameMsg)
{
if (gameMsg.messagetype() == GameMessage::Type_GameManagementMessage)
{
if (gameMsg.messagetype() == GameMessage::Type_GameManagementMessage) {
const GameManagementMessage &managementMsg = gameMsg.gamemanagementmessage();
if (managementMsg.messagetype() == GameManagementMessage::Type_StartEventMessage) {
const StartEventMessage &netStartEvent = managementMsg.starteventmessage();
@@ -1691,8 +1672,7 @@ ClientStateWaitHand::InternalHandleGameMsg(boost::shared_ptr<ClientThread> clien
{
if (gameMsg.messagetype() == GameMessage::Type_GameManagementMessage) {
const GameManagementMessage &managementMsg = gameMsg.gamemanagementmessage();
if (managementMsg.messagetype() == GameManagementMessage::Type_EndOfGameMessage)
{
if (managementMsg.messagetype() == GameManagementMessage::Type_EndOfGameMessage) {
boost::shared_ptr<Game> curGame = client->GetGame();
if (curGame) {
const EndOfGameMessage &netEndOfGame = managementMsg.endofgamemessage();
+23 -28
View File
@@ -259,13 +259,11 @@ ClientThread::SendJoinFirstGame(const std::string &password, bool autoLeave)
// Warning: This function is called in the context of the GUI thread.
// Create a network packet to request joining a game.
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(1);
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_JoinGameMessage);
JoinGameMessage *netJoinGame = netManage->mutable_joingamemessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_JoinGameMessage);
JoinGameMessage *netJoinGame = netLobby->mutable_joingamemessage();
netJoinGame->set_gameid(1);
netJoinGame->set_autoleave(autoLeave);
if (!password.empty()) {
@@ -280,13 +278,11 @@ ClientThread::SendJoinGame(unsigned gameId, const std::string &password, bool au
// Warning: This function is called in the context of the GUI thread.
// Create a network packet to request joining a game.
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(gameId);
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_JoinGameMessage);
JoinGameMessage *netJoinGame = netManage->mutable_joingamemessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_JoinGameMessage);
JoinGameMessage *netJoinGame = netLobby->mutable_joingamemessage();
netJoinGame->set_gameid(gameId);
netJoinGame->set_autoleave(autoLeave);
if (!password.empty()) {
@@ -301,13 +297,11 @@ ClientThread::SendRejoinGame(unsigned gameId, bool autoLeave)
// Warning: This function is called in the context of the GUI thread.
// Create a network packet to request rejoining a running game.
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(gameId);
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_RejoinGameMessage);
RejoinGameMessage *netJoinGame = netManage->mutable_rejoingamemessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_RejoinGameMessage);
RejoinGameMessage *netJoinGame = netLobby->mutable_rejoingamemessage();
netJoinGame->set_gameid(gameId);
netJoinGame->set_autoleave(autoLeave);
m_ioService->post(boost::bind(&ClientThread::SendSessionPacket, shared_from_this(), packet));
@@ -397,11 +391,13 @@ void
ClientThread::SendInvitePlayerToCurrentGame(unsigned playerId)
{
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_InvitePlayerToGameMessage);
InvitePlayerToGameMessage *netInvite = netLobby->mutable_inviteplayertogamemessage();
netInvite->set_gameid(GetGameId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(GetGameId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameManagementMessage *netManagement = netGame->mutable_gamemanagementmessage();
netManagement->set_messagetype(GameManagementMessage::Type_InvitePlayerToGameMessage);
InvitePlayerToGameMessage *netInvite = netManagement->mutable_inviteplayertogamemessage();
netInvite->set_playerid(playerId);
m_ioService->post(boost::bind(&ClientThread::SendSessionPacket, shared_from_this(), packet));
}
@@ -487,8 +483,7 @@ ClientThread::CloseSession(boost::shared_ptr<SessionData> /*session*/)
void
ClientThread::HandlePacket(boost::shared_ptr<SessionData> /*session*/, boost::shared_ptr<NetPacket> packet)
{
switch (packet->GetMsg()->messagetype())
{
switch (packet->GetMsg()->messagetype()) {
case PokerTHMessage::Type_AnnounceMessage :
GetState().HandleAnnounceMsg(shared_from_this(), packet->GetMsg()->announcemessage());
break;
+11 -10
View File
@@ -72,20 +72,21 @@ bool
NetPacket::IsClientActivity() const
{
bool retVal = false;
bool isAuthMsg = m_msg->messagetype() == PokerTHMessage::Type_AuthMessage;
bool isLobbyMsg = m_msg->messagetype() == PokerTHMessage::Type_LobbyMessage;
bool isGameManagementMsg = m_msg->messagetype() == PokerTHMessage::Type_GameMessage && m_msg->gamemessage().messagetype() == GameMessage::Type_GameManagementMessage;
bool isGameEngineMsg = m_msg->messagetype() == PokerTHMessage::Type_GameMessage && m_msg->gamemessage().messagetype() == GameMessage::Type_GameEngineMessage;
if (m_msg &&
(isLobbyMsg && m_msg->lobbymessage().messagetype() == LobbyMessage::Type_InitMessage
|| isLobbyMsg && m_msg->lobbymessage().messagetype() == LobbyMessage::Type_CreateGameMessage
|| isLobbyMsg && m_msg->lobbymessage().messagetype() == LobbyMessage::Type_ResetTimeoutMessage
|| isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_JoinGameMessage
|| isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_RejoinGameMessage
|| isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_KickPlayerRequestMessage
|| isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_LeaveGameRequestMessage
|| isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_StartEventMessage
|| isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_ChatRequestMessage
|| isGameEngineMsg && m_msg->gamemessage().gameenginemessage().messagetype() == GameEngineMessage::Type_MyActionRequestMessage)) {
((isAuthMsg && m_msg->authmessage().messagetype() == AuthMessage::Type_AuthClientRequestMessage)
|| (isLobbyMsg && m_msg->lobbymessage().messagetype() == LobbyMessage::Type_CreateGameMessage)
|| (isLobbyMsg && m_msg->lobbymessage().messagetype() == LobbyMessage::Type_ResetTimeoutMessage)
|| (isLobbyMsg && m_msg->lobbymessage().messagetype() == LobbyMessage::Type_JoinGameMessage)
|| (isLobbyMsg && m_msg->lobbymessage().messagetype() == LobbyMessage::Type_RejoinGameMessage)
|| (isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_KickPlayerRequestMessage)
|| (isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_LeaveGameRequestMessage)
|| (isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_StartEventMessage)
|| (isGameManagementMsg && m_msg->gamemessage().gamemanagementmessage().messagetype() == GameManagementMessage::Type_ChatRequestMessage)
|| (isGameEngineMsg && m_msg->gamemessage().gameenginemessage().messagetype() == GameEngineMessage::Type_MyActionRequestMessage))) {
retVal = true;
}
return retVal;
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -31,7 +31,7 @@
#include <net/receivebuffer.h>
NetPacketValidator ReceiveBuffer::validator;
PokerTHMessageValidator ReceiveBuffer::validator;
ReceiveBuffer::~ReceiveBuffer()
{
+56 -45
View File
@@ -68,11 +68,11 @@ static bool LessThanPlayerHandStartMoney(const boost::shared_ptr<PlayerInterface
ServerGame::ServerGame(boost::shared_ptr<ServerLobbyThread> lobbyThread, u_int32_t id, const string &name, const string &pwd, const GameData &gameData,
unsigned adminPlayerId, unsigned creatorPlayerDBId, GuiInterface &gui, ConfigFile &playerConfig, const ServerMode mode)
: m_adminPlayerId(adminPlayerId), m_lobbyThread(lobbyThread), m_gui(gui),
m_gameData(gameData), m_curState(NULL), m_id(id), m_name(name),
m_serverDelayTime(mode), m_gameData(gameData), m_curState(NULL), m_id(id), m_name(name),
m_password(pwd), m_creatorPlayerDBId(creatorPlayerDBId), m_playerConfig(playerConfig),
m_gameNum(1), m_curPetitionId(1), m_voteKickTimer(lobbyThread->GetIOService()),
m_stateTimer1(lobbyThread->GetIOService()), m_stateTimer2(lobbyThread->GetIOService()),
m_isNameReported(false), m_serverDelayTime(mode)
m_isNameReported(false)
{
LOG_VERBOSE("Game object " << GetId() << " created.");
}
@@ -171,10 +171,9 @@ ServerGame::MarkPlayerAsKicked(unsigned playerId)
}
void
ServerGame::HandlePacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
ServerGame::HandleGameMsg(boost::shared_ptr<SessionData> session, const GameMessage &gameMsg)
{
if (session && packet)
GetState().ProcessPacket(shared_from_this(), session, packet);
GetState().HandleGameMsg(shared_from_this(), session, gameMsg);
}
GameState
@@ -265,9 +264,13 @@ ServerGame::TimerVoteKick(const boost::system::error_code &ec)
}
if (abortPetition) {
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_EndKickPetitionMessage);
EndKickPetitionMessage *netEndPetition = packet->GetMsg()->mutable_endkickpetitionmessage();
netEndPetition->set_gameid(GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_EndKickPetitionMessage);
EndKickPetitionMessage *netEndPetition = netManage->mutable_endkickpetitionmessage();
netEndPetition->set_petitionid(m_voteKickData->petitionId);
netEndPetition->set_numvotesagainstkicking(m_voteKickData->numVotesAgainstKicking);
netEndPetition->set_numvotesinfavourofkicking(m_voteKickData->numVotesInFavourOfKicking);
@@ -509,9 +512,13 @@ ServerGame::InternalAskVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned
m_voteKickData->votedPlayerIds.push_back(playerIdByWhom);
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_StartKickPetitionMessage);
StartKickPetitionMessage *netStartPetition = packet->GetMsg()->mutable_startkickpetitionmessage();
netStartPetition->set_gameid(GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_StartKickPetitionMessage);
StartKickPetitionMessage *netStartPetition = netManage->mutable_startkickpetitionmessage();
netStartPetition->set_petitionid(m_voteKickData->petitionId);
netStartPetition->set_proposingplayerid(playerIdByWhom);
netStartPetition->set_kickplayerid(m_voteKickData->kickPlayerId);
@@ -539,9 +546,13 @@ void
ServerGame::InternalDenyAskVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned playerIdWho, DenyKickPlayerReason reason)
{
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_AskKickDeniedMessage);
AskKickDeniedMessage *netKickDenied = packet->GetMsg()->mutable_askkickdeniedmessage();
netKickDenied->set_gameid(GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_AskKickDeniedMessage);
AskKickDeniedMessage *netKickDenied = netManage->mutable_askkickdeniedmessage();
netKickDenied->set_playerid(playerIdWho);
netKickDenied->set_kickdeniedreason(static_cast<AskKickDeniedMessage::KickDeniedReason>(reason));
GetLobbyThread().GetSender().Send(byWhom, packet);
@@ -563,9 +574,13 @@ ServerGame::InternalVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned pet
m_voteKickData->numVotesAgainstKicking++;
// Send update notification.
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_KickPetitionUpdateMessage);
KickPetitionUpdateMessage *netKickUpdate = packet->GetMsg()->mutable_kickpetitionupdatemessage();
netKickUpdate->set_gameid(GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_KickPetitionUpdateMessage);
KickPetitionUpdateMessage *netKickUpdate = netManage->mutable_kickpetitionupdatemessage();
netKickUpdate->set_petitionid(m_voteKickData->petitionId);
netKickUpdate->set_numvotesagainstkicking(m_voteKickData->numVotesAgainstKicking);
netKickUpdate->set_numvotesinfavourofkicking(m_voteKickData->numVotesInFavourOfKicking);
@@ -583,9 +598,13 @@ void
ServerGame::InternalDenyVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned petitionId, DenyVoteReason reason)
{
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_VoteKickReplyMessage);
VoteKickReplyMessage *netVoteReply = packet->GetMsg()->mutable_votekickreplymessage();
netVoteReply->set_gameid(GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_VoteKickReplyMessage);
VoteKickReplyMessage *netVoteReply = netManage->mutable_votekickreplymessage();
netVoteReply->set_petitionid(petitionId);
switch(reason) {
case VOTE_DENIED_ALREADY_VOTED :
@@ -893,9 +912,13 @@ ServerGame::RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason, b
GetState().NotifyGameAdminChanged(shared_from_this());
// Send "Game Admin Changed" to clients.
boost::shared_ptr<NetPacket> adminChanged(new NetPacket);
adminChanged->GetMsg()->set_messagetype(PokerTHMessage::Type_GameAdminChangedMessage);
GameAdminChangedMessage *netGameAdmin = adminChanged->GetMsg()->mutable_gameadminchangedmessage();
netGameAdmin->set_gameid(GetId());
adminChanged->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = adminChanged->GetMsg()->mutable_gamemessage();
netGame->set_gameid(GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_GameAdminChangedMessage);
GameAdminChangedMessage *netGameAdmin = netManage->mutable_gameadminchangedmessage();
netGameAdmin->set_newadminplayerid(newAdmin->GetUniqueId()); // Choose next player as admin.
GetSessionManager().SendToAllSessions(GetLobbyThread().GetSender(), adminChanged, SessionData::Game);
@@ -907,6 +930,12 @@ ServerGame::RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason, b
// Send "Player Left" to clients.
boost::shared_ptr<NetPacket> thisPlayerLeft(new NetPacket);
thisPlayerLeft->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = thisPlayerLeft->GetMsg()->mutable_gamemessage();
netGame->set_gameid(GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
GamePlayerLeftMessage::GamePlayerLeftReason netReason = GamePlayerLeftMessage::leftError;
switch (reason) {
case NTF_NET_REMOVED_ON_REQUEST :
@@ -918,15 +947,13 @@ ServerGame::RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason, b
}
if (spectateOnly) {
thisPlayerLeft->GetMsg()->set_messagetype(PokerTHMessage::Type_GameSpectatorLeftMessage);
GameSpectatorLeftMessage *netPlayerLeft = thisPlayerLeft->GetMsg()->mutable_gamespectatorleftmessage();
netPlayerLeft->set_gameid(GetId());
netManage->set_messagetype(GameManagementMessage::Type_GameSpectatorLeftMessage);
GameSpectatorLeftMessage *netPlayerLeft = netManage->mutable_gamespectatorleftmessage();
netPlayerLeft->set_playerid(player->GetUniqueId());
netPlayerLeft->set_gamespectatorleftreason(netReason);
} else {
thisPlayerLeft->GetMsg()->set_messagetype(PokerTHMessage::Type_GamePlayerLeftMessage);
GamePlayerLeftMessage *netPlayerLeft = thisPlayerLeft->GetMsg()->mutable_gameplayerleftmessage();
netPlayerLeft->set_gameid(GetId());
netManage->set_messagetype(GameManagementMessage::Type_GamePlayerLeftMessage);
GamePlayerLeftMessage *netPlayerLeft = netManage->mutable_gameplayerleftmessage();
netPlayerLeft->set_playerid(player->GetUniqueId());
netPlayerLeft->set_gameplayerleftreason(netReason);
}
@@ -1014,22 +1041,6 @@ ServerGame::IsValidPlayer(unsigned playerId) const
return retVal;
}
void
ServerGame::AddReportedAvatar(unsigned playerId)
{
m_reportedAvatarList.push_back(playerId);
}
bool
ServerGame::IsAvatarReported(unsigned playerId) const
{
bool retVal = false;
PlayerIdList::const_iterator pos = find(m_reportedAvatarList.begin(), m_reportedAvatarList.end(), playerId);
if (pos != m_reportedAvatarList.end())
retVal = true;
return retVal;
}
SessionManager &
ServerGame::GetSessionManager()
{
+264 -210
View File
@@ -76,10 +76,13 @@ static void SendPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInterfa
throw ServerException(__FILE__, __LINE__, ERR_NET_NO_CURRENT_PLAYER, 0);
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_PlayersActionDoneMessage);
PlayersActionDoneMessage *netActionDone = packet->GetMsg()->mutable_playersactiondonemessage();
netActionDone->set_gameid(server.GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server.GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_PlayersActionDoneMessage);
PlayersActionDoneMessage *netActionDone = netEngine->mutable_playersactiondonemessage();
netActionDone->set_gamestate(static_cast<NetGameState>(server.GetCurRound()));
netActionDone->set_highestset(server.GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet());
netActionDone->set_minimumraise(server.GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise());
@@ -101,9 +104,13 @@ static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
case GAME_STATE_FLOP: {
// deal flop cards
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_DealFlopCardsMessage);
DealFlopCardsMessage *netDealFlop = packet->GetMsg()->mutable_dealflopcardsmessage();
netDealFlop->set_gameid(server.GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server.GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_DealFlopCardsMessage);
DealFlopCardsMessage *netDealFlop = netEngine->mutable_dealflopcardsmessage();
netDealFlop->set_flopcard1(cards[0]);
netDealFlop->set_flopcard2(cards[1]);
netDealFlop->set_flopcard3(cards[2]);
@@ -113,9 +120,13 @@ static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
case GAME_STATE_TURN: {
// deal turn card
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_DealTurnCardMessage);
DealTurnCardMessage *netDealTurn = packet->GetMsg()->mutable_dealturncardmessage();
netDealTurn->set_gameid(server.GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server.GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_DealTurnCardMessage);
DealTurnCardMessage *netDealTurn = netEngine->mutable_dealturncardmessage();
netDealTurn->set_turncard(cards[3]);
server.SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
}
@@ -123,9 +134,13 @@ static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
case GAME_STATE_RIVER: {
// deal river card
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_DealRiverCardMessage);
DealRiverCardMessage *netDealRiver = packet->GetMsg()->mutable_dealrivercardmessage();
netDealRiver->set_gameid(server.GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server.GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_DealRiverCardMessage);
DealRiverCardMessage *netDealRiver = netEngine->mutable_dealrivercardmessage();
netDealRiver->set_rivercard(cards[4]);
server.SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating);
}
@@ -216,60 +231,59 @@ AbstractServerGameStateReceiving::~AbstractServerGameStateReceiving()
}
void
AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
AbstractServerGameStateReceiving::HandleGameMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameMessage &gameMsg)
{
if (packet->IsClientActivity()) {
session->ResetActivityTimer();
if (gameMsg.messagetype() == GameMessage::Type_GameManagementMessage) {
HandleGameManagementMsg(server, session, gameMsg.gamemanagementmessage());
} else if (gameMsg.messagetype() == GameMessage::Type_GameEngineMessage) {
HandleGameEngineMsg(server, session, gameMsg.gameenginemessage());
}
if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_PlayerInfoRequestMessage) {
// Delegate to Lobby.
server->GetLobbyThread().HandleGameRetrievePlayerInfo(session, packet->GetMsg()->playerinforequestmessage());
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_AvatarRequestMessage) {
// Delegate to Lobby.
server->GetLobbyThread().HandleGameRetrieveAvatar(session, packet->GetMsg()->avatarrequestmessage());
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_LeaveGameRequestMessage) {
}
void
AbstractServerGameStateReceiving::HandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg)
{
if (managementMsg.messagetype() == GameManagementMessage::Type_LeaveGameRequestMessage) {
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ON_REQUEST);
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_KickPlayerRequestMessage) {
} else if (managementMsg.messagetype() == GameManagementMessage::Type_KickPlayerRequestMessage) {
// Only admins are allowed to kick, and only in the lobby.
// After leaving the lobby, a vote needs to be initiated to kick.
const KickPlayerRequestMessage &netKickRequest = packet->GetMsg()->kickplayerrequestmessage();
const KickPlayerRequestMessage &netKickRequest = managementMsg.kickplayerrequestmessage();
if (session->GetPlayerData()->IsGameAdmin() && !server->IsRunning()
&& netKickRequest.gameid() == server->GetId() && server->GetGameData().gameType != GAME_TYPE_RANKING) {
&& server->GetGameData().gameType != GAME_TYPE_RANKING) {
server->KickPlayer(netKickRequest.playerid());
}
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_AskKickPlayerMessage) {
} else if (managementMsg.messagetype() == GameManagementMessage::Type_AskKickPlayerMessage) {
if (server->GetGameData().gameType != GAME_TYPE_RANKING) {
const AskKickPlayerMessage &netAskKick = packet->GetMsg()->askkickplayermessage();
const AskKickPlayerMessage &netAskKick = managementMsg.askkickplayermessage();
server->InternalAskVoteKick(session, netAskKick.playerid(), SERVER_VOTE_KICK_TIMEOUT_SEC);
}
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_VoteKickRequestMessage) {
const VoteKickRequestMessage &netVoteKick = packet->GetMsg()->votekickrequestmessage();
} else if (managementMsg.messagetype() == GameManagementMessage::Type_VoteKickRequestMessage) {
const VoteKickRequestMessage &netVoteKick = managementMsg.votekickrequestmessage();
server->InternalVoteKick(session, netVoteKick.petitionid(), netVoteKick.votekick() ? KICK_VOTE_IN_FAVOUR : KICK_VOTE_AGAINST);
}
// Chat text is always allowed.
else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_ChatRequestMessage) {
else if (managementMsg.messagetype() == GameManagementMessage::Type_ChatRequestMessage) {
bool chatSent = false;
const ChatRequestMessage &netChatRequest = packet->GetMsg()->chatrequestmessage();
const ChatRequestMessage &netChatRequest = managementMsg.chatrequestmessage();
// Only forward if this player is known and not a guest.
if (session->GetPlayerData()->GetRights() != PLAYER_RIGHTS_GUEST) {
// Forward chat text to all players.
// TODO: Some limitation needed.
if (!netChatRequest.has_targetgameid()) {
if (!server->IsRunning()) {
server->GetLobbyThread().HandleChatRequest(session, netChatRequest);
chatSent = true;
}
} else {
boost::shared_ptr<PlayerInterface> tmpPlayer (server->GetPlayerInterfaceFromGame(session->GetPlayerData()->GetUniqueId()));
// If we did not find the player, then the game did not start yet. Allow chat for now.
// Otherwise, check whether the player is muted.
if (!tmpPlayer || !tmpPlayer->isMuted()) {
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_ChatMessage);
ChatMessage *netChat = packet->GetMsg()->mutable_chatmessage();
netChat->set_gameid(server->GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_ChatMessage);
ChatMessage *netChat = netManage->mutable_chatmessage();
netChat->set_playerid(session->GetPlayerData()->GetUniqueId());
netChat->set_chattype(ChatMessage::chatTypeGame);
netChat->set_chattype(ChatMessage::chatTypeStandard);
netChat->set_chattext(netChatRequest.chattext());
server->SendToAllPlayers(packet, SessionData::Game | SessionData::Spectating | SessionData::SpectatorWaiting);
chatSent = true;
@@ -285,84 +299,43 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
//}
}
}
}
// Reject chat otherwise.
if (!chatSent) {
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_ChatRejectMessage);
ChatRejectMessage *netReject = packet->GetMsg()->mutable_chatrejectmessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_ChatRejectMessage);
ChatRejectMessage *netReject = netManage->mutable_chatrejectmessage();
netReject->set_chattext(netChatRequest.chattext());
server->GetLobbyThread().GetSender().Send(session, packet);
}
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_SubscriptionRequestMessage) {
const SubscriptionRequestMessage &netSubscription = packet->GetMsg()->subscriptionrequestmessage();
if (netSubscription.subscriptionaction() == SubscriptionRequestMessage::resubscribeGameList) {
if (!session->WantsLobbyMsg())
server->GetLobbyThread().ResubscribeLobbyMsg(session);
} else
session->ResetWantsLobbyMsg();
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_ReportAvatarMessage) {
const ReportAvatarMessage &netReport = packet->GetMsg()->reportavatarmessage();
boost::shared_ptr<PlayerData> tmpPlayer = server->GetPlayerDataByUniqueId(netReport.reportedplayerid());
MD5Buf tmpMD5;
memcpy(tmpMD5.GetData(), netReport.reportedavatarhash().data(), MD5_DATA_SIZE);
if (tmpPlayer && tmpPlayer->GetDBId() && !tmpMD5.IsZero() && tmpPlayer->GetAvatarMD5() == tmpMD5) {
if (!server->IsAvatarReported(tmpPlayer->GetUniqueId())) {
// Temporarily note that this avatar was reported.
// This prevents spamming of the avatar report.
server->AddReportedAvatar(tmpPlayer->GetUniqueId());
DB_id myDBid = session->GetPlayerData()->GetDBId();
// Do not use the "game" database object, but the global one.
// The entry should be created even if we are not running a
// ranking game.
} else {
// Message processing in subclass.
InternalHandleGameManagementMsg(server, session, managementMsg);
}
}
string tmpAvatarType;
tmpAvatarType = AvatarManager::GetAvatarFileExtension(AvatarManager::GetAvatarFileType(tmpPlayer->GetAvatarFile()));
if (!tmpAvatarType.empty())
tmpAvatarType.erase(0, 1); // Only store extension without the "."
server->GetLobbyThread().GetDatabase()->AsyncReportAvatar(
session->GetPlayerData()->GetUniqueId(),
tmpPlayer->GetUniqueId(),
tmpPlayer->GetDBId(),
tmpPlayer->GetAvatarMD5().ToString(),
tmpAvatarType,
myDBid != 0 ? &myDBid : NULL
);
} else {
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_ReportAvatarAckMessage);
ReportAvatarAckMessage *netReportAck = packet->GetMsg()->mutable_reportavatarackmessage();
netReportAck->set_reportedplayerid(netReport.reportedplayerid());
netReportAck->set_reportavatarresult(ReportAvatarAckMessage::avatarReportDuplicate);
server->GetLobbyThread().GetSender().Send(session, packet);
}
} else {
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_ReportAvatarAckMessage);
ReportAvatarAckMessage *netReportAck = packet->GetMsg()->mutable_reportavatarackmessage();
netReportAck->set_reportedplayerid(netReport.reportedplayerid());
netReportAck->set_reportavatarresult(ReportAvatarAckMessage::avatarReportInvalid);
server->GetLobbyThread().GetSender().Send(session, packet);
}
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_ReportGameMessage) {
// Delegate to Lobby.
server->GetLobbyThread().HandleGameReportGame(session, packet->GetMsg()->reportgamemessage());
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_JoinExistingGameMessage) {
// Ignore join game requests in this state (may be multiple clicks from the lobby).
} else {
// Packet processing in subclass.
InternalProcessPacket(server, session, packet);
}
void
AbstractServerGameStateReceiving::HandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg)
{
// Message processing in subclass.
InternalHandleGameEngineMsg(server, session, engineMsg);
}
boost::shared_ptr<NetPacket>
AbstractServerGameStateReceiving::CreateNetPacketPlayerJoined(unsigned gameId, const PlayerData &playerData)
{
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GamePlayerJoinedMessage);
GamePlayerJoinedMessage *netGamePlayer = packet->GetMsg()->mutable_gameplayerjoinedmessage();
netGamePlayer->set_gameid(gameId);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(gameId);
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_GamePlayerJoinedMessage);
GamePlayerJoinedMessage *netGamePlayer = netManage->mutable_gameplayerjoinedmessage();
netGamePlayer->set_playerid(playerData.GetUniqueId());
netGamePlayer->set_isgameadmin(playerData.IsGameAdmin());
return packet;
@@ -372,9 +345,13 @@ boost::shared_ptr<NetPacket>
AbstractServerGameStateReceiving::CreateNetPacketSpectatorJoined(unsigned gameId, const PlayerData &playerData)
{
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameSpectatorJoinedMessage);
GameSpectatorJoinedMessage *netGameSpectator = packet->GetMsg()->mutable_gamespectatorjoinedmessage();
netGameSpectator->set_gameid(gameId);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(gameId);
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_GameSpectatorJoinedMessage);
GameSpectatorJoinedMessage *netGameSpectator = netManage->mutable_gamespectatorjoinedmessage();
netGameSpectator->set_playerid(playerData.GetUniqueId());
return packet;
}
@@ -383,12 +360,13 @@ boost::shared_ptr<NetPacket>
AbstractServerGameStateReceiving::CreateNetPacketJoinGameAck(const ServerGame &server, const PlayerData &playerData, bool spectateOnly)
{
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_JoinGameAckMessage);
JoinGameAckMessage *netJoinReply = packet->GetMsg()->mutable_joingameackmessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_JoinGameAckMessage);
JoinGameAckMessage *netJoinReply = netLobby->mutable_joingameackmessage();
netJoinReply->set_gameid(server.GetId());
netJoinReply->set_areyougameadmin(playerData.IsGameAdmin());
netJoinReply->set_spectateonly(spectateOnly);
NetGameInfo *gameInfo = netJoinReply->mutable_gameinfo();
NetPacket::SetGameData(server.GetGameData(), *gameInfo);
gameInfo->set_gamename(server.GetName());
@@ -401,10 +379,13 @@ AbstractServerGameStateReceiving::CreateNetPacketHandStart(const ServerGame &ser
const Game &curGame = server.GetGame();
boost::shared_ptr<NetPacket> notifyCards(new NetPacket);
notifyCards->GetMsg()->set_messagetype(PokerTHMessage::Type_HandStartMessage);
HandStartMessage *netHandStart = notifyCards->GetMsg()->mutable_handstartmessage();
netHandStart->set_gameid(server.GetId());
notifyCards->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = notifyCards->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server.GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_HandStartMessage);
HandStartMessage *netHandStart = netEngine->mutable_handstartmessage();
PlayerListIterator player_i = curGame.getSeatsList()->begin();
PlayerListIterator player_end = curGame.getSeatsList()->end();
int playerCounter = 0;
@@ -603,8 +584,13 @@ ServerGameStateInit::TimerAdminWarning(const boost::system::error_code &ec, boos
if (session) {
// Send him a warning.
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_TimeoutWarningMessage);
TimeoutWarningMessage *netWarning = packet->GetMsg()->mutable_timeoutwarningmessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_TimeoutWarningMessage);
TimeoutWarningMessage *netWarning = netManage->mutable_timeoutwarningmessage();
netWarning->set_timeoutreason(TimeoutWarningMessage::timeoutInactiveGame);
netWarning->set_remainingseconds(SERVER_GAME_ADMIN_WARNING_REMAINING_SEC);
server->GetLobbyThread().GetSender().Send(session, packet);
@@ -653,10 +639,14 @@ ServerGameStateInit::SendStartEvent(ServerGame &server, bool fillWithComputerPla
}
}
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_StartEventMessage);
StartEventMessage *netStartEvent = packet->GetMsg()->mutable_starteventmessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server.GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_StartEventMessage);
StartEventMessage *netStartEvent = netManage->mutable_starteventmessage();
netStartEvent->set_starteventtype(StartEventMessage::startEvent);
netStartEvent->set_gameid(server.GetId());
netStartEvent->set_fillwithcomputerplayers(fillWithComputerPlayers);
// Wait for all players to confirm start of game.
@@ -668,13 +658,12 @@ ServerGameStateInit::SendStartEvent(ServerGame &server, bool fillWithComputerPla
}
void
ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
ServerGameStateInit::InternalHandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg)
{
if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_StartEventMessage) {
const StartEventMessage &netStartEvent = packet->GetMsg()->starteventmessage();
if (managementMsg.messagetype() == GameManagementMessage::Type_StartEventMessage) {
const StartEventMessage &netStartEvent = managementMsg.starteventmessage();
// Only admins are allowed to start the game.
if (session->GetPlayerData()->IsGameAdmin()
&& netStartEvent.gameid() == server->GetId()
&& netStartEvent.starteventtype() == StartEventMessage::startEvent
&& (server->GetGameData().gameType != GAME_TYPE_RANKING // ranking games need to be full
|| server->GetGameData().maxNumberOfPlayers == server->GetCurNumberOfPlayers())) {
@@ -682,14 +671,16 @@ ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server,
} else { // kick players who try to start but are not allowed to
server->MoveSessionToLobby(session, NTF_NET_REMOVED_START_FAILED);
}
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_InvitePlayerToGameMessage) {
const InvitePlayerToGameMessage &netInvite = packet->GetMsg()->inviteplayertogamemessage();
} else if (managementMsg.messagetype() == GameManagementMessage::Type_InvitePlayerToGameMessage) {
const InvitePlayerToGameMessage &netInvite = managementMsg.inviteplayertogamemessage();
// Only invite players which are not already within the group.
if (netInvite.gameid() == server->GetId() && !server->IsPlayerConnected(netInvite.playerid())) {
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_InviteNotifyMessage);
InviteNotifyMessage *netInvNotif = packet->GetMsg()->mutable_invitenotifymessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = packet->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_InviteNotifyMessage);
InviteNotifyMessage *netInvNotif = netLobby->mutable_invitenotifymessage();
netInvNotif->set_gameid(netInvite.gameid());
netInvNotif->set_playeridbywhom(session->GetPlayerData()->GetUniqueId());
netInvNotif->set_playeridwho(netInvite.playerid());
@@ -702,8 +693,10 @@ ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server,
} else {
// Player is not in lobby - send reject message.
boost::shared_ptr<NetPacket> p2(new NetPacket);
p2->GetMsg()->set_messagetype(PokerTHMessage::Type_RejectInvNotifyMessage);
RejectInvNotifyMessage *netRejNotif = p2->GetMsg()->mutable_rejectinvnotifymessage();
p2->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = p2->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_RejectInvNotifyMessage);
RejectInvNotifyMessage *netRejNotif = netLobby->mutable_rejectinvnotifymessage();
netRejNotif->set_gameid(netInvite.gameid());
netRejNotif->set_playerid(netInvite.playerid());
netRejNotif->set_playerrejectreason(RejectGameInvitationMessage::rejectReasonBusy);
@@ -711,19 +704,18 @@ ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server,
server->SendToAllPlayers(p2, SessionData::Game);
}
}
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_ResetTimeoutMessage) {
} else if (managementMsg.messagetype() == GameManagementMessage::Type_ResetTimeoutMessage) {
if (session->GetPlayerData()->IsGameAdmin()) {
RegisterAdminTimer(server);
}
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_AdminRemoveGameMessage) {
server->GetLobbyThread().HandleAdminRemoveGame(session, packet->GetMsg()->adminremovegamemessage());
} else if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_AdminBanPlayerMessage) {
server->GetLobbyThread().HandleAdminBanPlayer(session, packet->GetMsg()->adminbanplayermessage());
} else {
server->SessionError(session, ERR_SOCK_INVALID_PACKET);
}
}
void
ServerGameStateInit::InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/, const GameEngineMessage &/*engineMsg*/)
{
}
//-----------------------------------------------------------------------------
ServerGameStateStartGame ServerGameStateStartGame::s_state;
@@ -774,9 +766,9 @@ ServerGameStateStartGame::HandleNewSpectator(boost::shared_ptr<ServerGame> serve
}
void
ServerGameStateStartGame::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
ServerGameStateStartGame::InternalHandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg)
{
if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_StartEventAckMessage) {
if (managementMsg.messagetype() == GameManagementMessage::Type_StartEventAckMessage) {
session->SetReadyFlag();
if (server->GetSessionManager().CountReadySessions() == server->GetSessionManager().GetSessionCountWithState(SessionData::Game)) {
// Everyone is ready.
@@ -786,6 +778,11 @@ ServerGameStateStartGame::InternalProcessPacket(boost::shared_ptr<ServerGame> se
}
}
void
ServerGameStateStartGame::InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/, const GameEngineMessage &/*engineMsg*/)
{
}
void
ServerGameStateStartGame::TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server)
{
@@ -811,9 +808,13 @@ ServerGameStateStartGame::DoStart(boost::shared_ptr<ServerGame> server)
}
} else {
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameStartInitialMessage);
GameStartInitialMessage *netGameStart = packet->GetMsg()->mutable_gamestartinitialmessage();
netGameStart->set_gameid(server->GetId());
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_GameStartInitialMessage);
GameStartInitialMessage *netGameStart = netManage->mutable_gamestartinitialmessage();
netGameStart->set_startdealerplayerid(server->GetStartData().startDealerPlayerId);
// Send player order to clients.
@@ -854,10 +855,14 @@ AbstractServerGameStateRunning::HandleNewPlayer(boost::shared_ptr<ServerGame> se
// Send start event right away.
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_StartEventMessage);
StartEventMessage *netStartEvent = packet->GetMsg()->mutable_starteventmessage();
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_StartEventMessage);
StartEventMessage *netStartEvent = netManage->mutable_starteventmessage();
netStartEvent->set_starteventtype(StartEventMessage::rejoinEvent);
netStartEvent->set_gameid(server->GetId());
// Wait for rejoining player to confirm start of game.
server->GetLobbyThread().GetSender().Send(session, packet);
@@ -879,14 +884,19 @@ AbstractServerGameStateRunning::HandleNewSpectator(boost::shared_ptr<ServerGame>
}
void
AbstractServerGameStateRunning::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
AbstractServerGameStateRunning::InternalHandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg)
{
if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_ResetTimeoutMessage) {
if (managementMsg.messagetype() == GameManagementMessage::Type_ResetTimeoutMessage) {
// Reactivate session.
server->AddReactivatePlayer(session->GetPlayerData()->GetUniqueId());
}
}
void
AbstractServerGameStateRunning::InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/, const GameEngineMessage &/*engineMsg*/)
{
}
//-----------------------------------------------------------------------------
ServerGameStateHand ServerGameStateHand::s_state;
@@ -921,12 +931,6 @@ ServerGameStateHand::Exit(boost::shared_ptr<ServerGame> server)
server->GetStateTimer1().cancel();
}
void
ServerGameStateHand::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
{
AbstractServerGameStateRunning::InternalProcessPacket(server, session, packet);
}
void
ServerGameStateHand::TimerLoop(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server)
{
@@ -966,9 +970,13 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
&& nonFoldPlayers.size() > 1) {
// Send cards of all active players to all players (all in).
boost::shared_ptr<NetPacket> allIn(new NetPacket);
allIn->GetMsg()->set_messagetype(PokerTHMessage::Type_AllInShowCardsMessage);
AllInShowCardsMessage *netAllInShow = allIn->GetMsg()->mutable_allinshowcardsmessage();
netAllInShow->set_gameid(server->GetId());
allIn->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = allIn->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_AllInShowCardsMessage);
AllInShowCardsMessage *netAllInShow = netEngine->mutable_allinshowcardsmessage();
PlayerListConstIterator i = nonFoldPlayers.begin();
PlayerListConstIterator end = nonFoldPlayers.end();
@@ -1013,9 +1021,14 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
throw ServerException(__FILE__, __LINE__, ERR_NET_PLAYER_NOT_ACTIVE, 0);
boost::shared_ptr<NetPacket> notification(new NetPacket);
notification->GetMsg()->set_messagetype(PokerTHMessage::Type_PlayersTurnMessage);
PlayersTurnMessage *netPlayersTurn = notification->GetMsg()->mutable_playersturnmessage();
netPlayersTurn->set_gameid(server->GetId());
notification->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = notification->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_PlayersTurnMessage);
PlayersTurnMessage *netPlayersTurn = netEngine->mutable_playersturnmessage();
netPlayersTurn->set_gamestate(static_cast<NetGameState>(curGame.getCurrentHand()->getCurrentRound()));
netPlayersTurn->set_playerid(curPlayer->getMyUniqueID());
server->SendToAllPlayers(notification, SessionData::Game | SessionData::Spectating);
@@ -1055,9 +1068,13 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
// End of Hand, but keep cards hidden.
boost::shared_ptr<PlayerInterface> player = nonFoldPlayers.front();
boost::shared_ptr<NetPacket> endHand(new NetPacket);
endHand->GetMsg()->set_messagetype(PokerTHMessage::Type_EndOfHandHideCardsMessage);
EndOfHandHideCardsMessage *netEndHand = endHand->GetMsg()->mutable_endofhandhidecardsmessage();
netEndHand->set_gameid(server->GetId());
endHand->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = endHand->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_EndOfHandHideCardsMessage);
EndOfHandHideCardsMessage *netEndHand = netEngine->mutable_endofhandhidecardsmessage();
netEndHand->set_playerid(player->getMyUniqueID());
netEndHand->set_moneywon(player->getLastMoneyWon());
netEndHand->set_playermoney(player->getMyCash());
@@ -1066,9 +1083,13 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
// End of Hand - show cards.
const PlayerIdList showList(curGame.getCurrentHand()->getBoard()->getPlayerNeedToShowCards());
boost::shared_ptr<NetPacket> endHand(new NetPacket);
endHand->GetMsg()->set_messagetype(PokerTHMessage::Type_EndOfHandShowCardsMessage);
EndOfHandShowCardsMessage *netEndHand = endHand->GetMsg()->mutable_endofhandshowcardsmessage();
netEndHand->set_gameid(server->GetId());
endHand->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = endHand->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_EndOfHandShowCardsMessage);
EndOfHandShowCardsMessage *netEndHand = netEngine->mutable_endofhandshowcardsmessage();
PlayerIdList::const_iterator i = showList.begin();
PlayerIdList::const_iterator end = showList.end();
@@ -1163,9 +1184,13 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
{
if (!ec && &server->GetState() == this) {
boost::shared_ptr<NetPacket> endGame(new NetPacket);
endGame->GetMsg()->set_messagetype(PokerTHMessage::Type_EndOfGameMessage);
EndOfGameMessage *netEndGame = endGame->GetMsg()->mutable_endofgamemessage();
netEndGame->set_gameid(server->GetId());
endGame->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = endGame->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_EndOfGameMessage);
EndOfGameMessage *netEndGame = netManage->mutable_endofgamemessage();
netEndGame->set_winnerplayerid(winnerPlayerId);
server->SendToAllPlayers(endGame, SessionData::Game | SessionData::Spectating);
@@ -1241,7 +1266,7 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
tmpPlayer->getMyHoleCards(cards);
boost::shared_ptr<NetPacket> notifyCards = CreateNetPacketHandStart(*server);
HandStartMessage *netHandStart = notifyCards->GetMsg()->mutable_handstartmessage();
HandStartMessage *netHandStart = notifyCards->GetMsg()->mutable_gamemessage()->mutable_gameenginemessage()->mutable_handstartmessage();
string tmpPassword(tmpSession->AuthGetPassword());
if (tmpPassword.empty()) { // encrypt only if password is present
HandStartMessage::PlainCards *plainCards = netHandStart->mutable_plaincards();
@@ -1287,9 +1312,13 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
if (tmpPlayer->getMyButton() == BUTTON_SMALL_BLIND) {
boost::shared_ptr<NetPacket> notifySmallBlind(new NetPacket);
notifySmallBlind->GetMsg()->set_messagetype(PokerTHMessage::Type_PlayersActionDoneMessage);
PlayersActionDoneMessage *netSmallBlind = notifySmallBlind->GetMsg()->mutable_playersactiondonemessage();
netSmallBlind->set_gameid(server->GetId());
notifySmallBlind->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = notifySmallBlind->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_PlayersActionDoneMessage);
PlayersActionDoneMessage *netSmallBlind = netEngine->mutable_playersactiondonemessage();
netSmallBlind->set_gamestate(netStatePreflopSmallBlind);
netSmallBlind->set_playerid(tmpPlayer->getMyUniqueID());
netSmallBlind->set_playeraction(static_cast<NetPlayerAction>(tmpPlayer->getMyAction()));
@@ -1309,9 +1338,13 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
if (tmpPlayer->getMyButton() == BUTTON_BIG_BLIND) {
boost::shared_ptr<NetPacket> notifyBigBlind(new NetPacket);
notifyBigBlind->GetMsg()->set_messagetype(PokerTHMessage::Type_PlayersActionDoneMessage);
PlayersActionDoneMessage *netBigBlind = notifyBigBlind->GetMsg()->mutable_playersactiondonemessage();
netBigBlind->set_gameid(server->GetId());
notifyBigBlind->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = notifyBigBlind->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_PlayersActionDoneMessage);
PlayersActionDoneMessage *netBigBlind = netEngine->mutable_playersactiondonemessage();
netBigBlind->set_gamestate(netStatePreflopBigBlind);
netBigBlind->set_playerid(tmpPlayer->getMyUniqueID());
netBigBlind->set_playeraction(static_cast<NetPlayerAction>(tmpPlayer->getMyAction()));
@@ -1346,8 +1379,12 @@ ServerGameStateHand::CheckPlayerTimeouts(boost::shared_ptr<ServerGame> server)
boost::shared_ptr<SessionData> session = server->GetSessionManager().GetSessionByUniquePlayerId(tmpPlayer->getMyUniqueID());
if (session) {
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_TimeoutWarningMessage);
TimeoutWarningMessage *netWarning = packet->GetMsg()->mutable_timeoutwarningmessage();
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_TimeoutWarningMessage);
TimeoutWarningMessage *netWarning = netManage->mutable_timeoutwarningmessage();
netWarning->set_timeoutreason(TimeoutWarningMessage::timeoutKickAfterAutofold);
netWarning->set_remainingseconds(actionTimeout * SERVER_GAME_FORCED_TIMEOUT_FACTOR - tmpPlayer->getTimeSecSinceLastRemoteAction());
server->GetLobbyThread().GetSender().Send(session, packet);
@@ -1418,8 +1455,12 @@ ServerGameStateHand::PerformRejoin(boost::shared_ptr<ServerGame> server, boost::
if (rejoinPlayer) {
// Notify other clients about id change.
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_PlayerIdChangedMessage);
PlayerIdChangedMessage *netIdChanged = packet->GetMsg()->mutable_playeridchangedmessage();
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_PlayerIdChangedMessage);
PlayerIdChangedMessage *netIdChanged = netManage->mutable_playeridchangedmessage();
netIdChanged->set_oldplayerid(rejoinPlayer->getMyUniqueID());
netIdChanged->set_newplayerid(session->GetPlayerData()->GetUniqueId());
server->SendToAllButOnePlayers(packet, session->GetId(), SessionData::Game | SessionData::Spectating | SessionData::SpectatorWaiting);
@@ -1445,9 +1486,12 @@ ServerGameStateHand::SendGameData(boost::shared_ptr<ServerGame> server, boost::s
Game &curGame = server->GetGame();
// Send game start notification to rejoining client.
boost::shared_ptr<NetPacket> packet(new NetPacket);
packet->GetMsg()->set_messagetype(PokerTHMessage::Type_GameStartRejoinMessage);
GameStartRejoinMessage *netGameStart = packet->GetMsg()->mutable_gamestartrejoinmessage();
netGameStart->set_gameid(server->GetId());
GameMessage *netGame = packet->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameManagementMessage);
GameManagementMessage *netManage = netGame->mutable_gamemanagementmessage();
netManage->set_messagetype(GameManagementMessage::Type_GameStartRejoinMessage);
GameStartRejoinMessage *netGameStart = netManage->mutable_gamestartrejoinmessage();
netGameStart->set_startdealerplayerid(curGame.getDealerPosition());
netGameStart->set_handnum(curGame.getCurrentHandID());
PlayerListIterator player_i = curGame.getSeatsList()->begin();
@@ -1507,13 +1551,14 @@ ServerGameStateWaitPlayerAction::Exit(boost::shared_ptr<ServerGame> server)
server->GetStateTimer1().cancel();
}
void
ServerGameStateWaitPlayerAction::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
{
AbstractServerGameStateRunning::InternalProcessPacket(server, session, packet);
if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_MyActionRequestMessage) {
MyActionRequestMessage *netMyAction = packet->GetMsg()->mutable_myactionrequestmessage();
void
ServerGameStateWaitPlayerAction::InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg)
{
AbstractServerGameStateRunning::InternalHandleGameEngineMsg(server, session, engineMsg);
if (engineMsg.messagetype() == GameEngineMessage::Type_MyActionRequestMessage) {
MyActionRequestMessage netMyAction = engineMsg.myactionrequestmessage();
// TODO consider game id.
Game &curGame = server->GetGame();
@@ -1523,7 +1568,7 @@ ServerGameStateWaitPlayerAction::InternalProcessPacket(boost::shared_ptr<ServerG
// Check whether this is the correct round.
PlayerActionCode code = ACTION_CODE_VALID;
if (curGame.getCurrentHand()->getCurrentRound() != static_cast<GameState>(netMyAction->gamestate()))
if (curGame.getCurrentHand()->getCurrentRound() != static_cast<GameState>(netMyAction.gamestate()))
code = ACTION_CODE_INVALID_STATE;
// Check whether this is the correct player.
@@ -1534,20 +1579,20 @@ ServerGameStateWaitPlayerAction::InternalProcessPacket(boost::shared_ptr<ServerG
}
// If the client omitted some values, fill them in.
if (netMyAction->myaction() == netActionCall && netMyAction->myrelativebet() == 0) {
if (netMyAction.myaction() == netActionCall && netMyAction.myrelativebet() == 0) {
if (curGame.getCurrentHand()->getCurrentBeRo()->getHighestSet() >= tmpPlayer->getMySet() + tmpPlayer->getMyCash())
netMyAction->set_myaction(netActionAllIn);
netMyAction.set_myaction(netActionAllIn);
else
netMyAction->set_myrelativebet(curGame.getCurrentHand()->getCurrentBeRo()->getHighestSet() - tmpPlayer->getMySet());
netMyAction.set_myrelativebet(curGame.getCurrentHand()->getCurrentBeRo()->getHighestSet() - tmpPlayer->getMySet());
}
if (netMyAction->myaction() == netActionAllIn && netMyAction->myrelativebet() == 0)
netMyAction->set_myrelativebet(tmpPlayer->getMyCash());
if (netMyAction.myaction() == netActionAllIn && netMyAction.myrelativebet() == 0)
netMyAction.set_myrelativebet(tmpPlayer->getMyCash());
// Check whether the action is valid.
if (code == ACTION_CODE_VALID
&& (tmpPlayer->checkMyAction(
netMyAction->myaction(),
netMyAction->myrelativebet(),
netMyAction.myaction(),
netMyAction.myrelativebet(),
curGame.getCurrentHand()->getCurrentBeRo()->getHighestSet(),
curGame.getCurrentHand()->getCurrentBeRo()->getMinimumRaise(),
curGame.getCurrentHand()->getSmallBlind()) != 0)) {
@@ -1557,17 +1602,21 @@ ServerGameStateWaitPlayerAction::InternalProcessPacket(boost::shared_ptr<ServerG
if (code == ACTION_CODE_VALID) {
tmpPlayer->setIsSessionActive(true);
tmpPlayer->markRemoteAction();
PerformPlayerAction(*server, tmpPlayer, static_cast<PlayerAction>(netMyAction->myaction()), netMyAction->myrelativebet());
PerformPlayerAction(*server, tmpPlayer, static_cast<PlayerAction>(netMyAction.myaction()), netMyAction.myrelativebet());
server->SetState(ServerGameStateHand::Instance());
} else {
// Send reject message.
boost::shared_ptr<NetPacket> reject(new NetPacket);
reject->GetMsg()->set_messagetype(PokerTHMessage::Type_YourActionRejectedMessage);
YourActionRejectedMessage *netActionRejected = reject->GetMsg()->mutable_youractionrejectedmessage();
netActionRejected->set_gameid(server->GetId());
netActionRejected->set_gamestate(netMyAction->gamestate());
netActionRejected->set_youraction(netMyAction->myaction());
netActionRejected->set_yourrelativebet(netMyAction->myrelativebet());
reject->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = reject->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_YourActionRejectedMessage);
YourActionRejectedMessage *netActionRejected = netEngine->mutable_youractionrejectedmessage();
netActionRejected->set_gamestate(netMyAction.gamestate());
netActionRejected->set_youraction(netMyAction.myaction());
netActionRejected->set_yourrelativebet(netMyAction.myrelativebet());
netActionRejected->set_rejectionreason(static_cast<YourActionRejectedMessage::RejectionReason>(code));
server->GetLobbyThread().GetSender().Send(session, reject);
}
@@ -1642,16 +1691,21 @@ ServerGameStateWaitNextHand::Exit(boost::shared_ptr<ServerGame> server)
}
void
ServerGameStateWaitNextHand::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
ServerGameStateWaitNextHand::InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg)
{
AbstractServerGameStateRunning::InternalProcessPacket(server, session, packet);
AbstractServerGameStateRunning::InternalHandleGameEngineMsg(server, session, engineMsg);
if (packet->GetMsg()->messagetype() == PokerTHMessage::Type_ShowMyCardsRequestMessage) {
if (engineMsg.messagetype() == GameEngineMessage::Type_ShowMyCardsRequestMessage) {
Game &curGame = server->GetGame();
boost::shared_ptr<NetPacket> show(new NetPacket);
show->GetMsg()->set_messagetype(PokerTHMessage::Type_AfterHandShowCardsMessage);
show->GetMsg()->set_messagetype(PokerTHMessage::Type_GameMessage);
GameMessage *netGame = show->GetMsg()->mutable_gamemessage();
netGame->set_gameid(server->GetId());
netGame->set_messagetype(GameMessage::Type_GameEngineMessage);
GameEngineMessage *netEngine = netGame->mutable_gameenginemessage();
netEngine->set_messagetype(GameEngineMessage::Type_AfterHandShowCardsMessage);
AfterHandShowCardsMessage *netShowCards = netEngine->mutable_afterhandshowcardsmessage();
AfterHandShowCardsMessage *netShowCards = show->GetMsg()->mutable_afterhandshowcardsmessage();
boost::shared_ptr<PlayerInterface> tmpPlayer(curGame.getPlayerByUniqueId(session->GetPlayerData()->GetUniqueId()));
if (tmpPlayer) {
SetPlayerResult(*netShowCards->mutable_playerresult(), tmpPlayer, curGame.getCurrentHand()->getRoundBeforePostRiver());
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -48,7 +48,7 @@ using namespace boost::chrono;
#endif
SessionData::SessionData(boost::shared_ptr<boost::asio::ip::tcp::socket> sock, SessionId id, SessionDataCallback &cb, boost::asio::io_service &ioService)
: m_socket(sock), m_id(id), m_state(SessionData::Init), m_readyFlag(false), m_wantsLobbyMsg(true),
: m_socket(sock), m_id(id), m_state(SessionData::Auth), m_readyFlag(false), m_wantsLobbyMsg(true),
m_activityTimeoutSec(0), m_activityWarningRemainingSec(0), m_initTimeoutTimer(ioService), m_globalTimeoutTimer(ioService),
m_activityTimeoutTimer(ioService), m_callback(cb), m_authSession(NULL), m_curAuthStep(0)
{
@@ -221,7 +221,7 @@ void
SessionData::TimerInitTimeout(const boost::system::error_code &ec)
{
if (!ec) {
if (GetState() == SessionData::Init) {
if (GetState() == SessionData::Auth || GetState() == SessionData::Init) {
m_callback.SessionError(shared_from_this(), ERR_NET_SESSION_TIMED_OUT);
}
}
+4 -2
View File
@@ -100,7 +100,8 @@ SessionManager::GetSessionByPlayerName(const string &playerName) const
while (session_i != session_end) {
// Check all players which are fully connected.
if (session_i->second->GetState() != SessionData::Init) {
SessionData::State curState = session_i->second->GetState();
if (curState != SessionData::Auth && curState != SessionData::Init) {
boost::shared_ptr<PlayerData> tmpPlayer(session_i->second->GetPlayerData());
if (!tmpPlayer)
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
@@ -126,7 +127,8 @@ SessionManager::GetSessionByUniquePlayerId(unsigned uniqueId, bool initSessions)
while (session_i != session_end) {
// Check all players which are fully connected.
if (initSessions || session_i->second->GetState() != SessionData::Init) {
SessionData::State curState = session_i->second->GetState();
if (initSessions || (curState != SessionData::Auth && curState != SessionData::Init)) {
boost::shared_ptr<PlayerData> tmpPlayer(session_i->second->GetPlayerData());
if (tmpPlayer && tmpPlayer->GetUniqueId() == uniqueId) {
tmpSession = session_i->second;
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -58,7 +58,7 @@ WebReceiveBuffer::HandleMessage(boost::shared_ptr<SessionData> session, const st
boost::shared_ptr<NetPacket> tmpPacket;
try {
tmpPacket = NetPacket::Create(msg.c_str(), msg.size());
if (!validator.IsValidPacket(*tmpPacket)) {
if (!validator.IsValidMessage(*tmpPacket->GetMsg())) {
LOG_ERROR("Session " << session->GetId() << " - Invalid packet: " << tmpPacket->GetMsg()->messagetype());
tmpPacket.reset();
}
+10 -2
View File
@@ -55,6 +55,12 @@
#define MAX_NUM_PLAYER_RESULTS MAX_NUMBER_OF_PLAYERS
#define MAX_NUM_PLAYER_CARDS MAX_NUMBER_OF_PLAYERS*/
#define VALIDATE_IS_UINT16(__val) ((__val) <= 65535)
#define VALIDATE_STRING_SIZE(__str, __minsize, __maxsize) ((__str).size() >= (__minsize) && (__str).size() <= (__maxsize))
#define VALIDATE_UINT_RANGE(__val, __minval, __maxval) ((__val) >= (__minval) && (__val) <= (__maxval))
#define VALIDATE_UINT_UPPER(__val, __maxval) ((__val) <= (__maxval))
#define VALIDATE_LIST_SIZE(__l, __minsize, __maxsize) ((__l).size() >= (__minsize) && (__l).size() <= (__maxsize))
// This is just a wrapper class for the protocol buffer.
class NetPacket
{
@@ -65,10 +71,12 @@ public:
static boost::shared_ptr<NetPacket> Create(const char *data, size_t dataSize);
const PokerTHMessage *GetMsg() const {
const PokerTHMessage *GetMsg() const
{
return m_msg;
}
PokerTHMessage *GetMsg() {
PokerTHMessage *GetMsg()
{
return m_msg;
}
+2 -2
View File
@@ -36,7 +36,7 @@
#include <boost/enable_shared_from_this.hpp>
#include <boost/system/error_code.hpp>
#include <net/netpacket.h>
#include <net/netpacketvalidator.h>
#include <net/validation/pokerthmessagevalidator.h>
class SessionData;
@@ -51,7 +51,7 @@ public:
protected:
static NetPacketValidator validator;
static PokerTHMessageValidator validator;
};
+16 -8
View File
@@ -52,16 +52,19 @@ public:
typedef typename P::endpoint P_endpoint;
ServerAcceptHelper(ServerCallback &serverCallback, boost::shared_ptr<boost::asio::io_service> ioService)
: m_ioService(ioService), m_serverCallback(serverCallback) {
: m_ioService(ioService), m_serverCallback(serverCallback)
{
m_acceptor.reset(new P_acceptor(*m_ioService));
}
virtual ~ServerAcceptHelper() {
virtual ~ServerAcceptHelper()
{
}
// Set the parameters.
virtual void Listen(unsigned serverPort, bool ipv6, const std::string &/*logDir*/,
boost::shared_ptr<ServerLobbyThread> lobbyThread) {
boost::shared_ptr<ServerLobbyThread> lobbyThread)
{
m_lobbyThread = lobbyThread;
try {
@@ -77,14 +80,16 @@ public:
}
}
virtual void Close() {
virtual void Close()
{
boost::system::error_code ec;
m_acceptor->close(ec);
// Ignore any error, because we are terminating.
}
protected:
void InternalListen(unsigned serverPort, bool ipv6) {
void InternalListen(unsigned serverPort, bool ipv6)
{
if (serverPort < 1024)
throw ServerException(__FILE__, __LINE__, ERR_SOCK_INVALID_PORT, 0);
@@ -114,7 +119,8 @@ protected:
}
void HandleAccept(boost::shared_ptr<typename P::socket> acceptedSocket,
const boost::system::error_code &error) {
const boost::system::error_code &error)
{
if (!error) {
boost::asio::socket_base::non_blocking_io command(true);
acceptedSocket->io_control(command);
@@ -136,11 +142,13 @@ protected:
}
}
ServerCallback &GetCallback() {
ServerCallback &GetCallback()
{
return m_serverCallback;
}
ServerLobbyThread &GetLobbyThread() {
ServerLobbyThread &GetLobbyThread()
{
return *m_lobbyThread;
}
+2 -6
View File
@@ -52,6 +52,7 @@ class PlayerInterface;
class ConfigFile;
struct GameData;
class Game;
class GameMessage;
class ServerGame : public boost::enable_shared_from_this<ServerGame>
{
@@ -74,7 +75,7 @@ public:
void MarkPlayerAsInactive(unsigned playerId);
void MarkPlayerAsKicked(unsigned playerId);
void HandlePacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
void HandleGameMsg(boost::shared_ptr<SessionData> session, const GameMessage &gameMsg);
ServerCallback &GetCallback();
GameState GetCurRound() const;
@@ -171,9 +172,6 @@ protected:
void AssignPlayerNumbers(PlayerDataList &playerList);
bool IsValidPlayer(unsigned playerId) const;
void AddReportedAvatar(unsigned playerId);
bool IsAvatarReported(unsigned playerId) const;
ServerLobbyThread &GetLobbyThread();
ServerGameState &GetState();
@@ -216,8 +214,6 @@ private:
PlayerIdList m_newSpectatorList;
mutable boost::mutex m_newSpectatorListMutex;
PlayerIdList m_reportedAvatarList;
RankingMap m_rankingMap;
unsigned m_adminPlayerId;
+19 -11
View File
@@ -49,6 +49,9 @@ class Game;
class ServerGame;
class PlayerInterface;
class ServerCallback;
class GameMessage;
class GameManagementMessage;
class GameEngineMessage;
class ServerGameState
{
@@ -66,7 +69,7 @@ public:
virtual void HandleNewSpectator(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session) = 0;
// Main processing function of the current state.
virtual void ProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet) = 0;
virtual void HandleGameMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameMessage &gameMsg) = 0;
};
// Abstract State: Receiving.
@@ -76,8 +79,10 @@ public:
virtual ~AbstractServerGameStateReceiving();
// Globally handle packets which are allowed in all running states.
// Calls InternalProcess if packet has not been processed.
virtual void ProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
// Calls internal handler if packet has not been processed.
virtual void HandleGameMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameMessage &gameMsg);
virtual void HandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg);
virtual void HandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg);
static boost::shared_ptr<NetPacket> CreateNetPacketPlayerJoined(unsigned gameId, const PlayerData &playerData);
static boost::shared_ptr<NetPacket> CreateNetPacketSpectatorJoined(unsigned gameId, const PlayerData &playerData);
@@ -88,7 +93,8 @@ public:
protected:
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet) = 0;
virtual void InternalHandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg) = 0;
virtual void InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg) = 0;
};
// State: Initialization.
@@ -119,7 +125,8 @@ protected:
void TimerAdminTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
void SendStartEvent(ServerGame &server, bool fillWithComputerPlayers);
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
virtual void InternalHandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg);
virtual void InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg);
private:
static ServerGameStateInit s_state;
@@ -143,7 +150,8 @@ public:
protected:
ServerGameStateStartGame();
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
virtual void InternalHandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg);
virtual void InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg);
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
void DoStart(boost::shared_ptr<ServerGame> server);
@@ -160,7 +168,8 @@ public:
virtual void HandleNewSpectator(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
protected:
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
virtual void InternalHandleGameManagementMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameManagementMessage &managementMsg);
virtual void InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame>, boost::shared_ptr<SessionData>, const GameEngineMessage &);
};
// State: Within hand.
@@ -179,7 +188,6 @@ public:
protected:
ServerGameStateHand();
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
void TimerLoop(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
void EngineLoop(boost::shared_ptr<ServerGame> server);
void TimerShowCards(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
@@ -218,7 +226,7 @@ public:
protected:
ServerGameStateWaitPlayerAction();
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
virtual void InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg);
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
private:
@@ -241,7 +249,7 @@ public:
protected:
ServerGameStateWaitNextHand();
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
virtual void InternalHandleGameEngineMsg(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, const GameEngineMessage &engineMsg);
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
private:
@@ -265,7 +273,7 @@ public:
virtual void HandleNewSpectator(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/) {}
// Main processing function of the current state.
virtual void ProcessPacket(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/, boost::shared_ptr<NetPacket> /*packet*/) {}
virtual void HandleGameMsg(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/, const GameMessage &/*gameMsg*/) {}
protected:
ServerGameStateFinal() {}
+13 -10
View File
@@ -87,12 +87,6 @@ public:
void NotifyReopeningGame(unsigned gameId);
void DispatchPacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
void HandleGameRetrievePlayerInfo(boost::shared_ptr<SessionData> session, const PlayerInfoRequestMessage &playerInfoRequest);
void HandleGameRetrieveAvatar(boost::shared_ptr<SessionData> session, const AvatarRequestMessage &retrieveAvatar);
void HandleGameReportGame(boost::shared_ptr<SessionData> session, const ReportGameMessage &reportGame);
void HandleChatRequest(boost::shared_ptr<SessionData> session, const ChatRequestMessage &chatRequest);
void HandleAdminRemoveGame(boost::shared_ptr<SessionData> session, const AdminRemoveGameMessage &removeGame);
void HandleAdminBanPlayer(boost::shared_ptr<SessionData> session, const AdminBanPlayerMessage &banPlayer);
bool KickPlayerByName(const std::string &playerName);
bool RemoveGameByPlayerName(const std::string &playerName);
@@ -150,7 +144,7 @@ protected:
void InitChatCleaner();
void HandlePacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
void HandleNetPacketInit(boost::shared_ptr<SessionData> session, const InitMessage &initMessage);
void HandleNetPacketAuthClientRequest(boost::shared_ptr<SessionData> session, const AuthClientRequestMessage &clientRequest);
void HandleNetPacketAuthClientResponse(boost::shared_ptr<SessionData> session, const AuthClientResponseMessage &clientResponse);
void HandleNetPacketAvatarHeader(boost::shared_ptr<SessionData> session, const AvatarHeaderMessage &avatarHeader);
void HandleNetPacketUnknownAvatar(boost::shared_ptr<SessionData> session, const UnknownAvatarMessage &unknownAvatar);
@@ -158,14 +152,19 @@ protected:
void HandleNetPacketAvatarEnd(boost::shared_ptr<SessionData> session, const AvatarEndMessage &avatarEnd);
void HandleNetPacketRetrievePlayerInfo(boost::shared_ptr<SessionData> session, const PlayerInfoRequestMessage &playerInfoRequest);
void HandleNetPacketRetrieveAvatar(boost::shared_ptr<SessionData> session, const AvatarRequestMessage &retrieveAvatar);
void HandleNetPacketCreateGame(boost::shared_ptr<SessionData> session, const JoinNewGameMessage &newGame);
void HandleNetPacketJoinGame(boost::shared_ptr<SessionData> session, const JoinExistingGameMessage &joinGame);
void HandleNetPacketRejoinGame(boost::shared_ptr<SessionData> session, const RejoinExistingGameMessage &rejoinGame);
void HandleNetPacketCreateGame(boost::shared_ptr<SessionData> session, const CreateGameMessage &createGame);
void HandleNetPacketJoinGame(boost::shared_ptr<SessionData> session, const JoinGameMessage &joinGame);
void HandleNetPacketRejoinGame(boost::shared_ptr<SessionData> session, const RejoinGameMessage &rejoinGame);
void HandleNetPacketChatRequest(boost::shared_ptr<SessionData> session, const ChatRequestMessage &chatRequest);
void HandleNetPacketRejectGameInvitation(boost::shared_ptr<SessionData> session, const RejectGameInvitationMessage &reject);
void HandleNetPacketReportGame(boost::shared_ptr<SessionData> session, const ReportGameMessage &report);
void HandleNetPacketAdminRemoveGame(boost::shared_ptr<SessionData> session, const AdminRemoveGameMessage &removeGame);
void HandleNetPacketAdminBanPlayer(boost::shared_ptr<SessionData> session, const AdminBanPlayerMessage &banPlayer);
void HandleNetPacketReportAvatar(boost::shared_ptr<SessionData> session, const ReportAvatarMessage &reportAvatar);
void AddReportedAvatar(unsigned playerId);
bool IsAvatarReported(unsigned playerId) const;
// TODO would be better to use state pattern here.
void AuthChallenge(boost::shared_ptr<SessionData> session, const std::string &secret);
void CheckAvatarBlacklist(boost::shared_ptr<SessionData> session);
@@ -203,6 +202,7 @@ protected:
void CloseSession(boost::shared_ptr<SessionData> session);
void SendError(boost::shared_ptr<SessionData> s, int errorCode);
void SendCreateGameFailed(boost::shared_ptr<SessionData> s, unsigned requestId, int reason);
void SendJoinGameFailed(boost::shared_ptr<SessionData> s, unsigned gameId, int reason);
void SendPlayerList(boost::shared_ptr<SessionData> s);
void SendGameList(boost::shared_ptr<SessionData> s);
@@ -246,6 +246,9 @@ private:
PlayerDataMap m_computerPlayers;
mutable boost::mutex m_computerPlayersMutex;
PlayerIdList m_reportedAvatarList;
mutable boost::mutex m_reportedAvatarListMutex;
GameMap m_gameMap;
GuiInterface &m_gui;
+4 -2
View File
@@ -67,10 +67,12 @@ protected:
typedef std::list<boost::shared_ptr<ServerAcceptInterface> > AcceptHelperList;
ServerLobbyThread &GetLobbyThread();
ConfigFile &GetConfig() {
ConfigFile &GetConfig()
{
return m_playerConfig;
}
GuiInterface &GetGui() {
GuiInterface &GetGui()
{
return m_gui;
}
boost::shared_ptr<boost::asio::io_service> m_ioService;
+9 -5
View File
@@ -60,7 +60,7 @@ class ServerGame;
class SessionData : public boost::enable_shared_from_this<SessionData>
{
public:
enum State { Init = 1, ReceivingAvatar = 2, Established = 4, Game = 8, Spectating = 16, SpectatorWaiting = 32, Closed = 128 };
enum State { Auth = 1, Init = 2, ReceivingAvatar = 4, Established = 8, Game = 16, Spectating = 32, SpectatorWaiting = 64, Closed = 128 };
SessionData(boost::shared_ptr<boost::asio::ip::tcp::socket> sock, SessionId id, SessionDataCallback &cb, boost::asio::io_service &ioService);
SessionData(boost::shared_ptr<WebSocketData> webData, SessionId id, SessionDataCallback &cb, boost::asio::io_service &ioService, int filler);
@@ -96,19 +96,23 @@ public:
const std::string &GetClientAddr() const;
void SetClientAddr(const std::string &addr);
ReceiveBuffer &GetReceiveBuffer() {
ReceiveBuffer &GetReceiveBuffer()
{
return *m_receiveBuffer;
}
SendBuffer &GetSendBuffer() {
SendBuffer &GetSendBuffer()
{
return *m_sendBuffer;
}
void Close() {
void Close()
{
m_callback.CloseSession(shared_from_this());
}
void CloseSocketHandle();
void CloseWebSocketHandle();
void HandlePacket(boost::shared_ptr<NetPacket> packet) {
void HandlePacket(boost::shared_ptr<NetPacket> packet)
{
m_callback.HandlePacket(shared_from_this(), packet);
}
+15 -12
View File
@@ -120,19 +120,22 @@
#define NTF_NET_REMOVED_START_FAILED 207
#define NTF_NET_REMOVED_GAME_CLOSED 208
// Notifications - create failed
#define NTF_NET_CREATE_GUEST_FORBIDDEN 210
#define NTF_NET_CREATE_GAME_NAME_IN_USE 211
#define NTF_NET_CREATE_GAME_BAD_NAME 212
#define NTF_NET_CREATE_INVALID_SETTINGS 213
// Notifications - join failed
#define NTF_NET_JOIN_GAME_INVALID 210
#define NTF_NET_JOIN_GAME_FULL 211
#define NTF_NET_JOIN_ALREADY_RUNNING 212
#define NTF_NET_JOIN_INVALID_PASSWORD 213
#define NTF_NET_JOIN_GUEST_FORBIDDEN 214
#define NTF_NET_JOIN_NOT_INVITED 215
#define NTF_NET_JOIN_GAME_NAME_IN_USE 216
#define NTF_NET_JOIN_GAME_BAD_NAME 217
#define NTF_NET_JOIN_INVALID_SETTINGS 218
#define NTF_NET_JOIN_IP_BLOCKED 219
#define NTF_NET_JOIN_REJOIN_FAILED 220
#define NTF_NET_JOIN_NO_SPECTATORS 221
#define NTF_NET_JOIN_GAME_INVALID 220
#define NTF_NET_JOIN_GAME_FULL 221
#define NTF_NET_JOIN_ALREADY_RUNNING 222
#define NTF_NET_JOIN_GUEST_FORBIDDEN 223
#define NTF_NET_JOIN_INVALID_PASSWORD 224
#define NTF_NET_JOIN_NOT_INVITED 225
#define NTF_NET_JOIN_IP_BLOCKED 226
#define NTF_NET_JOIN_REJOIN_FAILED 227
#define NTF_NET_JOIN_NO_SPECTATORS 228
// Notifications - version
#define NTF_NET_NEW_RELEASE_AVAILABLE 231
+13 -97
View File
@@ -28,114 +28,30 @@
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* PokerTH network packet validation. */
/* PokerTH authentication message validation. */
#ifndef _NETPACKETVALIDATOR_H_
#define _NETPACKETVALIDATOR_H_
#ifndef _AUTHMESSAGEVALIDATOR_H_
#define _AUTHMESSAGEVALIDATOR_H_
#include <map>
#include <boost/function.hpp>
class NetPacket;
class NetGameInfo;
class AuthMessage;
class NetPacketValidator
class AuthMessageValidator
{
public:
NetPacketValidator();
AuthMessageValidator();
bool IsValidPacket(const NetPacket &packet) const;
bool IsValidMessage(const AuthMessage &msg) const;
protected:
static bool ValidateAnnounceMessage(const NetPacket &packet);
static bool ValidateAuthMessage(const NetPacket &packet);
static bool ValidateLobbyMessage(const NetPacket &packet);
static bool ValidateGameMessage(const NetPacket &packet);
static bool ValidateGameManagementMessage(const NetPacket &packet);
static bool ValidateGameEngineMessage(const NetPacket &packet);
static bool ValidateInitMessage(const NetPacket &packet);
static bool ValidateAuthServerChallengeMessage(const NetPacket &packet);
static bool ValidateAuthClientResponseMessage(const NetPacket &packet);
static bool ValidateAuthServerVerificationMessage(const NetPacket &packet);
static bool ValidateInitAckMessage(const NetPacket &packet);
static bool ValidateAvatarRequestMessage(const NetPacket &packet);
static bool ValidateAvatarHeaderMessage(const NetPacket &packet);
static bool ValidateAvatarDataMessage(const NetPacket &packet);
static bool ValidateAvatarEndMessage(const NetPacket &packet);
static bool ValidateUnknownAvatarMessage(const NetPacket &packet);
static bool ValidatePlayerListMessage(const NetPacket &packet);
static bool ValidateGameListNewMessage(const NetPacket &packet);
static bool ValidateGameListUpdateMessage(const NetPacket &packet);
static bool ValidateGameListPlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGameListPlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameListAdminChangedMessage(const NetPacket &packet);
static bool ValidatePlayerInfoRequestMessage(const NetPacket &packet);
static bool ValidatePlayerInfoReplyMessage(const NetPacket &packet);
static bool ValidateSubscriptionRequestMessage(const NetPacket &packet);
static bool ValidateCreateGameMessage(const NetPacket &packet);
static bool ValidateJoinGameMessage(const NetPacket &packet);
static bool ValidateRejoinGameMessage(const NetPacket &packet);
static bool ValidateJoinGameAckMessage(const NetPacket &packet);
static bool ValidateJoinGameFailedMessage(const NetPacket &packet);
static bool ValidateGamePlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGamePlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameAdminChangedMessage(const NetPacket &packet);
static bool ValidateRemovedFromGameMessage(const NetPacket &packet);
static bool ValidateKickPlayerRequestMessage(const NetPacket &packet);
static bool ValidateLeaveGameRequestMessage(const NetPacket &packet);
static bool ValidateInvitePlayerToGameMessage(const NetPacket &packet);
static bool ValidateInviteNotifyMessage(const NetPacket &packet);
static bool ValidateRejectGameInvitationMessage(const NetPacket &packet);
static bool ValidateRejectInvNotifyMessage(const NetPacket &packet);
static bool ValidateStartEventMessage(const NetPacket &packet);
static bool ValidateStartEventAckMessage(const NetPacket &packet);
static bool ValidateGameStartInitialMessage(const NetPacket &packet);
static bool ValidateGameStartRejoinMessage(const NetPacket &packet);
static bool ValidateHandStartMessage(const NetPacket &packet);
static bool ValidatePlayersTurnMessage(const NetPacket &packet);
static bool ValidateMyActionRequestMessage(const NetPacket &packet);
static bool ValidateYourActionRejectedMessage(const NetPacket &packet);
static bool ValidatePlayersActionDoneMessage(const NetPacket &packet);
static bool ValidateDealFlopCardsMessage(const NetPacket &packet);
static bool ValidateDealTurnCardMessage(const NetPacket &packet);
static bool ValidateDealRiverCardMessage(const NetPacket &packet);
static bool ValidateAllInShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandHideCardsMessage(const NetPacket &packet);
static bool ValidateShowMyCardsRequestMessage(const NetPacket &packet);
static bool ValidateAfterHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfGameMessage(const NetPacket &packet);
static bool ValidatePlayerIdChangedMessage(const NetPacket &packet);
static bool ValidateAskKickPlayerMessage(const NetPacket &packet);
static bool ValidateAskKickDeniedMessage(const NetPacket &packet);
static bool ValidateStartKickPetitionMessage(const NetPacket &packet);
static bool ValidateVoteKickRequestMessage(const NetPacket &packet);
static bool ValidateVoteKickReplyMessage(const NetPacket &packet);
static bool ValidateKickPetitionUpdateMessage(const NetPacket &packet);
static bool ValidateEndKickPetitionMessage(const NetPacket &packet);
static bool ValidateStatisticsMessage(const NetPacket &packet);
static bool ValidateChatRequestMessage(const NetPacket &packet);
static bool ValidateChatMessage(const NetPacket &packet);
static bool ValidateChatRejectMessage(const NetPacket &packet);
static bool ValidateDialogMessage(const NetPacket &packet);
static bool ValidateTimeoutWarningMessage(const NetPacket &packet);
static bool ValidateResetTimeoutMessage(const NetPacket &packet);
static bool ValidateReportAvatarMessage(const NetPacket &packet);
static bool ValidateReportAvatarAckMessage(const NetPacket &packet);
static bool ValidateReportGameMessage(const NetPacket &packet);
static bool ValidateReportGameAckMessage(const NetPacket &packet);
static bool ValidateErrorMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameAckMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerAckMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateGameSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateAuthClientRequestMessage(const AuthMessage &msg);
static bool ValidateAuthServerChallengeMessage(const AuthMessage &msg);
static bool ValidateAuthClientResponseMessage(const AuthMessage &msg);
static bool ValidateAuthServerVerificationMessage(const AuthMessage &msg);
static bool ValidateGameInfo(const NetGameInfo &gameInfo);
typedef bool (*ValidateFunctor)(const NetPacket &);
typedef boost::function<bool (const AuthMessage &)> ValidateFunctor;
typedef std::map<int, ValidateFunctor> ValidateFunctorMap;
private:
+22 -97
View File
@@ -28,114 +28,39 @@
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* PokerTH network packet validation. */
/* PokerTH game engine message validation. */
#ifndef _NETPACKETVALIDATOR_H_
#define _NETPACKETVALIDATOR_H_
#ifndef _GAMEENGINEMESSAGEVALIDATOR_H_
#define _GAMEENGINEMESSAGEVALIDATOR_H_
#include <map>
#include <boost/function.hpp>
class NetPacket;
class NetGameInfo;
class GameEngineMessage;
class NetPacketValidator
class GameEngineMessageValidator
{
public:
NetPacketValidator();
GameEngineMessageValidator();
bool IsValidPacket(const NetPacket &packet) const;
bool IsValidMessage(const GameEngineMessage &msg) const;
protected:
static bool ValidateAnnounceMessage(const NetPacket &packet);
static bool ValidateAuthMessage(const NetPacket &packet);
static bool ValidateLobbyMessage(const NetPacket &packet);
static bool ValidateGameMessage(const NetPacket &packet);
static bool ValidateGameManagementMessage(const NetPacket &packet);
static bool ValidateGameEngineMessage(const NetPacket &packet);
static bool ValidateInitMessage(const NetPacket &packet);
static bool ValidateAuthServerChallengeMessage(const NetPacket &packet);
static bool ValidateAuthClientResponseMessage(const NetPacket &packet);
static bool ValidateAuthServerVerificationMessage(const NetPacket &packet);
static bool ValidateInitAckMessage(const NetPacket &packet);
static bool ValidateAvatarRequestMessage(const NetPacket &packet);
static bool ValidateAvatarHeaderMessage(const NetPacket &packet);
static bool ValidateAvatarDataMessage(const NetPacket &packet);
static bool ValidateAvatarEndMessage(const NetPacket &packet);
static bool ValidateUnknownAvatarMessage(const NetPacket &packet);
static bool ValidatePlayerListMessage(const NetPacket &packet);
static bool ValidateGameListNewMessage(const NetPacket &packet);
static bool ValidateGameListUpdateMessage(const NetPacket &packet);
static bool ValidateGameListPlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGameListPlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameListAdminChangedMessage(const NetPacket &packet);
static bool ValidatePlayerInfoRequestMessage(const NetPacket &packet);
static bool ValidatePlayerInfoReplyMessage(const NetPacket &packet);
static bool ValidateSubscriptionRequestMessage(const NetPacket &packet);
static bool ValidateCreateGameMessage(const NetPacket &packet);
static bool ValidateJoinGameMessage(const NetPacket &packet);
static bool ValidateRejoinGameMessage(const NetPacket &packet);
static bool ValidateJoinGameAckMessage(const NetPacket &packet);
static bool ValidateJoinGameFailedMessage(const NetPacket &packet);
static bool ValidateGamePlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGamePlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameAdminChangedMessage(const NetPacket &packet);
static bool ValidateRemovedFromGameMessage(const NetPacket &packet);
static bool ValidateKickPlayerRequestMessage(const NetPacket &packet);
static bool ValidateLeaveGameRequestMessage(const NetPacket &packet);
static bool ValidateInvitePlayerToGameMessage(const NetPacket &packet);
static bool ValidateInviteNotifyMessage(const NetPacket &packet);
static bool ValidateRejectGameInvitationMessage(const NetPacket &packet);
static bool ValidateRejectInvNotifyMessage(const NetPacket &packet);
static bool ValidateStartEventMessage(const NetPacket &packet);
static bool ValidateStartEventAckMessage(const NetPacket &packet);
static bool ValidateGameStartInitialMessage(const NetPacket &packet);
static bool ValidateGameStartRejoinMessage(const NetPacket &packet);
static bool ValidateHandStartMessage(const NetPacket &packet);
static bool ValidatePlayersTurnMessage(const NetPacket &packet);
static bool ValidateMyActionRequestMessage(const NetPacket &packet);
static bool ValidateYourActionRejectedMessage(const NetPacket &packet);
static bool ValidatePlayersActionDoneMessage(const NetPacket &packet);
static bool ValidateDealFlopCardsMessage(const NetPacket &packet);
static bool ValidateDealTurnCardMessage(const NetPacket &packet);
static bool ValidateDealRiverCardMessage(const NetPacket &packet);
static bool ValidateAllInShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandHideCardsMessage(const NetPacket &packet);
static bool ValidateShowMyCardsRequestMessage(const NetPacket &packet);
static bool ValidateAfterHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfGameMessage(const NetPacket &packet);
static bool ValidatePlayerIdChangedMessage(const NetPacket &packet);
static bool ValidateAskKickPlayerMessage(const NetPacket &packet);
static bool ValidateAskKickDeniedMessage(const NetPacket &packet);
static bool ValidateStartKickPetitionMessage(const NetPacket &packet);
static bool ValidateVoteKickRequestMessage(const NetPacket &packet);
static bool ValidateVoteKickReplyMessage(const NetPacket &packet);
static bool ValidateKickPetitionUpdateMessage(const NetPacket &packet);
static bool ValidateEndKickPetitionMessage(const NetPacket &packet);
static bool ValidateStatisticsMessage(const NetPacket &packet);
static bool ValidateChatRequestMessage(const NetPacket &packet);
static bool ValidateChatMessage(const NetPacket &packet);
static bool ValidateChatRejectMessage(const NetPacket &packet);
static bool ValidateDialogMessage(const NetPacket &packet);
static bool ValidateTimeoutWarningMessage(const NetPacket &packet);
static bool ValidateResetTimeoutMessage(const NetPacket &packet);
static bool ValidateReportAvatarMessage(const NetPacket &packet);
static bool ValidateReportAvatarAckMessage(const NetPacket &packet);
static bool ValidateReportGameMessage(const NetPacket &packet);
static bool ValidateReportGameAckMessage(const NetPacket &packet);
static bool ValidateErrorMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameAckMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerAckMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateGameSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateHandStartMessage(const GameEngineMessage &msg);
static bool ValidatePlayersTurnMessage(const GameEngineMessage &msg);
static bool ValidateMyActionRequestMessage(const GameEngineMessage &msg);
static bool ValidateYourActionRejectedMessage(const GameEngineMessage &msg);
static bool ValidatePlayersActionDoneMessage(const GameEngineMessage &msg);
static bool ValidateDealFlopCardsMessage(const GameEngineMessage &msg);
static bool ValidateDealTurnCardMessage(const GameEngineMessage &msg);
static bool ValidateDealRiverCardMessage(const GameEngineMessage &msg);
static bool ValidateAllInShowCardsMessage(const GameEngineMessage &msg);
static bool ValidateEndOfHandShowCardsMessage(const GameEngineMessage &msg);
static bool ValidateEndOfHandHideCardsMessage(const GameEngineMessage &msg);
static bool ValidateShowMyCardsRequestMessage(const GameEngineMessage &msg);
static bool ValidateAfterHandShowCardsMessage(const GameEngineMessage &msg);
static bool ValidateGameInfo(const NetGameInfo &gameInfo);
typedef bool (*ValidateFunctor)(const NetPacket &);
typedef boost::function<bool (const GameEngineMessage &)> ValidateFunctor;
typedef std::map<int, ValidateFunctor> ValidateFunctorMap;
private:
@@ -28,114 +28,56 @@
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* PokerTH network packet validation. */
/* PokerTH game management message validation. */
#ifndef _NETPACKETVALIDATOR_H_
#define _NETPACKETVALIDATOR_H_
#ifndef _GAMEMANAGEMENTMESSAGEVALIDATOR_H_
#define _GAMEMANAGEMENTMESSAGEVALIDATOR_H_
#include <map>
#include <boost/function.hpp>
class NetPacket;
class NetGameInfo;
class GameManagementMessage;
class NetPacketValidator
class GameManagementMessageValidator
{
public:
NetPacketValidator();
GameManagementMessageValidator();
bool IsValidPacket(const NetPacket &packet) const;
bool IsValidMessage(const GameManagementMessage &msg) const;
protected:
static bool ValidateAnnounceMessage(const NetPacket &packet);
static bool ValidateAuthMessage(const NetPacket &packet);
static bool ValidateLobbyMessage(const NetPacket &packet);
static bool ValidateGameMessage(const NetPacket &packet);
static bool ValidateGameManagementMessage(const NetPacket &packet);
static bool ValidateGameEngineMessage(const NetPacket &packet);
static bool ValidateInitMessage(const NetPacket &packet);
static bool ValidateAuthServerChallengeMessage(const NetPacket &packet);
static bool ValidateAuthClientResponseMessage(const NetPacket &packet);
static bool ValidateAuthServerVerificationMessage(const NetPacket &packet);
static bool ValidateInitAckMessage(const NetPacket &packet);
static bool ValidateAvatarRequestMessage(const NetPacket &packet);
static bool ValidateAvatarHeaderMessage(const NetPacket &packet);
static bool ValidateAvatarDataMessage(const NetPacket &packet);
static bool ValidateAvatarEndMessage(const NetPacket &packet);
static bool ValidateUnknownAvatarMessage(const NetPacket &packet);
static bool ValidatePlayerListMessage(const NetPacket &packet);
static bool ValidateGameListNewMessage(const NetPacket &packet);
static bool ValidateGameListUpdateMessage(const NetPacket &packet);
static bool ValidateGameListPlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGameListPlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameListAdminChangedMessage(const NetPacket &packet);
static bool ValidatePlayerInfoRequestMessage(const NetPacket &packet);
static bool ValidatePlayerInfoReplyMessage(const NetPacket &packet);
static bool ValidateSubscriptionRequestMessage(const NetPacket &packet);
static bool ValidateCreateGameMessage(const NetPacket &packet);
static bool ValidateJoinGameMessage(const NetPacket &packet);
static bool ValidateRejoinGameMessage(const NetPacket &packet);
static bool ValidateJoinGameAckMessage(const NetPacket &packet);
static bool ValidateJoinGameFailedMessage(const NetPacket &packet);
static bool ValidateGamePlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGamePlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameAdminChangedMessage(const NetPacket &packet);
static bool ValidateRemovedFromGameMessage(const NetPacket &packet);
static bool ValidateKickPlayerRequestMessage(const NetPacket &packet);
static bool ValidateLeaveGameRequestMessage(const NetPacket &packet);
static bool ValidateInvitePlayerToGameMessage(const NetPacket &packet);
static bool ValidateInviteNotifyMessage(const NetPacket &packet);
static bool ValidateRejectGameInvitationMessage(const NetPacket &packet);
static bool ValidateRejectInvNotifyMessage(const NetPacket &packet);
static bool ValidateStartEventMessage(const NetPacket &packet);
static bool ValidateStartEventAckMessage(const NetPacket &packet);
static bool ValidateGameStartInitialMessage(const NetPacket &packet);
static bool ValidateGameStartRejoinMessage(const NetPacket &packet);
static bool ValidateHandStartMessage(const NetPacket &packet);
static bool ValidatePlayersTurnMessage(const NetPacket &packet);
static bool ValidateMyActionRequestMessage(const NetPacket &packet);
static bool ValidateYourActionRejectedMessage(const NetPacket &packet);
static bool ValidatePlayersActionDoneMessage(const NetPacket &packet);
static bool ValidateDealFlopCardsMessage(const NetPacket &packet);
static bool ValidateDealTurnCardMessage(const NetPacket &packet);
static bool ValidateDealRiverCardMessage(const NetPacket &packet);
static bool ValidateAllInShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandHideCardsMessage(const NetPacket &packet);
static bool ValidateShowMyCardsRequestMessage(const NetPacket &packet);
static bool ValidateAfterHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfGameMessage(const NetPacket &packet);
static bool ValidatePlayerIdChangedMessage(const NetPacket &packet);
static bool ValidateAskKickPlayerMessage(const NetPacket &packet);
static bool ValidateAskKickDeniedMessage(const NetPacket &packet);
static bool ValidateStartKickPetitionMessage(const NetPacket &packet);
static bool ValidateVoteKickRequestMessage(const NetPacket &packet);
static bool ValidateVoteKickReplyMessage(const NetPacket &packet);
static bool ValidateKickPetitionUpdateMessage(const NetPacket &packet);
static bool ValidateEndKickPetitionMessage(const NetPacket &packet);
static bool ValidateStatisticsMessage(const NetPacket &packet);
static bool ValidateChatRequestMessage(const NetPacket &packet);
static bool ValidateChatMessage(const NetPacket &packet);
static bool ValidateChatRejectMessage(const NetPacket &packet);
static bool ValidateDialogMessage(const NetPacket &packet);
static bool ValidateTimeoutWarningMessage(const NetPacket &packet);
static bool ValidateResetTimeoutMessage(const NetPacket &packet);
static bool ValidateReportAvatarMessage(const NetPacket &packet);
static bool ValidateReportAvatarAckMessage(const NetPacket &packet);
static bool ValidateReportGameMessage(const NetPacket &packet);
static bool ValidateReportGameAckMessage(const NetPacket &packet);
static bool ValidateErrorMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameAckMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerAckMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateGameSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateJoinGameMessage(const GameManagementMessage &msg);
static bool ValidateRejoinGameMessage(const GameManagementMessage &msg);
static bool ValidateJoinGameAckMessage(const GameManagementMessage &msg);
static bool ValidateJoinGameFailedMessage(const GameManagementMessage &msg);
static bool ValidateGamePlayerJoinedMessage(const GameManagementMessage &msg);
static bool ValidateGamePlayerLeftMessage(const GameManagementMessage &msg);
static bool ValidateGameSpectatorJoinedMessage(const GameManagementMessage &msg);
static bool ValidateGameSpectatorLeftMessage(const GameManagementMessage &msg);
static bool ValidateGameAdminChangedMessage(const GameManagementMessage &msg);
static bool ValidateRemovedFromGameMessage(const GameManagementMessage &msg);
static bool ValidateKickPlayerRequestMessage(const GameManagementMessage &msg);
static bool ValidateLeaveGameRequestMessage(const GameManagementMessage &msg);
static bool ValidateInvitePlayerToGameMessage(const GameManagementMessage &msg);
static bool ValidateStartEventMessage(const GameManagementMessage &msg);
static bool ValidateStartEventAckMessage(const GameManagementMessage &msg);
static bool ValidateGameStartInitialMessage(const GameManagementMessage &msg);
static bool ValidateGameStartRejoinMessage(const GameManagementMessage &msg);
static bool ValidateEndOfGameMessage(const GameManagementMessage &msg);
static bool ValidatePlayerIdChangedMessage(const GameManagementMessage &msg);
static bool ValidateAskKickPlayerMessage(const GameManagementMessage &msg);
static bool ValidateAskKickDeniedMessage(const GameManagementMessage &msg);
static bool ValidateStartKickPetitionMessage(const GameManagementMessage &msg);
static bool ValidateVoteKickRequestMessage(const GameManagementMessage &msg);
static bool ValidateVoteKickReplyMessage(const GameManagementMessage &msg);
static bool ValidateKickPetitionUpdateMessage(const GameManagementMessage &msg);
static bool ValidateEndKickPetitionMessage(const GameManagementMessage &msg);
static bool ValidateChatRequestMessage(const GameManagementMessage &msg);
static bool ValidateChatMessage(const GameManagementMessage &msg);
static bool ValidateChatRejectMessage(const GameManagementMessage &msg);
static bool ValidateErrorMessage(const GameManagementMessage &msg);
static bool ValidateGameInfo(const NetGameInfo &gameInfo);
typedef bool (*ValidateFunctor)(const NetPacket &);
typedef boost::function<bool (const GameManagementMessage &)> ValidateFunctor;
typedef std::map<int, ValidateFunctor> ValidateFunctorMap;
private:
+16 -97
View File
@@ -28,118 +28,37 @@
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* PokerTH network packet validation. */
/* PokerTH game message validation. */
#ifndef _NETPACKETVALIDATOR_H_
#define _NETPACKETVALIDATOR_H_
#ifndef _GAMEMESSAGEVALIDATOR_H_
#define _GAMEMESSAGEVALIDATOR_H_
#include <map>
#include <boost/shared_ptr.hpp>
#include <boost/function.hpp>
class NetPacket;
class NetGameInfo;
class GameMessage;
class GameManagementMessageValidator;
class GameEngineMessageValidator;
class NetPacketValidator
class GameMessageValidator
{
public:
NetPacketValidator();
GameMessageValidator();
bool IsValidPacket(const NetPacket &packet) const;
bool IsValidMessage(const GameMessage &msg) const;
protected:
static bool ValidateAnnounceMessage(const NetPacket &packet);
static bool ValidateAuthMessage(const NetPacket &packet);
static bool ValidateLobbyMessage(const NetPacket &packet);
static bool ValidateGameMessage(const NetPacket &packet);
static bool ValidateGameManagementMessage(const NetPacket &packet);
static bool ValidateGameEngineMessage(const NetPacket &packet);
static bool ValidateInitMessage(const NetPacket &packet);
static bool ValidateAuthServerChallengeMessage(const NetPacket &packet);
static bool ValidateAuthClientResponseMessage(const NetPacket &packet);
static bool ValidateAuthServerVerificationMessage(const NetPacket &packet);
static bool ValidateInitAckMessage(const NetPacket &packet);
static bool ValidateAvatarRequestMessage(const NetPacket &packet);
static bool ValidateAvatarHeaderMessage(const NetPacket &packet);
static bool ValidateAvatarDataMessage(const NetPacket &packet);
static bool ValidateAvatarEndMessage(const NetPacket &packet);
static bool ValidateUnknownAvatarMessage(const NetPacket &packet);
static bool ValidatePlayerListMessage(const NetPacket &packet);
static bool ValidateGameListNewMessage(const NetPacket &packet);
static bool ValidateGameListUpdateMessage(const NetPacket &packet);
static bool ValidateGameListPlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGameListPlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameListAdminChangedMessage(const NetPacket &packet);
static bool ValidatePlayerInfoRequestMessage(const NetPacket &packet);
static bool ValidatePlayerInfoReplyMessage(const NetPacket &packet);
static bool ValidateSubscriptionRequestMessage(const NetPacket &packet);
static bool ValidateCreateGameMessage(const NetPacket &packet);
static bool ValidateJoinGameMessage(const NetPacket &packet);
static bool ValidateRejoinGameMessage(const NetPacket &packet);
static bool ValidateJoinGameAckMessage(const NetPacket &packet);
static bool ValidateJoinGameFailedMessage(const NetPacket &packet);
static bool ValidateGamePlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGamePlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameAdminChangedMessage(const NetPacket &packet);
static bool ValidateRemovedFromGameMessage(const NetPacket &packet);
static bool ValidateKickPlayerRequestMessage(const NetPacket &packet);
static bool ValidateLeaveGameRequestMessage(const NetPacket &packet);
static bool ValidateInvitePlayerToGameMessage(const NetPacket &packet);
static bool ValidateInviteNotifyMessage(const NetPacket &packet);
static bool ValidateRejectGameInvitationMessage(const NetPacket &packet);
static bool ValidateRejectInvNotifyMessage(const NetPacket &packet);
static bool ValidateStartEventMessage(const NetPacket &packet);
static bool ValidateStartEventAckMessage(const NetPacket &packet);
static bool ValidateGameStartInitialMessage(const NetPacket &packet);
static bool ValidateGameStartRejoinMessage(const NetPacket &packet);
static bool ValidateHandStartMessage(const NetPacket &packet);
static bool ValidatePlayersTurnMessage(const NetPacket &packet);
static bool ValidateMyActionRequestMessage(const NetPacket &packet);
static bool ValidateYourActionRejectedMessage(const NetPacket &packet);
static bool ValidatePlayersActionDoneMessage(const NetPacket &packet);
static bool ValidateDealFlopCardsMessage(const NetPacket &packet);
static bool ValidateDealTurnCardMessage(const NetPacket &packet);
static bool ValidateDealRiverCardMessage(const NetPacket &packet);
static bool ValidateAllInShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandHideCardsMessage(const NetPacket &packet);
static bool ValidateShowMyCardsRequestMessage(const NetPacket &packet);
static bool ValidateAfterHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfGameMessage(const NetPacket &packet);
static bool ValidatePlayerIdChangedMessage(const NetPacket &packet);
static bool ValidateAskKickPlayerMessage(const NetPacket &packet);
static bool ValidateAskKickDeniedMessage(const NetPacket &packet);
static bool ValidateStartKickPetitionMessage(const NetPacket &packet);
static bool ValidateVoteKickRequestMessage(const NetPacket &packet);
static bool ValidateVoteKickReplyMessage(const NetPacket &packet);
static bool ValidateKickPetitionUpdateMessage(const NetPacket &packet);
static bool ValidateEndKickPetitionMessage(const NetPacket &packet);
static bool ValidateStatisticsMessage(const NetPacket &packet);
static bool ValidateChatRequestMessage(const NetPacket &packet);
static bool ValidateChatMessage(const NetPacket &packet);
static bool ValidateChatRejectMessage(const NetPacket &packet);
static bool ValidateDialogMessage(const NetPacket &packet);
static bool ValidateTimeoutWarningMessage(const NetPacket &packet);
static bool ValidateResetTimeoutMessage(const NetPacket &packet);
static bool ValidateReportAvatarMessage(const NetPacket &packet);
static bool ValidateReportAvatarAckMessage(const NetPacket &packet);
static bool ValidateReportGameMessage(const NetPacket &packet);
static bool ValidateReportGameAckMessage(const NetPacket &packet);
static bool ValidateErrorMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameAckMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerAckMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateGameSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameSpectatorLeftMessage(const NetPacket &packet);
bool ValidateGameManagementMessage(const GameMessage &msg);
bool ValidateGameEngineMessage(const GameMessage &msg);
static bool ValidateGameInfo(const NetGameInfo &gameInfo);
typedef bool (*ValidateFunctor)(const NetPacket &);
typedef boost::function<bool (const GameMessage &)> ValidateFunctor;
typedef std::map<int, ValidateFunctor> ValidateFunctorMap;
private:
ValidateFunctorMap m_validationMap;
boost::shared_ptr<GameManagementMessageValidator> m_managementValidator;
boost::shared_ptr<GameEngineMessageValidator> m_engineValidator;
};
#endif
+52 -94
View File
@@ -28,114 +28,72 @@
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* PokerTH network packet validation. */
/* PokerTH lobby message validation. */
#ifndef _NETPACKETVALIDATOR_H_
#define _NETPACKETVALIDATOR_H_
#ifndef _LOBBYMESSAGEVALIDATOR_H_
#define _LOBBYMESSAGEVALIDATOR_H_
#include <map>
#include <boost/function.hpp>
class NetPacket;
class LobbyMessage;
class NetGameInfo;
class NetPacketValidator
class LobbyMessageValidator
{
public:
NetPacketValidator();
LobbyMessageValidator();
bool IsValidPacket(const NetPacket &packet) const;
bool IsValidMessage(const LobbyMessage &msg) const;
protected:
static bool ValidateAnnounceMessage(const NetPacket &packet);
static bool ValidateAuthMessage(const NetPacket &packet);
static bool ValidateLobbyMessage(const NetPacket &packet);
static bool ValidateGameMessage(const NetPacket &packet);
static bool ValidateGameManagementMessage(const NetPacket &packet);
static bool ValidateGameEngineMessage(const NetPacket &packet);
static bool ValidateInitMessage(const NetPacket &packet);
static bool ValidateAuthServerChallengeMessage(const NetPacket &packet);
static bool ValidateAuthClientResponseMessage(const NetPacket &packet);
static bool ValidateAuthServerVerificationMessage(const NetPacket &packet);
static bool ValidateInitAckMessage(const NetPacket &packet);
static bool ValidateAvatarRequestMessage(const NetPacket &packet);
static bool ValidateAvatarHeaderMessage(const NetPacket &packet);
static bool ValidateAvatarDataMessage(const NetPacket &packet);
static bool ValidateAvatarEndMessage(const NetPacket &packet);
static bool ValidateUnknownAvatarMessage(const NetPacket &packet);
static bool ValidatePlayerListMessage(const NetPacket &packet);
static bool ValidateGameListNewMessage(const NetPacket &packet);
static bool ValidateGameListUpdateMessage(const NetPacket &packet);
static bool ValidateGameListPlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGameListPlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameListAdminChangedMessage(const NetPacket &packet);
static bool ValidatePlayerInfoRequestMessage(const NetPacket &packet);
static bool ValidatePlayerInfoReplyMessage(const NetPacket &packet);
static bool ValidateSubscriptionRequestMessage(const NetPacket &packet);
static bool ValidateCreateGameMessage(const NetPacket &packet);
static bool ValidateJoinGameMessage(const NetPacket &packet);
static bool ValidateRejoinGameMessage(const NetPacket &packet);
static bool ValidateJoinGameAckMessage(const NetPacket &packet);
static bool ValidateJoinGameFailedMessage(const NetPacket &packet);
static bool ValidateGamePlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGamePlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameAdminChangedMessage(const NetPacket &packet);
static bool ValidateRemovedFromGameMessage(const NetPacket &packet);
static bool ValidateKickPlayerRequestMessage(const NetPacket &packet);
static bool ValidateLeaveGameRequestMessage(const NetPacket &packet);
static bool ValidateInvitePlayerToGameMessage(const NetPacket &packet);
static bool ValidateInviteNotifyMessage(const NetPacket &packet);
static bool ValidateRejectGameInvitationMessage(const NetPacket &packet);
static bool ValidateRejectInvNotifyMessage(const NetPacket &packet);
static bool ValidateStartEventMessage(const NetPacket &packet);
static bool ValidateStartEventAckMessage(const NetPacket &packet);
static bool ValidateGameStartInitialMessage(const NetPacket &packet);
static bool ValidateGameStartRejoinMessage(const NetPacket &packet);
static bool ValidateHandStartMessage(const NetPacket &packet);
static bool ValidatePlayersTurnMessage(const NetPacket &packet);
static bool ValidateMyActionRequestMessage(const NetPacket &packet);
static bool ValidateYourActionRejectedMessage(const NetPacket &packet);
static bool ValidatePlayersActionDoneMessage(const NetPacket &packet);
static bool ValidateDealFlopCardsMessage(const NetPacket &packet);
static bool ValidateDealTurnCardMessage(const NetPacket &packet);
static bool ValidateDealRiverCardMessage(const NetPacket &packet);
static bool ValidateAllInShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandHideCardsMessage(const NetPacket &packet);
static bool ValidateShowMyCardsRequestMessage(const NetPacket &packet);
static bool ValidateAfterHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfGameMessage(const NetPacket &packet);
static bool ValidatePlayerIdChangedMessage(const NetPacket &packet);
static bool ValidateAskKickPlayerMessage(const NetPacket &packet);
static bool ValidateAskKickDeniedMessage(const NetPacket &packet);
static bool ValidateStartKickPetitionMessage(const NetPacket &packet);
static bool ValidateVoteKickRequestMessage(const NetPacket &packet);
static bool ValidateVoteKickReplyMessage(const NetPacket &packet);
static bool ValidateKickPetitionUpdateMessage(const NetPacket &packet);
static bool ValidateEndKickPetitionMessage(const NetPacket &packet);
static bool ValidateStatisticsMessage(const NetPacket &packet);
static bool ValidateChatRequestMessage(const NetPacket &packet);
static bool ValidateChatMessage(const NetPacket &packet);
static bool ValidateChatRejectMessage(const NetPacket &packet);
static bool ValidateDialogMessage(const NetPacket &packet);
static bool ValidateTimeoutWarningMessage(const NetPacket &packet);
static bool ValidateResetTimeoutMessage(const NetPacket &packet);
static bool ValidateReportAvatarMessage(const NetPacket &packet);
static bool ValidateReportAvatarAckMessage(const NetPacket &packet);
static bool ValidateReportGameMessage(const NetPacket &packet);
static bool ValidateReportGameAckMessage(const NetPacket &packet);
static bool ValidateErrorMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameAckMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerAckMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateGameSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateInitDoneMessage(const LobbyMessage &msg);
static bool ValidateAvatarRequestMessage(const LobbyMessage &msg);
static bool ValidateAvatarHeaderMessage(const LobbyMessage &msg);
static bool ValidateAvatarDataMessage(const LobbyMessage &msg);
static bool ValidateAvatarEndMessage(const LobbyMessage &msg);
static bool ValidateUnknownAvatarMessage(const LobbyMessage &msg);
static bool ValidatePlayerListMessage(const LobbyMessage &msg);
static bool ValidateGameListNewMessage(const LobbyMessage &msg);
static bool ValidateGameListUpdateMessage(const LobbyMessage &msg);
static bool ValidateGameListPlayerJoinedMessage(const LobbyMessage &msg);
static bool ValidateGameListPlayerLeftMessage(const LobbyMessage &msg);
static bool ValidateGameListSpectatorJoinedMessage(const LobbyMessage &msg);
static bool ValidateGameListSpectatorLeftMessage(const LobbyMessage &msg);
static bool ValidateGameListAdminChangedMessage(const LobbyMessage &msg);
static bool ValidatePlayerInfoRequestMessage(const LobbyMessage &msg);
static bool ValidatePlayerInfoReplyMessage(const LobbyMessage &msg);
static bool ValidateSubscriptionRequestMessage(const LobbyMessage &msg);
static bool ValidateSubscriptionReplyMessage(const LobbyMessage &msg);
static bool ValidateCreateGameMessage(const LobbyMessage &msg);
static bool ValidateCreateGameFailedMessage(const LobbyMessage &msg);
static bool ValidateJoinGameMessage(const LobbyMessage &msg);
static bool ValidateRejoinGameMessage(const LobbyMessage &msg);
static bool ValidateJoinGameAckMessage(const LobbyMessage &msg);
static bool ValidateJoinGameFailedMessage(const LobbyMessage &msg);
static bool ValidateInviteNotifyMessage(const LobbyMessage &msg);
static bool ValidateRejectGameInvitationMessage(const LobbyMessage &msg);
static bool ValidateRejectInvNotifyMessage(const LobbyMessage &msg);
static bool ValidateStatisticsMessage(const LobbyMessage &msg);
static bool ValidateChatRequestMessage(const LobbyMessage &msg);
static bool ValidateChatMessage(const LobbyMessage &msg);
static bool ValidateChatRejectMessage(const LobbyMessage &msg);
static bool ValidateDialogMessage(const LobbyMessage &msg);
static bool ValidateTimeoutWarningMessage(const LobbyMessage &msg);
static bool ValidateResetTimeoutMessage(const LobbyMessage &msg);
static bool ValidateReportAvatarMessage(const LobbyMessage &msg);
static bool ValidateReportAvatarAckMessage(const LobbyMessage &msg);
static bool ValidateReportGameMessage(const LobbyMessage &msg);
static bool ValidateReportGameAckMessage(const LobbyMessage &msg);
static bool ValidateAdminRemoveGameMessage(const LobbyMessage &msg);
static bool ValidateAdminRemoveGameAckMessage(const LobbyMessage &msg);
static bool ValidateAdminBanPlayerMessage(const LobbyMessage &msg);
static bool ValidateAdminBanPlayerAckMessage(const LobbyMessage &msg);
static bool ValidateErrorMessage(const LobbyMessage &msg);
static bool ValidateGameInfo(const NetGameInfo &gameInfo);
typedef bool (*ValidateFunctor)(const NetPacket &);
typedef boost::function<bool (const LobbyMessage &)> ValidateFunctor;
typedef std::map<int, ValidateFunctor> ValidateFunctorMap;
private:
+25 -96
View File
@@ -30,116 +30,45 @@
*****************************************************************************/
/* PokerTH network packet validation. */
#ifndef _NETPACKETVALIDATOR_H_
#define _NETPACKETVALIDATOR_H_
#ifndef _POKERTHMESSAGEVALIDATOR_H_
#define _POKERTHMESSAGEVALIDATOR_H_
#include <map>
#include <boost/shared_ptr.hpp>
#include <boost/function.hpp>
class NetPacket;
class NetGameInfo;
class PokerTHMessage;
class AuthMessageValidator;
class LobbyMessageValidator;
class GameMessageValidator;
class NetPacketValidator
#define VALIDATE_IS_UINT16(__val) ((__val) <= 65535)
#define VALIDATE_STRING_SIZE(__str, __minsize, __maxsize) ((__str).size() >= (__minsize) && (__str).size() <= (__maxsize))
#define VALIDATE_UINT_RANGE(__val, __minval, __maxval) ((__val) >= (__minval) && (__val) <= (__maxval))
#define VALIDATE_UINT_UPPER(__val, __maxval) ((__val) <= (__maxval))
#define VALIDATE_LIST_SIZE(__l, __minsize, __maxsize) ((__l).size() >= (__minsize) && (__l).size() <= (__maxsize))
class PokerTHMessageValidator
{
public:
NetPacketValidator();
PokerTHMessageValidator();
bool IsValidPacket(const NetPacket &packet) const;
bool IsValidMessage(const PokerTHMessage &msg) const;
protected:
static bool ValidateAnnounceMessage(const NetPacket &packet);
static bool ValidateAuthMessage(const NetPacket &packet);
static bool ValidateLobbyMessage(const NetPacket &packet);
static bool ValidateGameMessage(const NetPacket &packet);
static bool ValidateGameManagementMessage(const NetPacket &packet);
static bool ValidateGameEngineMessage(const NetPacket &packet);
static bool ValidateInitMessage(const NetPacket &packet);
static bool ValidateAuthServerChallengeMessage(const NetPacket &packet);
static bool ValidateAuthClientResponseMessage(const NetPacket &packet);
static bool ValidateAuthServerVerificationMessage(const NetPacket &packet);
static bool ValidateInitAckMessage(const NetPacket &packet);
static bool ValidateAvatarRequestMessage(const NetPacket &packet);
static bool ValidateAvatarHeaderMessage(const NetPacket &packet);
static bool ValidateAvatarDataMessage(const NetPacket &packet);
static bool ValidateAvatarEndMessage(const NetPacket &packet);
static bool ValidateUnknownAvatarMessage(const NetPacket &packet);
static bool ValidatePlayerListMessage(const NetPacket &packet);
static bool ValidateGameListNewMessage(const NetPacket &packet);
static bool ValidateGameListUpdateMessage(const NetPacket &packet);
static bool ValidateGameListPlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGameListPlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameListAdminChangedMessage(const NetPacket &packet);
static bool ValidatePlayerInfoRequestMessage(const NetPacket &packet);
static bool ValidatePlayerInfoReplyMessage(const NetPacket &packet);
static bool ValidateSubscriptionRequestMessage(const NetPacket &packet);
static bool ValidateCreateGameMessage(const NetPacket &packet);
static bool ValidateJoinGameMessage(const NetPacket &packet);
static bool ValidateRejoinGameMessage(const NetPacket &packet);
static bool ValidateJoinGameAckMessage(const NetPacket &packet);
static bool ValidateJoinGameFailedMessage(const NetPacket &packet);
static bool ValidateGamePlayerJoinedMessage(const NetPacket &packet);
static bool ValidateGamePlayerLeftMessage(const NetPacket &packet);
static bool ValidateGameAdminChangedMessage(const NetPacket &packet);
static bool ValidateRemovedFromGameMessage(const NetPacket &packet);
static bool ValidateKickPlayerRequestMessage(const NetPacket &packet);
static bool ValidateLeaveGameRequestMessage(const NetPacket &packet);
static bool ValidateInvitePlayerToGameMessage(const NetPacket &packet);
static bool ValidateInviteNotifyMessage(const NetPacket &packet);
static bool ValidateRejectGameInvitationMessage(const NetPacket &packet);
static bool ValidateRejectInvNotifyMessage(const NetPacket &packet);
static bool ValidateStartEventMessage(const NetPacket &packet);
static bool ValidateStartEventAckMessage(const NetPacket &packet);
static bool ValidateGameStartInitialMessage(const NetPacket &packet);
static bool ValidateGameStartRejoinMessage(const NetPacket &packet);
static bool ValidateHandStartMessage(const NetPacket &packet);
static bool ValidatePlayersTurnMessage(const NetPacket &packet);
static bool ValidateMyActionRequestMessage(const NetPacket &packet);
static bool ValidateYourActionRejectedMessage(const NetPacket &packet);
static bool ValidatePlayersActionDoneMessage(const NetPacket &packet);
static bool ValidateDealFlopCardsMessage(const NetPacket &packet);
static bool ValidateDealTurnCardMessage(const NetPacket &packet);
static bool ValidateDealRiverCardMessage(const NetPacket &packet);
static bool ValidateAllInShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfHandHideCardsMessage(const NetPacket &packet);
static bool ValidateShowMyCardsRequestMessage(const NetPacket &packet);
static bool ValidateAfterHandShowCardsMessage(const NetPacket &packet);
static bool ValidateEndOfGameMessage(const NetPacket &packet);
static bool ValidatePlayerIdChangedMessage(const NetPacket &packet);
static bool ValidateAskKickPlayerMessage(const NetPacket &packet);
static bool ValidateAskKickDeniedMessage(const NetPacket &packet);
static bool ValidateStartKickPetitionMessage(const NetPacket &packet);
static bool ValidateVoteKickRequestMessage(const NetPacket &packet);
static bool ValidateVoteKickReplyMessage(const NetPacket &packet);
static bool ValidateKickPetitionUpdateMessage(const NetPacket &packet);
static bool ValidateEndKickPetitionMessage(const NetPacket &packet);
static bool ValidateStatisticsMessage(const NetPacket &packet);
static bool ValidateChatRequestMessage(const NetPacket &packet);
static bool ValidateChatMessage(const NetPacket &packet);
static bool ValidateChatRejectMessage(const NetPacket &packet);
static bool ValidateDialogMessage(const NetPacket &packet);
static bool ValidateTimeoutWarningMessage(const NetPacket &packet);
static bool ValidateResetTimeoutMessage(const NetPacket &packet);
static bool ValidateReportAvatarMessage(const NetPacket &packet);
static bool ValidateReportAvatarAckMessage(const NetPacket &packet);
static bool ValidateReportGameMessage(const NetPacket &packet);
static bool ValidateReportGameAckMessage(const NetPacket &packet);
static bool ValidateErrorMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameMessage(const NetPacket &packet);
static bool ValidateAdminRemoveGameAckMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerMessage(const NetPacket &packet);
static bool ValidateAdminBanPlayerAckMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameListSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateGameSpectatorJoinedMessage(const NetPacket &packet);
static bool ValidateGameSpectatorLeftMessage(const NetPacket &packet);
static bool ValidateAnnounceMessage(const PokerTHMessage &msg);
bool ValidateAuthMessage(const PokerTHMessage &msg);
bool ValidateLobbyMessage(const PokerTHMessage &msg);
bool ValidateGameMessage(const PokerTHMessage &msg);
static bool ValidateGameInfo(const NetGameInfo &gameInfo);
typedef bool (*ValidateFunctor)(const NetPacket &);
typedef boost::function<bool (const PokerTHMessage &)> ValidateFunctor;
typedef std::map<int, ValidateFunctor> ValidateFunctorMap;
private:
ValidateFunctorMap m_validationMap;
boost::shared_ptr<AuthMessageValidator> m_authValidator;
boost::shared_ptr<LobbyMessageValidator> m_lobbyValidator;
boost::shared_ptr<GameMessageValidator> m_gameValidator;
};
#endif
+15 -24
View File
@@ -28,14 +28,12 @@
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* PokerTH network packet validation. */
/* PokerTH network packet validation helpers. */
#ifndef _POKERTHMESSAGEVALIDATOR_H_
#define _POKERTHMESSAGEVALIDATOR_H_
#ifndef _VALIDATIONHELPER_H_
#define _VALIDATIONHELPER_H_
#include <map>
class PokerTHMessage;
#include <net/netpacket.h>
#define VALIDATE_IS_UINT16(__val) ((__val) <= 65535)
#define VALIDATE_STRING_SIZE(__str, __minsize, __maxsize) ((__str).size() >= (__minsize) && (__str).size() <= (__maxsize))
@@ -43,25 +41,18 @@ class PokerTHMessage;
#define VALIDATE_UINT_UPPER(__val, __maxval) ((__val) <= (__maxval))
#define VALIDATE_LIST_SIZE(__l, __minsize, __maxsize) ((__l).size() >= (__minsize) && (__l).size() <= (__maxsize))
class PokerTHMessageValidator
inline bool
ValidateListIntRange(const ::google::protobuf::RepeatedField< ::google::protobuf::uint32 > &l, ::google::protobuf::uint32 minval, ::google::protobuf::uint32 maxval)
{
public:
PokerTHMessageValidator();
bool IsValidMessage(const PokerTHMessage &msg) const;
protected:
static bool ValidateAnnounceMessage(const PokerTHMessage &msg);
static bool ValidateAuthMessage(const PokerTHMessage &msg);
static bool ValidateLobbyMessage(const PokerTHMessage &msg);
static bool ValidateGameMessage(const PokerTHMessage &msg);
typedef bool (*ValidateFunctor)(const PokerTHMessage &msg);
typedef std::map<int, ValidateFunctor> ValidateFunctorMap;
private:
ValidateFunctorMap m_validationMap;
};
bool retVal = true;
for (int i = 0; i < l.size(); i++) {
if (!VALIDATE_UINT_RANGE(l.Get(i), minval, maxval)) {
retVal = false;
break;
}
}
return retVal;
}
#endif
+1223 -1156
View File
File diff suppressed because it is too large Load Diff
+1320 -1212
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff