diff --git a/src/net/common/serverlobbythread.cpp b/src/net/common/serverlobbythread.cpp index 22cb2656..0d34f1ed 100644 --- a/src/net/common/serverlobbythread.cpp +++ b/src/net/common/serverlobbythread.cpp @@ -272,6 +272,10 @@ ServerLobbyThread::AddConnection(boost::shared_ptr sock) netAnnounce->serverType = serverType_serverTypeInternetAuth; break; } + { + boost::mutex::scoped_lock lock(m_statMutex); + netAnnounce->numPlayersOnServer = m_statData.numberOfPlayersOnServer; + } GetSender().Send(sessionData, packet); sock->async_read_some( @@ -1984,7 +1988,8 @@ void ServerLobbyThread::UpdateStatisticsNumberOfPlayers() { ServerStats stats; - unsigned curNumberOfPlayersOnServer = m_sessionManager.GetRawSessionCount() + m_gameSessionManager.GetRawSessionCount(); + // Get all logged-in sessions and all sessions within a game. + unsigned curNumberOfPlayersOnServer = m_sessionManager.GetEstablishedSessionCount() + m_gameSessionManager.GetRawSessionCount(); { boost::mutex::scoped_lock lock(m_statMutex); if (curNumberOfPlayersOnServer != m_statData.numberOfPlayersOnServer) { diff --git a/src/net/common/sessionmanager.cpp b/src/net/common/sessionmanager.cpp index c4117a59..e9894f6c 100644 --- a/src/net/common/sessionmanager.cpp +++ b/src/net/common/sessionmanager.cpp @@ -295,6 +295,23 @@ SessionManager::GetRawSessionCount() return m_sessionMap.size(); } +unsigned +SessionManager::GetEstablishedSessionCount() +{ + unsigned counter = 0; + boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex); + + SessionMap::const_iterator i = m_sessionMap.begin(); + SessionMap::const_iterator end = m_sessionMap.end(); + + while (i != end) { + if ((*i).second.sessionData->GetState() >= SessionData::Established) + ++counter; + ++i; + } + return counter; +} + void SessionManager::SendToAllSessions(SenderHelper &sender, boost::shared_ptr packet, SessionData::State state) { diff --git a/src/net/sessionmanager.h b/src/net/sessionmanager.h index 6d73de91..6fca94e3 100644 --- a/src/net/sessionmanager.h +++ b/src/net/sessionmanager.h @@ -69,6 +69,7 @@ public: void Clear(); unsigned GetRawSessionCount(); + unsigned GetEstablishedSessionCount(); void SendToAllSessions(SenderHelper &sender, boost::shared_ptr packet, SessionData::State state); void SendLobbyMsgToAllSessions(SenderHelper &sender, boost::shared_ptr packet, SessionData::State state);