diff --git a/src/net/common/servergame.cpp b/src/net/common/servergame.cpp index 10b63daf..76de2086 100644 --- a/src/net/common/servergame.cpp +++ b/src/net/common/servergame.cpp @@ -464,6 +464,12 @@ ServerGame::IsPlayerConnected(const std::string &name) const return GetSessionManager().IsPlayerConnected(name); } +bool +ServerGame::IsPlayerConnected(unsigned playerId) const +{ + return GetSessionManager().IsPlayerConnected(playerId); +} + bool ServerGame::IsRunning() const { @@ -487,6 +493,8 @@ ServerGame::AddPlayerInvitation(unsigned playerId) { boost::mutex::scoped_lock lock(m_playerInvitationListMutex); m_playerInvitationList.push_back(playerId); + m_playerInvitationList.sort(); + m_playerInvitationList.unique(); } void diff --git a/src/net/common/servergamestate.cpp b/src/net/common/servergamestate.cpp index be5f5c3f..83ae9510 100644 --- a/src/net/common/servergamestate.cpp +++ b/src/net/common/servergamestate.cpp @@ -467,7 +467,8 @@ ServerGameStateInit::InternalProcessPacket(boost::shared_ptr server, { InvitePlayerToGameMessage_t *netInvite = &packet->GetMsg()->choice.invitePlayerToGameMessage; - if (netInvite->gameId == server->GetId()) + // Only invite players which are not already within the group. + if (netInvite->gameId == server->GetId() && !server->IsPlayerConnected(netInvite->playerId)) { boost::shared_ptr packet(new NetPacket(NetPacket::Alloc)); packet->GetMsg()->present = PokerTHMessage_PR_inviteNotifyMessage; diff --git a/src/net/servergame.h b/src/net/servergame.h index 9f3d8151..a0c62270 100644 --- a/src/net/servergame.h +++ b/src/net/servergame.h @@ -72,6 +72,7 @@ public: boost::shared_ptr GetPlayerDataByUniqueId(unsigned playerId) const; PlayerIdList GetPlayerIdList() const; bool IsPlayerConnected(const std::string &name) const; + bool IsPlayerConnected(unsigned playerId) const; bool IsRunning() const;