limit enter-leave game done.
This commit is contained in:
@@ -457,6 +457,8 @@ 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1164,3 +1166,34 @@ ServerGame::GetNextGameNum()
|
|||||||
return m_gameNum++;
|
return m_gameNum++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ServerGame::GetNumJoinsPerPlayer(const std::string &playerName)
|
||||||
|
{
|
||||||
|
int num = 0;
|
||||||
|
if(m_numjoinsp.find(playerName) != m_numjoinsp.end()){
|
||||||
|
num = m_numjoinsp[playerName];
|
||||||
|
}
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -537,10 +537,24 @@ 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
|
||||||
|
//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()) > 9) {
|
||||||
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Check the number of players.
|
// Check the number of players.
|
||||||
if (server->GetCurNumberOfPlayers() >= tmpGameData.maxNumberOfPlayers) {
|
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
|
||||||
|
server->AddPlayerToNumJoinsPerPlayer(session->GetPlayerData()->GetName());
|
||||||
|
|
||||||
AcceptNewSession(server, session, false);
|
AcceptNewSession(server, session, false);
|
||||||
|
|
||||||
|
|||||||
@@ -125,6 +125,10 @@ public:
|
|||||||
|
|
||||||
void KickPlayer(unsigned playerId);
|
void KickPlayer(unsigned playerId);
|
||||||
|
|
||||||
|
void AddPlayerToNumJoinsPerPlayer(const std::string &playerName);
|
||||||
|
int GetNumJoinsPerPlayer(const std::string &playerName);
|
||||||
|
void ResetNumJoinsPerPlayer();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
struct RankingData {
|
struct RankingData {
|
||||||
@@ -191,6 +195,8 @@ protected:
|
|||||||
SessionManager &GetSessionManager();
|
SessionManager &GetSessionManager();
|
||||||
ServerDBInterface &GetDatabase();
|
ServerDBInterface &GetDatabase();
|
||||||
|
|
||||||
|
typedef std::map<std::string, int> NumJoinsPerPlayerMap;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ServerGame(const ServerGame &other);
|
ServerGame(const ServerGame &other);
|
||||||
|
|
||||||
@@ -251,6 +257,8 @@ private:
|
|||||||
friend class ServerGameStateHand;
|
friend class ServerGameStateHand;
|
||||||
friend class ServerGameStateWaitPlayerAction;
|
friend class ServerGameStateWaitPlayerAction;
|
||||||
friend class ServerGameStateWaitNextHand;
|
friend class ServerGameStateWaitNextHand;
|
||||||
|
|
||||||
|
NumJoinsPerPlayerMap m_numjoinsp;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user