From 8f1e5132d68457da8af7f1e6110120529c8528e5 Mon Sep 17 00:00:00 2001 From: lotodore Date: Sat, 27 Oct 2007 18:51:53 +0000 Subject: [PATCH] Added kick function with player name. --- src/net/clientthread.h | 1 + src/net/common/clientthread.cpp | 22 ++++++++++++++++++++++ src/session.cpp | 9 +++++++++ src/session.h | 1 + 4 files changed, 33 insertions(+) diff --git a/src/net/clientthread.h b/src/net/clientthread.h index ad45d10b..7b90b826 100644 --- a/src/net/clientthread.h +++ b/src/net/clientthread.h @@ -67,6 +67,7 @@ public: GameInfo GetGameInfo(unsigned playerId) const; PlayerInfo GetPlayerInfo(unsigned playerId) const; + bool GetPlayerIdFromName(const std::string &playerName, unsigned &playerId) const; ServerStats GetStatData() const; ClientCallback &GetCallback(); diff --git a/src/net/common/clientthread.cpp b/src/net/common/clientthread.cpp index be212348..b45908de 100644 --- a/src/net/common/clientthread.cpp +++ b/src/net/common/clientthread.cpp @@ -264,6 +264,28 @@ ClientThread::GetPlayerInfo(unsigned playerId) const return info; } +bool +ClientThread::GetPlayerIdFromName(const string &playerName, unsigned &playerId) const +{ + bool retVal = false; + + boost::mutex::scoped_lock lock(m_playerInfoMapMutex); + PlayerInfoMap::const_iterator i = m_playerInfoMap.begin(); + PlayerInfoMap::const_iterator end = m_playerInfoMap.end(); + + while (i != end) + { + if (i->second.playerName == playerName) + { + playerId = i->first; + retVal = true; + break; + } + ++i; + } + return retVal; +} + ClientCallback & ClientThread::GetCallback() { diff --git a/src/session.cpp b/src/session.cpp index 75345fb5..3396e6ec 100755 --- a/src/session.cpp +++ b/src/session.cpp @@ -335,6 +335,15 @@ void Session::kickPlayer(unsigned playerId) myNetClient->SendKickPlayer(playerId); } +void Session::kickPlayer(const string &playerName) +{ + if (!myNetClient) + return; // only act if client is running. + unsigned playerId; + if (myNetClient->GetPlayerIdFromName(playerName, playerId)) + kickPlayer(playerId); +} + bool Session::isNetworkClientRunning() const { // This, and every place which calls this, is a HACK. diff --git a/src/session.h b/src/session.h index ba7b49c2..d79209c0 100755 --- a/src/session.h +++ b/src/session.h @@ -77,6 +77,7 @@ public: void sendChatMessage(const std::string &message); void kickPlayer(unsigned playerId); + void kickPlayer(const std::string &playerName); bool isNetworkClientRunning() const; // TODO hack bool isNetworkServerRunning() const; // TODO hack