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