Finishing server side invitation system.

This commit is contained in:
lotodore
2010-03-30 17:10:37 +00:00
parent 1eadf21051
commit 5239f496f3
6 changed files with 74 additions and 6 deletions
+1 -1
View File
@@ -1160,7 +1160,7 @@ ClientStateWaitAuthChallenge::~ClientStateWaitAuthChallenge()
}
void
ClientStateWaitAuthChallenge::Enter(boost::shared_ptr<ClientThread> client)
ClientStateWaitAuthChallenge::Enter(boost::shared_ptr<ClientThread> /*client*/)
{
}
+25
View File
@@ -482,6 +482,31 @@ ServerGame::SetAdminPlayerId(unsigned playerId)
m_adminPlayerId = playerId;
}
void
ServerGame::AddPlayerInvitation(unsigned playerId)
{
boost::mutex::scoped_lock lock(m_playerInvitationListMutex);
m_playerInvitationList.push_back(playerId);
}
void
ServerGame::RemovePlayerInvitation(unsigned playerId)
{
boost::mutex::scoped_lock lock(m_playerInvitationListMutex);
m_playerInvitationList.remove(playerId);
}
bool
ServerGame::IsPlayerInvited(unsigned playerId) const
{
bool retVal = false;
boost::mutex::scoped_lock lock(m_playerInvitationListMutex);
PlayerIdList::const_iterator pos = find(m_playerInvitationList.begin(), m_playerInvitationList.end(), playerId);
if (pos != m_playerInvitationList.end())
retVal = true;
return retVal;
}
void
ServerGame::AddComputerPlayer(boost::shared_ptr<PlayerData> player)
{
+9 -3
View File
@@ -316,12 +316,13 @@ ServerGameStateInit::NotifyGameAdminChanged(boost::shared_ptr<ServerGame> server
void
ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session)
{
if (session.sessionData.get() && session.playerData.get())
if (session.sessionData && session.playerData)
{
size_t curNumPlayers = server->GetCurNumberOfPlayers();
const GameData &tmpGameData = server->GetGameData();
// Check the number of players.
if (curNumPlayers >= (size_t)server->GetGameData().maxNumberOfPlayers)
if (curNumPlayers >= (size_t)tmpGameData.maxNumberOfPlayers)
{
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
}
@@ -477,7 +478,12 @@ ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server,
bool requestSent = server->GetLobbyThread().SendToLobbyPlayer(netInvite->playerId, packet);
server->SendToAllPlayers(packet, SessionData::Game);
if (!requestSent)
if (requestSent)
{
// This player has been invited.
server->AddPlayerInvitation(netInvite->playerId);
}
else
{
// Player is not in lobby - send reject message.
boost::shared_ptr<NetPacket> p2(new NetPacket(NetPacket::Alloc));
+31 -2
View File
@@ -933,6 +933,8 @@ ServerLobbyThread::HandlePacket(SessionWrapper session, boost::shared_ptr<NetPac
}
else if (packet->GetMsg()->present == PokerTHMessage_PR_chatRequestMessage)
HandleNetPacketChatRequest(session, packet->GetMsg()->choice.chatRequestMessage);
else if (packet->GetMsg()->present == PokerTHMessage_PR_rejectGameInvitationMessage)
HandleNetPacketRejectGameInvitation(session, packet->GetMsg()->choice.rejectGameInvitationMessage);
else
SessionError(session, ERR_SOCK_INVALID_STATE);
}
@@ -1318,6 +1320,12 @@ ServerLobbyThread::HandleNetPacketJoinGame(SessionWrapper session, const std::st
SendJoinGameFailed(session.sessionData, NTF_NET_JOIN_GUEST_FORBIDDEN);
joinGame = false;
}
else if (tmpData.gameType == GAME_TYPE_INVITE_ONLY
&& !game.IsPlayerInvited(session.playerData->GetUniqueId()))
{
SendJoinGameFailed(session.sessionData, NTF_NET_JOIN_NOT_INVITED);
joinGame = false;
}
else if (!game.CheckPassword(password))
{
SendJoinGameFailed(session.sessionData, NTF_NET_JOIN_INVALID_PASSWORD);
@@ -1328,8 +1336,7 @@ ServerLobbyThread::HandleNetPacketJoinGame(SessionWrapper session, const std::st
}
else
{
// TODO do not remove session
SessionError(session, ERR_NET_UNKNOWN_GAME);
SendJoinGameFailed(session.sessionData, NTF_NET_JOIN_GAME_INVALID);
}
}
@@ -1366,6 +1373,28 @@ ServerLobbyThread::HandleNetPacketChatRequest(SessionWrapper session, const Chat
}
}
void
ServerLobbyThread::HandleNetPacketRejectGameInvitation(SessionWrapper session, const RejectGameInvitationMessage_t &reject)
{
GameMap::iterator pos = m_gameMap.find(reject.gameId);
if (pos != m_gameMap.end() && session.playerData)
{
ServerGame &game = *pos->second;
if (game.IsPlayerInvited(session.playerData->GetUniqueId()))
{
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
packet->GetMsg()->present = PokerTHMessage_PR_rejectInvNotifyMessage;
RejectInvNotifyMessage_t *netReject = &packet->GetMsg()->choice.rejectInvNotifyMessage;
netReject->gameId = reject.gameId;
netReject->playerId = session.playerData->GetUniqueId();
netReject->playerRejectReason = reject.myRejectReason;
game.SendToAllPlayers(packet, SessionData::Game);
}
}
}
void
ServerLobbyThread::AuthChallenge(SessionWrapper session, const string &secret)
{