From 28417227ac237af17d8c8a28c1a876ad41f69180 Mon Sep 17 00:00:00 2001 From: lotodore Date: Tue, 27 Dec 2011 20:44:16 +0000 Subject: [PATCH] Fixing ticket #86: Change player id in ranking map on rejoin. --- src/net/common/servergame.cpp | 11 +++++++++++ src/net/common/servergamestate.cpp | 2 ++ src/net/servergame.h | 1 + 3 files changed, 14 insertions(+) diff --git a/src/net/common/servergame.cpp b/src/net/common/servergame.cpp index ccd4f60c..3830d342 100644 --- a/src/net/common/servergame.cpp +++ b/src/net/common/servergame.cpp @@ -358,6 +358,17 @@ ServerGame::SetPlayerPlace(unsigned playerId, int place) } } +void +ServerGame::ReplaceRankingPlayer(unsigned oldPlayerId, unsigned newPlayerId) +{ + RankingMap::iterator pos = m_rankingMap.find(oldPlayerId); + if (pos != m_rankingMap.end()) { + RankingData tmpData((*pos).second); + m_rankingMap[newPlayerId] = tmpData; + m_rankingMap.erase(pos); + } +} + void ServerGame::StoreAndResetRanking() { diff --git a/src/net/common/servergamestate.cpp b/src/net/common/servergamestate.cpp index 5cc67bac..190583fe 100644 --- a/src/net/common/servergamestate.cpp +++ b/src/net/common/servergamestate.cpp @@ -1360,6 +1360,8 @@ ServerGameStateHand::PerformRejoin(boost::shared_ptr server, boost:: // Update the dealer, if necessary. curGame.replaceDealer(rejoinPlayer->getMyUniqueID(), session->GetPlayerData()->GetUniqueId()); + // Update the ranking map. + server->ReplaceRankingPlayer(rejoinPlayer->getMyUniqueID(), session->GetPlayerData()->GetUniqueId()); // Change the Id in the poker engine. rejoinPlayer->setMyUniqueID(session->GetPlayerData()->GetUniqueId()); rejoinPlayer->setMyGuid(session->GetPlayerData()->GetGuid()); diff --git a/src/net/servergame.h b/src/net/servergame.h index f84ce542..7a6fe015 100644 --- a/src/net/servergame.h +++ b/src/net/servergame.h @@ -118,6 +118,7 @@ protected: void InitRankingMap(const PlayerDataList &playerDataList); void UpdateRankingMap(); void SetPlayerPlace(unsigned playerId, int place); + void ReplaceRankingPlayer(unsigned oldPlayerId, unsigned newPlayerId); void StoreAndResetRanking(); void RemoveAutoLeavePlayers(); void InternalEndGame();