optimizations for number of game-joins per player, removed @XXX from comments
This commit is contained in:
@@ -457,7 +457,6 @@ ServerGame::InternalEndGame()
|
|||||||
{
|
{
|
||||||
StoreAndResetRanking();
|
StoreAndResetRanking();
|
||||||
m_game.reset();
|
m_game.reset();
|
||||||
// @XXX: reset NumJoinsPerPlayerMap (if a game restarts, the number of joins will be set to 0 for each player)
|
|
||||||
ResetNumJoinsPerPlayer();
|
ResetNumJoinsPerPlayer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1169,10 +1168,12 @@ ServerGame::GetNextGameNum()
|
|||||||
void
|
void
|
||||||
ServerGame::AddPlayerToNumJoinsPerPlayer(const std::string &playerName)
|
ServerGame::AddPlayerToNumJoinsPerPlayer(const std::string &playerName)
|
||||||
{
|
{
|
||||||
if(m_numjoinsp.find(playerName) != m_numjoinsp.end()) {
|
NumJoinsPerPlayerMap::iterator pos = m_numJoinsPerPlayer.find(playerName);
|
||||||
m_numjoinsp[playerName] = m_numjoinsp[playerName] + 1;
|
if (pos != m_numJoinsPerPlayer.end())
|
||||||
} else {
|
{
|
||||||
m_numjoinsp[playerName] = 1;
|
pos->second++;
|
||||||
|
} else{
|
||||||
|
m_numJoinsPerPlayer[playerName] = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1180,8 +1181,8 @@ int
|
|||||||
ServerGame::GetNumJoinsPerPlayer(const std::string &playerName)
|
ServerGame::GetNumJoinsPerPlayer(const std::string &playerName)
|
||||||
{
|
{
|
||||||
int num = 0;
|
int num = 0;
|
||||||
if(m_numjoinsp.find(playerName) != m_numjoinsp.end()) {
|
if(m_numJoinsPerPlayer.find(playerName) != m_numJoinsPerPlayer.end()) {
|
||||||
num = m_numjoinsp[playerName];
|
num = m_numJoinsPerPlayer[playerName];
|
||||||
}
|
}
|
||||||
return num;
|
return num;
|
||||||
}
|
}
|
||||||
@@ -1189,11 +1190,5 @@ ServerGame::GetNumJoinsPerPlayer(const std::string &playerName)
|
|||||||
void
|
void
|
||||||
ServerGame::ResetNumJoinsPerPlayer()
|
ServerGame::ResetNumJoinsPerPlayer()
|
||||||
{
|
{
|
||||||
NumJoinsPerPlayerMap::const_iterator numj_i = m_numjoinsp.begin();
|
m_numJoinsPerPlayer.clear();
|
||||||
NumJoinsPerPlayerMap::const_iterator numj_end = m_numjoinsp.end();
|
|
||||||
|
|
||||||
while (numj_i != numj_end) {
|
|
||||||
m_numjoinsp[numj_i->first] = 0;
|
|
||||||
++numj_i;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ using namespace std;
|
|||||||
#define SERVER_LOOP_DELAY_MSEC 50
|
#define SERVER_LOOP_DELAY_MSEC 50
|
||||||
#define SERVER_MAX_NUM_SPECTATORS_PER_GAME 100
|
#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
|
// Helper functions
|
||||||
|
|
||||||
@@ -540,22 +540,11 @@ ServerGameStateInit::HandleNewPlayer(boost::shared_ptr<ServerGame> server, boost
|
|||||||
if (session && session->GetPlayerData()) {
|
if (session && session->GetPlayerData()) {
|
||||||
const GameData &tmpGameData = server->GetGameData();
|
const GameData &tmpGameData = server->GetGameData();
|
||||||
|
|
||||||
// @XXX: debug
|
// Check the number of players and number of joins per player
|
||||||
//LOG_ERROR("New Player: " << session->GetPlayerData()->GetName() << ".");
|
if (server->GetCurNumberOfPlayers() >= tmpGameData.maxNumberOfPlayers || server->GetNumJoinsPerPlayer(session->GetPlayerData()->GetName()) > GAME_MAX_NUM_JOINS_PER_PLAYER) {
|
||||||
//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) {
|
|
||||||
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
||||||
} else {
|
} else {
|
||||||
// @XXX: add player to NumJoinsPerPlayerMap
|
// add player to NumJoinsPerPlayerMap
|
||||||
server->AddPlayerToNumJoinsPerPlayer(session->GetPlayerData()->GetName());
|
server->AddPlayerToNumJoinsPerPlayer(session->GetPlayerData()->GetName());
|
||||||
|
|
||||||
AcceptNewSession(server, session, false);
|
AcceptNewSession(server, session, false);
|
||||||
|
|||||||
@@ -1012,12 +1012,6 @@ ServerLobbyThread::HandleNetPacketInit(boost::shared_ptr<SessionData> session, c
|
|||||||
{
|
{
|
||||||
LOG_VERBOSE("Received init for session #" << session->GetId() << ".");
|
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
|
// Before any other processing, perform some denial of service and
|
||||||
// brute force attack prevention by checking whether the user recently sent an
|
// brute force attack prevention by checking whether the user recently sent an
|
||||||
// Init packet.
|
// Init packet.
|
||||||
@@ -1058,8 +1052,8 @@ ServerLobbyThread::HandleNetPacketInit(boost::shared_ptr<SessionData> session, c
|
|||||||
MD5Buf avatarMD5;
|
MD5Buf avatarMD5;
|
||||||
bool noAuth = false;
|
bool noAuth = false;
|
||||||
bool validGuest = false;
|
bool validGuest = false;
|
||||||
// @XXX: productive: if (initMessage.login() == InitMessage::guestLogin) {
|
// productive: if (initMessage.login() == InitMessage::guestLogin) {
|
||||||
// @XXX: debug: if (initMessage.login() == InitMessage::unauthenticatedLogin) {
|
// debug: if (initMessage.login() == InitMessage::unauthenticatedLogin) {
|
||||||
if (initMessage.login() == InitMessage::guestLogin) {
|
if (initMessage.login() == InitMessage::guestLogin) {
|
||||||
playerName = initMessage.nickname();
|
playerName = initMessage.nickname();
|
||||||
// Verify guest player name.
|
// Verify guest player name.
|
||||||
@@ -1070,9 +1064,8 @@ ServerLobbyThread::HandleNetPacketInit(boost::shared_ptr<SessionData> session, c
|
|||||||
validGuest = true;
|
validGuest = true;
|
||||||
noAuth = 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())) {
|
if(m_sessionManager.IsGuestConnectedMultiple(session->GetClientAddr())) {
|
||||||
//LOG_ERROR("Guest with IP " << session->GetClientAddr() << " already connected! Decline!");
|
|
||||||
SessionError(session, ERR_NET_FULL_GUESTS);
|
SessionError(session, ERR_NET_FULL_GUESTS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -258,9 +258,9 @@ SessionManager::IsGuestConnectedMultiple(const std::string &clientAddress) const
|
|||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer(i->second->GetPlayerData());
|
boost::shared_ptr<PlayerData> tmpPlayer(i->second->GetPlayerData());
|
||||||
// @XXX: productive:
|
// productive:
|
||||||
//if(tmpPlayer && tmpPlayer->GetRights() == PLAYER_RIGHTS_GUEST && i->second->GetClientAddr() == clientAddress){
|
//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_NORMAL && i->second->GetClientAddr() == clientAddress){
|
||||||
if(tmpPlayer && tmpPlayer->GetRights() == PLAYER_RIGHTS_GUEST && i->second->GetClientAddr() == clientAddress) {
|
if(tmpPlayer && tmpPlayer->GetRights() == PLAYER_RIGHTS_GUEST && i->second->GetClientAddr() == clientAddress) {
|
||||||
retVal = true;
|
retVal = true;
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ private:
|
|||||||
friend class ServerGameStateWaitPlayerAction;
|
friend class ServerGameStateWaitPlayerAction;
|
||||||
friend class ServerGameStateWaitNextHand;
|
friend class ServerGameStateWaitNextHand;
|
||||||
|
|
||||||
NumJoinsPerPlayerMap m_numjoinsp;
|
NumJoinsPerPlayerMap m_numJoinsPerPlayer;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user