From c0947c9d5405b904db18f84b07676766d38e9885 Mon Sep 17 00:00:00 2001 From: lotodore Date: Thu, 15 Jul 2010 10:34:24 +0000 Subject: [PATCH] Adding function to find out in which game a user is playing. --- src/net/clientthread.h | 1 + src/net/common/clientthread.cpp | 29 +++++++++++++++++++++++++++++ src/session.cpp | 8 ++++++++ src/session.h | 1 + 4 files changed, 39 insertions(+) diff --git a/src/net/clientthread.h b/src/net/clientthread.h index 38f8c912..401cae51 100644 --- a/src/net/clientthread.h +++ b/src/net/clientthread.h @@ -91,6 +91,7 @@ public: GameInfo GetGameInfo(unsigned gameId) const; PlayerInfo GetPlayerInfo(unsigned playerId) const; bool GetPlayerIdFromName(const std::string &playerName, unsigned &playerId) const; + unsigned GetGameIdOfPlayer(unsigned playerId) const; ServerStats GetStatData() const; unsigned GetGameId() const; unsigned GetGuiPlayerId() const; diff --git a/src/net/common/clientthread.cpp b/src/net/common/clientthread.cpp index 5f9b853e..12212cc7 100644 --- a/src/net/common/clientthread.cpp +++ b/src/net/common/clientthread.cpp @@ -449,6 +449,35 @@ ClientThread::GetPlayerIdFromName(const string &playerName, unsigned &playerId) return retVal; } +unsigned +ClientThread::GetGameIdOfPlayer(unsigned playerId) const +{ + unsigned gameId = 0; // Default: no game (invalid id). + + // Iterate through all games to find the player. + boost::mutex::scoped_lock lock(m_gameInfoMapMutex); + GameInfoMap::const_iterator i = m_gameInfoMap.begin(); + GameInfoMap::const_iterator i_end = m_gameInfoMap.end(); + while (i != i_end) + { + PlayerIdList::const_iterator j = (*i).second.players.begin(); + PlayerIdList::const_iterator j_end = (*i).second.players.end(); + while (j != j_end) + { + if (playerId == *j) + { + gameId = (*i).first; + break; + } + ++j; + } + if (gameId) + break; + ++i; + } + return gameId; +} + ClientCallback & ClientThread::GetCallback() { diff --git a/src/session.cpp b/src/session.cpp index 8832c97a..3d9d9776 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -495,6 +495,14 @@ PlayerInfo Session::getClientPlayerInfo(unsigned playerId) const return info; } +unsigned Session::getGameIdOfPlayer(unsigned playerId) const +{ + unsigned gameId = 0; + if (myNetClient) + gameId = myNetClient->GetGameIdOfPlayer(playerId); + return gameId; +} + ServerStats Session::getClientStats() const { ServerStats stats; diff --git a/src/session.h b/src/session.h index cf1cf2b3..717458ee 100755 --- a/src/session.h +++ b/src/session.h @@ -102,6 +102,7 @@ public: ServerInfo getClientServerInfo(unsigned serverId) const; GameInfo getClientGameInfo(unsigned gameId) const; PlayerInfo getClientPlayerInfo(unsigned playerId) const; + unsigned getGameIdOfPlayer(unsigned playerId) const; ServerStats getClientStats() const; unsigned getClientCurrentGameId() const; unsigned getClientUniquePlayerId() const;