From 24acd01e90e2a8875a7b518b1b3188c808a7906b Mon Sep 17 00:00:00 2001 From: Kai Philipp Date: Sun, 17 Jul 2016 16:55:06 +0200 Subject: [PATCH] optimizations for number of game-joins per player, removed @XXX from comments --- src/net/common/servergame.cpp | 23 +++++++++-------------- src/net/common/servergamestate.cpp | 19 ++++--------------- src/net/common/serverlobbythread.cpp | 13 +++---------- src/net/common/sessionmanager.cpp | 4 ++-- src/net/servergame.h | 2 +- 5 files changed, 19 insertions(+), 42 deletions(-) diff --git a/src/net/common/servergame.cpp b/src/net/common/servergame.cpp index 5eb7e15d..ff3776c5 100644 --- a/src/net/common/servergame.cpp +++ b/src/net/common/servergame.cpp @@ -457,7 +457,6 @@ ServerGame::InternalEndGame() { StoreAndResetRanking(); m_game.reset(); - // @XXX: reset NumJoinsPerPlayerMap (if a game restarts, the number of joins will be set to 0 for each player) ResetNumJoinsPerPlayer(); } @@ -1169,10 +1168,12 @@ ServerGame::GetNextGameNum() void ServerGame::AddPlayerToNumJoinsPerPlayer(const std::string &playerName) { - if(m_numjoinsp.find(playerName) != m_numjoinsp.end()) { - m_numjoinsp[playerName] = m_numjoinsp[playerName] + 1; - } else { - m_numjoinsp[playerName] = 1; + NumJoinsPerPlayerMap::iterator pos = m_numJoinsPerPlayer.find(playerName); + if (pos != m_numJoinsPerPlayer.end()) + { + pos->second++; + } else{ + m_numJoinsPerPlayer[playerName] = 1; } } @@ -1180,8 +1181,8 @@ int ServerGame::GetNumJoinsPerPlayer(const std::string &playerName) { int num = 0; - if(m_numjoinsp.find(playerName) != m_numjoinsp.end()) { - num = m_numjoinsp[playerName]; + if(m_numJoinsPerPlayer.find(playerName) != m_numJoinsPerPlayer.end()) { + num = m_numJoinsPerPlayer[playerName]; } return num; } @@ -1189,11 +1190,5 @@ ServerGame::GetNumJoinsPerPlayer(const std::string &playerName) void ServerGame::ResetNumJoinsPerPlayer() { - NumJoinsPerPlayerMap::const_iterator numj_i = m_numjoinsp.begin(); - NumJoinsPerPlayerMap::const_iterator numj_end = m_numjoinsp.end(); - - while (numj_i != numj_end) { - m_numjoinsp[numj_i->first] = 0; - ++numj_i; - } + m_numJoinsPerPlayer.clear(); } diff --git a/src/net/common/servergamestate.cpp b/src/net/common/servergamestate.cpp index 794c0b61..14379fb7 100644 --- a/src/net/common/servergamestate.cpp +++ b/src/net/common/servergamestate.cpp @@ -84,7 +84,7 @@ using namespace std; #define SERVER_LOOP_DELAY_MSEC 50 #define SERVER_MAX_NUM_SPECTATORS_PER_GAME 100 -#define GAME_NUM_JOINS_PER_PLAYER 6 +#define GAME_MAX_NUM_JOINS_PER_PLAYER 6 // Helper functions @@ -540,22 +540,11 @@ ServerGameStateInit::HandleNewPlayer(boost::shared_ptr server, boost if (session && session->GetPlayerData()) { const GameData &tmpGameData = server->GetGameData(); - // @XXX: debug - //LOG_ERROR("New Player: " << session->GetPlayerData()->GetName() << "."); - //server->AddPlayerToNumJoinsPerPlayer(session->GetPlayerData()->GetName()); - //LOG_ERROR("Num joins of " << session->GetPlayerData()->GetName() << " = " << server->GetNumJoinsPerPlayer(session->GetPlayerData()->GetName()) << "."); - - // @XXX: check if player joined the game more than 9 times - decline if > 9 - if (server->GetNumJoinsPerPlayer(session->GetPlayerData()->GetName()) > GAME_NUM_JOINS_PER_PLAYER) { - server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL); - return; - } - - // Check the number of players. - if (server->GetCurNumberOfPlayers() >= tmpGameData.maxNumberOfPlayers) { + // Check the number of players and number of joins per player + if (server->GetCurNumberOfPlayers() >= tmpGameData.maxNumberOfPlayers || server->GetNumJoinsPerPlayer(session->GetPlayerData()->GetName()) > GAME_MAX_NUM_JOINS_PER_PLAYER) { server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL); } else { - // @XXX: add player to NumJoinsPerPlayerMap + // add player to NumJoinsPerPlayerMap server->AddPlayerToNumJoinsPerPlayer(session->GetPlayerData()->GetName()); AcceptNewSession(server, session, false); diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 4d6a5b1a..45892da2 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -1012,12 +1012,6 @@ ServerLobbyThread::HandleNetPacketInit(boost::shared_ptr session, c { LOG_VERBOSE("Received init for session #" << session->GetId() << "."); - // @XXX: debug tests - //if(m_sessionManager.IsGuestConnectedMultiple(session->GetClientAddr())){ - // LOG_ERROR("Guest with IP " << session->GetClientAddr() << " already connected! Should be declined!"); - //} - // @XXX: end debug tests - // Before any other processing, perform some denial of service and // brute force attack prevention by checking whether the user recently sent an // Init packet. @@ -1058,8 +1052,8 @@ ServerLobbyThread::HandleNetPacketInit(boost::shared_ptr session, c MD5Buf avatarMD5; bool noAuth = false; bool validGuest = false; - // @XXX: productive: if (initMessage.login() == InitMessage::guestLogin) { - // @XXX: debug: if (initMessage.login() == InitMessage::unauthenticatedLogin) { + // productive: if (initMessage.login() == InitMessage::guestLogin) { + // debug: if (initMessage.login() == InitMessage::unauthenticatedLogin) { if (initMessage.login() == InitMessage::guestLogin) { playerName = initMessage.nickname(); // Verify guest player name. @@ -1070,9 +1064,8 @@ ServerLobbyThread::HandleNetPacketInit(boost::shared_ptr session, c validGuest = true; noAuth = true; } - // @XXX: check if a guest session with same ip is already connected - decline if true + // check if a guest session with same ip is already connected - decline if true if(m_sessionManager.IsGuestConnectedMultiple(session->GetClientAddr())) { - //LOG_ERROR("Guest with IP " << session->GetClientAddr() << " already connected! Decline!"); SessionError(session, ERR_NET_FULL_GUESTS); return; } diff --git a/src/net/common/sessionmanager.cpp b/src/net/common/sessionmanager.cpp index 04190876..0ca580fc 100644 --- a/src/net/common/sessionmanager.cpp +++ b/src/net/common/sessionmanager.cpp @@ -258,9 +258,9 @@ SessionManager::IsGuestConnectedMultiple(const std::string &clientAddress) const while (i != end) { boost::shared_ptr tmpPlayer(i->second->GetPlayerData()); - // @XXX: productive: + // productive: //if(tmpPlayer && tmpPlayer->GetRights() == PLAYER_RIGHTS_GUEST && i->second->GetClientAddr() == clientAddress){ - // @XXX: debug: + // debug: // if(tmpPlayer && tmpPlayer->GetRights() == PLAYER_RIGHTS_NORMAL && i->second->GetClientAddr() == clientAddress){ if(tmpPlayer && tmpPlayer->GetRights() == PLAYER_RIGHTS_GUEST && i->second->GetClientAddr() == clientAddress) { retVal = true; diff --git a/src/net/servergame.h b/src/net/servergame.h index 6bdf8ce3..0b2dfbad 100644 --- a/src/net/servergame.h +++ b/src/net/servergame.h @@ -258,7 +258,7 @@ private: friend class ServerGameStateWaitPlayerAction; friend class ServerGameStateWaitNextHand; - NumJoinsPerPlayerMap m_numjoinsp; + NumJoinsPerPlayerMap m_numJoinsPerPlayer; }; #endif