Removing SessionWrapper to prepare rejoin. This also improves dispatching network packets.
This commit is contained in:
@@ -366,7 +366,7 @@ ClientThread::StartAsyncRead()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ClientThread::CloseSession(boost::shared_ptr<SessionData> session)
|
ClientThread::CloseSession(boost::shared_ptr<SessionData> /*session*/)
|
||||||
{
|
{
|
||||||
throw NetException(__FILE__, __LINE__, ERR_SOCK_CONN_RESET, 0);
|
throw NetException(__FILE__, __LINE__, ERR_SOCK_CONN_RESET, 0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -102,25 +102,25 @@ ServerGame::SetDBId(DB_id newId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::AddSession(SessionWrapper session)
|
ServerGame::AddSession(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if (session.sessionData)
|
if (session)
|
||||||
GetState().HandleNewSession(shared_from_this(), session);
|
GetState().HandleNewSession(shared_from_this(), session);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::RemovePlayer(unsigned playerId, unsigned errorCode)
|
ServerGame::RemovePlayer(unsigned playerId, unsigned errorCode)
|
||||||
{
|
{
|
||||||
SessionWrapper tmpSession = GetSessionManager().GetSessionByUniquePlayerId(playerId);
|
boost::shared_ptr<SessionData> tmpSession = GetSessionManager().GetSessionByUniquePlayerId(playerId);
|
||||||
// Only kick if the player was found.
|
// Only kick if the player was found.
|
||||||
if (tmpSession.sessionData.get())
|
if (tmpSession)
|
||||||
SessionError(tmpSession, errorCode);
|
SessionError(tmpSession, errorCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::HandlePacket(SessionWrapper session, boost::shared_ptr<NetPacket> packet)
|
ServerGame::HandlePacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
if (session.sessionData && packet)
|
if (session && packet)
|
||||||
GetState().ProcessPacket(shared_from_this(), session, packet);
|
GetState().ProcessPacket(shared_from_this(), session, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -372,9 +372,9 @@ ServerGame::RemoveAutoLeavePlayers()
|
|||||||
PlayerIdList::const_iterator i = m_autoLeavePlayerList.begin();
|
PlayerIdList::const_iterator i = m_autoLeavePlayerList.begin();
|
||||||
PlayerIdList::const_iterator end = m_autoLeavePlayerList.end();
|
PlayerIdList::const_iterator end = m_autoLeavePlayerList.end();
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
SessionWrapper tmpSession = GetSessionManager().GetSessionByUniquePlayerId(*i);
|
boost::shared_ptr<SessionData> tmpSession = GetSessionManager().GetSessionByUniquePlayerId(*i);
|
||||||
// Only remove if the player was found.
|
// Only remove if the player was found.
|
||||||
if (tmpSession.sessionData.get())
|
if (tmpSession)
|
||||||
MoveSessionToLobby(tmpSession, NTF_NET_REMOVED_ON_REQUEST);
|
MoveSessionToLobby(tmpSession, NTF_NET_REMOVED_ON_REQUEST);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
@@ -391,9 +391,9 @@ ServerGame::InternalEndGame()
|
|||||||
void
|
void
|
||||||
ServerGame::InternalKickPlayer(unsigned playerId)
|
ServerGame::InternalKickPlayer(unsigned playerId)
|
||||||
{
|
{
|
||||||
SessionWrapper tmpSession = GetSessionManager().GetSessionByUniquePlayerId(playerId);
|
boost::shared_ptr<SessionData> tmpSession = GetSessionManager().GetSessionByUniquePlayerId(playerId);
|
||||||
// Only kick if the player was found.
|
// Only kick if the player was found.
|
||||||
if (tmpSession.sessionData.get())
|
if (tmpSession)
|
||||||
MoveSessionToLobby(tmpSession, NTF_NET_REMOVED_KICKED);
|
MoveSessionToLobby(tmpSession, NTF_NET_REMOVED_KICKED);
|
||||||
// KICKING COMPUTER PLAYERS IS BUGGY AND OCCASIONALLY CAUSES A CRASH
|
// KICKING COMPUTER PLAYERS IS BUGGY AND OCCASIONALLY CAUSES A CRASH
|
||||||
// Disabled for now.
|
// Disabled for now.
|
||||||
@@ -406,9 +406,9 @@ ServerGame::InternalKickPlayer(unsigned playerId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWho, unsigned timeoutSec)
|
ServerGame::InternalAskVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned playerIdWho, unsigned timeoutSec)
|
||||||
{
|
{
|
||||||
if (IsRunning() && byWhom.playerData) {
|
if (IsRunning() && byWhom->GetPlayerData()) {
|
||||||
// Retrieve only the number of human players.
|
// Retrieve only the number of human players.
|
||||||
size_t numPlayers = GetSessionManager().GetPlayerIdList(SessionData::Game).size();
|
size_t numPlayers = GetSessionManager().GetPlayerIdList(SessionData::Game).size();
|
||||||
if (numPlayers > 2) {
|
if (numPlayers > 2) {
|
||||||
@@ -417,7 +417,7 @@ ServerGame::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWho, uns
|
|||||||
// Lock the vote kick data.
|
// Lock the vote kick data.
|
||||||
if (!m_voteKickData) {
|
if (!m_voteKickData) {
|
||||||
// Initiate a vote kick.
|
// Initiate a vote kick.
|
||||||
unsigned playerIdByWhom = byWhom.playerData->GetUniqueId();
|
unsigned playerIdByWhom = byWhom->GetPlayerData()->GetUniqueId();
|
||||||
m_voteKickData.reset(new VoteKickData);
|
m_voteKickData.reset(new VoteKickData);
|
||||||
m_voteKickData->petitionId = m_curPetitionId++;
|
m_voteKickData->petitionId = m_curPetitionId++;
|
||||||
m_voteKickData->kickPlayerId = playerIdWho;
|
m_voteKickData->kickPlayerId = playerIdWho;
|
||||||
@@ -455,7 +455,7 @@ ServerGame::InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWho, uns
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::InternalDenyAskVoteKick(SessionWrapper byWhom, unsigned playerIdWho, DenyKickPlayerReason reason)
|
ServerGame::InternalDenyAskVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned playerIdWho, DenyKickPlayerReason reason)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_askKickDeniedMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_askKickDeniedMessage;
|
||||||
@@ -463,17 +463,17 @@ ServerGame::InternalDenyAskVoteKick(SessionWrapper byWhom, unsigned playerIdWho,
|
|||||||
netKickDenied->gameId = GetId();
|
netKickDenied->gameId = GetId();
|
||||||
netKickDenied->playerId = playerIdWho;
|
netKickDenied->playerId = playerIdWho;
|
||||||
netKickDenied->kickDeniedReason = reason;
|
netKickDenied->kickDeniedReason = reason;
|
||||||
GetLobbyThread().GetSender().Send(byWhom.sessionData, packet);
|
GetLobbyThread().GetSender().Send(byWhom, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::InternalVoteKick(SessionWrapper byWhom, unsigned petitionId, KickVote vote)
|
ServerGame::InternalVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned petitionId, KickVote vote)
|
||||||
{
|
{
|
||||||
if (IsRunning() && byWhom.playerData) {
|
if (IsRunning() && byWhom->GetPlayerData()) {
|
||||||
// Check whether this is the valid petition id.
|
// Check whether this is the valid petition id.
|
||||||
if (m_voteKickData && m_voteKickData->petitionId == petitionId) {
|
if (m_voteKickData && m_voteKickData->petitionId == petitionId) {
|
||||||
// Check whether the player already voted.
|
// Check whether the player already voted.
|
||||||
unsigned playerId = byWhom.playerData->GetUniqueId();
|
unsigned playerId = byWhom->GetPlayerData()->GetUniqueId();
|
||||||
if (find(m_voteKickData->votedPlayerIds.begin(), m_voteKickData->votedPlayerIds.end(), playerId) == m_voteKickData->votedPlayerIds.end()) {
|
if (find(m_voteKickData->votedPlayerIds.begin(), m_voteKickData->votedPlayerIds.end(), playerId) == m_voteKickData->votedPlayerIds.end()) {
|
||||||
m_voteKickData->votedPlayerIds.push_back(playerId);
|
m_voteKickData->votedPlayerIds.push_back(playerId);
|
||||||
if (vote == KICK_VOTE_IN_FAVOUR)
|
if (vote == KICK_VOTE_IN_FAVOUR)
|
||||||
@@ -499,7 +499,7 @@ ServerGame::InternalVoteKick(SessionWrapper byWhom, unsigned petitionId, KickVot
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::InternalDenyVoteKick(SessionWrapper byWhom, unsigned petitionId, DenyVoteReason reason)
|
ServerGame::InternalDenyVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned petitionId, DenyVoteReason reason)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_voteKickReplyMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_voteKickReplyMessage;
|
||||||
@@ -510,7 +510,7 @@ ServerGame::InternalDenyVoteKick(SessionWrapper byWhom, unsigned petitionId, Den
|
|||||||
|
|
||||||
VoteKickDenied_t *kickDenied = &netVoteReply->voteKickReplyType.choice.voteKickDenied;
|
VoteKickDenied_t *kickDenied = &netVoteReply->voteKickReplyType.choice.voteKickDenied;
|
||||||
kickDenied->voteKickDeniedReason = reason;
|
kickDenied->voteKickDeniedReason = reason;
|
||||||
GetLobbyThread().GetSender().Send(byWhom.sessionData, packet);
|
GetLobbyThread().GetSender().Send(byWhom, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerDataList
|
PlayerDataList
|
||||||
@@ -527,10 +527,9 @@ boost::shared_ptr<PlayerData>
|
|||||||
ServerGame::GetPlayerDataByUniqueId(unsigned playerId) const
|
ServerGame::GetPlayerDataByUniqueId(unsigned playerId) const
|
||||||
{
|
{
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer;
|
boost::shared_ptr<PlayerData> tmpPlayer;
|
||||||
SessionWrapper session = GetSessionManager().GetSessionByUniquePlayerId(playerId);
|
boost::shared_ptr<SessionData> session = GetSessionManager().GetSessionByUniquePlayerId(playerId);
|
||||||
if (session.playerData.get()) {
|
tmpPlayer = session->GetPlayerData();
|
||||||
tmpPlayer = session.playerData;
|
if (!tmpPlayer) {
|
||||||
} else {
|
|
||||||
boost::mutex::scoped_lock lock(m_computerPlayerListMutex);
|
boost::mutex::scoped_lock lock(m_computerPlayerListMutex);
|
||||||
PlayerDataList::const_iterator i = m_computerPlayerList.begin();
|
PlayerDataList::const_iterator i = m_computerPlayerList.begin();
|
||||||
PlayerDataList::const_iterator end = m_computerPlayerList.end();
|
PlayerDataList::const_iterator end = m_computerPlayerList.end();
|
||||||
@@ -694,13 +693,13 @@ ServerGame::ResetComputerPlayerList()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::GracefulRemoveSession(SessionWrapper session, int reason)
|
ServerGame::GracefulRemoveSession(boost::shared_ptr<SessionData> session, int reason)
|
||||||
{
|
{
|
||||||
if (!session.sessionData)
|
if (!session)
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||||
|
|
||||||
if (GetSessionManager().RemoveSession(session.sessionData->GetId())) {
|
if (GetSessionManager().RemoveSession(session->GetId())) {
|
||||||
boost::shared_ptr<PlayerData> tmpPlayerData = session.playerData;
|
boost::shared_ptr<PlayerData> tmpPlayerData = session->GetPlayerData();
|
||||||
if (tmpPlayerData && !tmpPlayerData->GetName().empty()) {
|
if (tmpPlayerData && !tmpPlayerData->GetName().empty()) {
|
||||||
RemovePlayerData(tmpPlayerData, reason);
|
RemovePlayerData(tmpPlayerData, reason);
|
||||||
}
|
}
|
||||||
@@ -763,27 +762,27 @@ ServerGame::RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::ErrorRemoveSession(SessionWrapper session)
|
ServerGame::ErrorRemoveSession(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
GetLobbyThread().RemoveSessionFromGame(session);
|
GetLobbyThread().RemoveSessionFromGame(session);
|
||||||
GracefulRemoveSession(session, NTF_NET_INTERNAL);
|
GracefulRemoveSession(session, NTF_NET_INTERNAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::SessionError(SessionWrapper session, int errorCode)
|
ServerGame::SessionError(boost::shared_ptr<SessionData> session, int errorCode)
|
||||||
{
|
{
|
||||||
if (!session.sessionData.get())
|
if (!session)
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||||
ErrorRemoveSession(session);
|
ErrorRemoveSession(session);
|
||||||
GetLobbyThread().SessionError(session, errorCode);
|
GetLobbyThread().SessionError(session, errorCode);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGame::MoveSessionToLobby(SessionWrapper session, int reason)
|
ServerGame::MoveSessionToLobby(boost::shared_ptr<SessionData> session, int reason)
|
||||||
{
|
{
|
||||||
GracefulRemoveSession(session, reason);
|
GracefulRemoveSession(session, reason);
|
||||||
// Reset ready flag - just in case it is set, player may leave at any time.
|
// Reset ready flag - just in case it is set, player may leave at any time.
|
||||||
session.sessionData->ResetReadyFlag();
|
session->ResetReadyFlag();
|
||||||
GetLobbyThread().ReAddSession(session, reason);
|
GetLobbyThread().ReAddSession(session, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -221,10 +221,10 @@ AbstractServerGameStateReceiving::~AbstractServerGameStateReceiving()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet)
|
AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
if (packet->IsClientActivity())
|
if (packet->IsClientActivity())
|
||||||
session.sessionData->ResetActivityTimer();
|
session->ResetActivityTimer();
|
||||||
if (packet->GetMsg()->present == PokerTHMessage_PR_playerInfoRequestMessage) {
|
if (packet->GetMsg()->present == PokerTHMessage_PR_playerInfoRequestMessage) {
|
||||||
// Delegate to Lobby.
|
// Delegate to Lobby.
|
||||||
server->GetLobbyThread().HandleGameRetrievePlayerInfo(session, packet->GetMsg()->choice.playerInfoRequestMessage);
|
server->GetLobbyThread().HandleGameRetrievePlayerInfo(session, packet->GetMsg()->choice.playerInfoRequestMessage);
|
||||||
@@ -237,27 +237,25 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
// Only admins are allowed to kick, and only in the lobby.
|
// Only admins are allowed to kick, and only in the lobby.
|
||||||
// After leaving the lobby, a vote needs to be initiated to kick.
|
// After leaving the lobby, a vote needs to be initiated to kick.
|
||||||
KickPlayerRequestMessage_t *netKickRequest = &packet->GetMsg()->choice.kickPlayerRequestMessage;
|
KickPlayerRequestMessage_t *netKickRequest = &packet->GetMsg()->choice.kickPlayerRequestMessage;
|
||||||
if (session.playerData->IsGameAdmin() && !server->IsRunning()
|
if (session->GetPlayerData()->IsGameAdmin() && !server->IsRunning()
|
||||||
&& netKickRequest->gameId == server->GetId() && server->GetGameData().gameType != GAME_TYPE_RANKING) {
|
&& netKickRequest->gameId == server->GetId() && server->GetGameData().gameType != GAME_TYPE_RANKING) {
|
||||||
server->InternalKickPlayer(netKickRequest->playerId);
|
server->InternalKickPlayer(netKickRequest->playerId);
|
||||||
}
|
}
|
||||||
} else if (packet->GetMsg()->present == PokerTHMessage_PR_askKickPlayerMessage) {
|
} else if (packet->GetMsg()->present == PokerTHMessage_PR_askKickPlayerMessage) {
|
||||||
if (session.playerData && server->GetGameData().gameType != GAME_TYPE_RANKING) {
|
if (server->GetGameData().gameType != GAME_TYPE_RANKING) {
|
||||||
AskKickPlayerMessage_t *netAskKick = &packet->GetMsg()->choice.askKickPlayerMessage;
|
AskKickPlayerMessage_t *netAskKick = &packet->GetMsg()->choice.askKickPlayerMessage;
|
||||||
server->InternalAskVoteKick(session, netAskKick->playerId, SERVER_VOTE_KICK_TIMEOUT_SEC);
|
server->InternalAskVoteKick(session, netAskKick->playerId, SERVER_VOTE_KICK_TIMEOUT_SEC);
|
||||||
}
|
}
|
||||||
} else if (packet->GetMsg()->present == PokerTHMessage_PR_voteKickRequestMessage) {
|
} else if (packet->GetMsg()->present == PokerTHMessage_PR_voteKickRequestMessage) {
|
||||||
if (session.playerData) {
|
|
||||||
VoteKickRequestMessage_t *netVoteKick = &packet->GetMsg()->choice.voteKickRequestMessage;
|
VoteKickRequestMessage_t *netVoteKick = &packet->GetMsg()->choice.voteKickRequestMessage;
|
||||||
server->InternalVoteKick(session, netVoteKick->petitionId, netVoteKick->voteKick ? KICK_VOTE_IN_FAVOUR : KICK_VOTE_AGAINST);
|
server->InternalVoteKick(session, netVoteKick->petitionId, netVoteKick->voteKick ? KICK_VOTE_IN_FAVOUR : KICK_VOTE_AGAINST);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
// Chat text is always allowed.
|
// Chat text is always allowed.
|
||||||
else if (packet->GetMsg()->present == PokerTHMessage_PR_chatRequestMessage) {
|
else if (packet->GetMsg()->present == PokerTHMessage_PR_chatRequestMessage) {
|
||||||
bool chatSent = false;
|
bool chatSent = false;
|
||||||
ChatRequestMessage_t *netChatRequest = &packet->GetMsg()->choice.chatRequestMessage;
|
ChatRequestMessage_t *netChatRequest = &packet->GetMsg()->choice.chatRequestMessage;
|
||||||
// Only forward if this player is known and not a guest.
|
// Only forward if this player is known and not a guest.
|
||||||
if (session.playerData && session.playerData->GetRights() != PLAYER_RIGHTS_GUEST) {
|
if (session->GetPlayerData()->GetRights() != PLAYER_RIGHTS_GUEST) {
|
||||||
// Forward chat text to all players.
|
// Forward chat text to all players.
|
||||||
// TODO: Some limitation needed.
|
// TODO: Some limitation needed.
|
||||||
if (netChatRequest->chatRequestType.present == chatRequestType_PR_chatRequestTypeLobby
|
if (netChatRequest->chatRequestType.present == chatRequestType_PR_chatRequestTypeLobby
|
||||||
@@ -273,7 +271,7 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
netChat->chatType.present = chatType_PR_chatTypeGame;
|
netChat->chatType.present = chatType_PR_chatTypeGame;
|
||||||
ChatTypeGame_t *netGameChat = &netChat->chatType.choice.chatTypeGame;
|
ChatTypeGame_t *netGameChat = &netChat->chatType.choice.chatTypeGame;
|
||||||
netGameChat->gameId = server->GetId();
|
netGameChat->gameId = server->GetId();
|
||||||
netGameChat->playerId = session.playerData->GetUniqueId();
|
netGameChat->playerId = session->GetPlayerData()->GetUniqueId();
|
||||||
OCTET_STRING_fromBuf(
|
OCTET_STRING_fromBuf(
|
||||||
&netChat->chatText,
|
&netChat->chatText,
|
||||||
(char *)netChatRequest->chatText.buf,
|
(char *)netChatRequest->chatText.buf,
|
||||||
@@ -286,8 +284,8 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
//{
|
//{
|
||||||
server->GetLobbyThread().GetChatCleaner().HandleGameChatText(
|
server->GetLobbyThread().GetChatCleaner().HandleGameChatText(
|
||||||
server->GetId(),
|
server->GetId(),
|
||||||
session.playerData->GetUniqueId(),
|
session->GetPlayerData()->GetUniqueId(),
|
||||||
session.playerData->GetName(),
|
session->GetPlayerData()->GetName(),
|
||||||
string((char *)netChatRequest->chatText.buf, netChatRequest->chatText.size));
|
string((char *)netChatRequest->chatText.buf, netChatRequest->chatText.size));
|
||||||
//}
|
//}
|
||||||
}
|
}
|
||||||
@@ -301,15 +299,15 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
&netReject->chatText,
|
&netReject->chatText,
|
||||||
(char *)netChatRequest->chatText.buf,
|
(char *)netChatRequest->chatText.buf,
|
||||||
netChatRequest->chatText.size);
|
netChatRequest->chatText.size);
|
||||||
server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
|
server->GetLobbyThread().GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
} else if (packet->GetMsg()->present == PokerTHMessage_PR_subscriptionRequestMessage) {
|
} else if (packet->GetMsg()->present == PokerTHMessage_PR_subscriptionRequestMessage) {
|
||||||
SubscriptionRequestMessage_t *netSubscription = &packet->GetMsg()->choice.subscriptionRequestMessage;
|
SubscriptionRequestMessage_t *netSubscription = &packet->GetMsg()->choice.subscriptionRequestMessage;
|
||||||
if (netSubscription->subscriptionAction == subscriptionAction_resubscribeGameList) {
|
if (netSubscription->subscriptionAction == subscriptionAction_resubscribeGameList) {
|
||||||
if (!session.sessionData->WantsLobbyMsg())
|
if (!session->WantsLobbyMsg())
|
||||||
server->GetLobbyThread().ResubscribeLobbyMsg(session);
|
server->GetLobbyThread().ResubscribeLobbyMsg(session);
|
||||||
} else
|
} else
|
||||||
session.sessionData->ResetWantsLobbyMsg();
|
session->ResetWantsLobbyMsg();
|
||||||
} else if (packet->GetMsg()->present == PokerTHMessage_PR_reportAvatarMessage) {
|
} else if (packet->GetMsg()->present == PokerTHMessage_PR_reportAvatarMessage) {
|
||||||
ReportAvatarMessage_t *netReport = &packet->GetMsg()->choice.reportAvatarMessage;
|
ReportAvatarMessage_t *netReport = &packet->GetMsg()->choice.reportAvatarMessage;
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer = server->GetPlayerDataByUniqueId(netReport->reportedPlayerId);
|
boost::shared_ptr<PlayerData> tmpPlayer = server->GetPlayerDataByUniqueId(netReport->reportedPlayerId);
|
||||||
@@ -320,7 +318,7 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
// Temporarily note that this avatar was reported.
|
// Temporarily note that this avatar was reported.
|
||||||
// This prevents spamming of the avatar report.
|
// This prevents spamming of the avatar report.
|
||||||
server->AddReportedAvatar(tmpPlayer->GetUniqueId());
|
server->AddReportedAvatar(tmpPlayer->GetUniqueId());
|
||||||
DB_id myDBid = session.playerData->GetDBId();
|
DB_id myDBid = session->GetPlayerData()->GetDBId();
|
||||||
// Do not use the "game" database object, but the global one.
|
// Do not use the "game" database object, but the global one.
|
||||||
// The entry should be created even if we are not running a
|
// The entry should be created even if we are not running a
|
||||||
// ranking game.
|
// ranking game.
|
||||||
@@ -331,7 +329,7 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
tmpAvatarType.erase(0, 1); // Only store extension without the "."
|
tmpAvatarType.erase(0, 1); // Only store extension without the "."
|
||||||
|
|
||||||
server->GetLobbyThread().GetDatabase()->AsyncReportAvatar(
|
server->GetLobbyThread().GetDatabase()->AsyncReportAvatar(
|
||||||
session.playerData->GetUniqueId(),
|
session->GetPlayerData()->GetUniqueId(),
|
||||||
tmpPlayer->GetUniqueId(),
|
tmpPlayer->GetUniqueId(),
|
||||||
tmpPlayer->GetDBId(),
|
tmpPlayer->GetDBId(),
|
||||||
tmpPlayer->GetAvatarMD5().ToString(),
|
tmpPlayer->GetAvatarMD5().ToString(),
|
||||||
@@ -344,7 +342,7 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
|
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
|
||||||
netReportAck->reportedPlayerId = netReport->reportedPlayerId;
|
netReportAck->reportedPlayerId = netReport->reportedPlayerId;
|
||||||
netReportAck->reportResult = reportResult_avatarReportDuplicate;
|
netReportAck->reportResult = reportResult_avatarReportDuplicate;
|
||||||
server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
|
server->GetLobbyThread().GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
@@ -352,7 +350,7 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
|
|||||||
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
|
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
|
||||||
netReportAck->reportedPlayerId = netReport->reportedPlayerId;
|
netReportAck->reportedPlayerId = netReport->reportedPlayerId;
|
||||||
netReportAck->reportResult = reportResult_avatarReportInvalid;
|
netReportAck->reportResult = reportResult_avatarReportInvalid;
|
||||||
server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
|
server->GetLobbyThread().GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Packet processing in subclass.
|
// Packet processing in subclass.
|
||||||
@@ -405,15 +403,15 @@ ServerGameStateInit::NotifySessionRemoved(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session)
|
ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if (session.sessionData && session.playerData) {
|
if (session && session->GetPlayerData()) {
|
||||||
const GameData &tmpGameData = server->GetGameData();
|
const GameData &tmpGameData = server->GetGameData();
|
||||||
// Check the number of players.
|
// Check the number of players.
|
||||||
if (server->GetCurNumberOfPlayers() >= (size_t)tmpGameData.maxNumberOfPlayers) {
|
if (server->GetCurNumberOfPlayers() >= (size_t)tmpGameData.maxNumberOfPlayers) {
|
||||||
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_GAME_FULL);
|
||||||
} else {
|
} else {
|
||||||
session.playerData->SetGameAdmin(session.playerData->GetUniqueId() == server->GetAdminPlayerId());
|
session->GetPlayerData()->SetGameAdmin(session->GetPlayerData()->GetUniqueId() == server->GetAdminPlayerId());
|
||||||
|
|
||||||
// Send ack to client.
|
// Send ack to client.
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
@@ -422,32 +420,32 @@ ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, Sess
|
|||||||
netJoinReply->gameId = server->GetId();
|
netJoinReply->gameId = server->GetId();
|
||||||
netJoinReply->joinGameResult.present = joinGameResult_PR_joinGameAck;
|
netJoinReply->joinGameResult.present = joinGameResult_PR_joinGameAck;
|
||||||
JoinGameAck_t *joinAck = &netJoinReply->joinGameResult.choice.joinGameAck;
|
JoinGameAck_t *joinAck = &netJoinReply->joinGameResult.choice.joinGameAck;
|
||||||
joinAck->areYouGameAdmin = static_cast<PlayerInfoRights>(session.playerData->IsGameAdmin());
|
joinAck->areYouGameAdmin = static_cast<PlayerInfoRights>(session->GetPlayerData()->IsGameAdmin());
|
||||||
|
|
||||||
NetPacket::SetGameData(server->GetGameData(), &joinAck->gameInfo);
|
NetPacket::SetGameData(server->GetGameData(), &joinAck->gameInfo);
|
||||||
OCTET_STRING_fromBuf(
|
OCTET_STRING_fromBuf(
|
||||||
&joinAck->gameInfo.gameName,
|
&joinAck->gameInfo.gameName,
|
||||||
server->GetName().c_str(),
|
server->GetName().c_str(),
|
||||||
server->GetName().length());
|
server->GetName().length());
|
||||||
server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
|
server->GetLobbyThread().GetSender().Send(session, packet);
|
||||||
|
|
||||||
// Send notifications for connected players to client.
|
// Send notifications for connected players to client.
|
||||||
PlayerDataList tmpPlayerList = server->GetFullPlayerDataList();
|
PlayerDataList tmpPlayerList = server->GetFullPlayerDataList();
|
||||||
PlayerDataList::iterator player_i = tmpPlayerList.begin();
|
PlayerDataList::iterator player_i = tmpPlayerList.begin();
|
||||||
PlayerDataList::iterator player_end = tmpPlayerList.end();
|
PlayerDataList::iterator player_end = tmpPlayerList.end();
|
||||||
while (player_i != player_end) {
|
while (player_i != player_end) {
|
||||||
server->GetLobbyThread().GetSender().Send(session.sessionData, CreateNetPacketPlayerJoined(server->GetId(), *(*player_i)));
|
server->GetLobbyThread().GetSender().Send(session, CreateNetPacketPlayerJoined(server->GetId(), *(*player_i)));
|
||||||
++player_i;
|
++player_i;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send "Player Joined" to other fully connected clients.
|
// Send "Player Joined" to other fully connected clients.
|
||||||
server->SendToAllPlayers(CreateNetPacketPlayerJoined(server->GetId(), *session.playerData), SessionData::Game);
|
server->SendToAllPlayers(CreateNetPacketPlayerJoined(server->GetId(), *session->GetPlayerData()), SessionData::Game);
|
||||||
|
|
||||||
// Accept session.
|
// Accept session.
|
||||||
server->GetSessionManager().AddSession(session);
|
server->GetSessionManager().AddSession(session);
|
||||||
|
|
||||||
// Notify lobby.
|
// Notify lobby.
|
||||||
server->GetLobbyThread().NotifyPlayerJoinedGame(server->GetId(), session.playerData->GetUniqueId());
|
server->GetLobbyThread().NotifyPlayerJoinedGame(server->GetId(), session->GetPlayerData()->GetUniqueId());
|
||||||
|
|
||||||
if (server->GetCurNumberOfPlayers() == (size_t)tmpGameData.maxNumberOfPlayers) {
|
if (server->GetCurNumberOfPlayers() == (size_t)tmpGameData.maxNumberOfPlayers) {
|
||||||
// Automatically start the game if it is full.
|
// Automatically start the game if it is full.
|
||||||
@@ -508,15 +506,15 @@ ServerGameStateInit::TimerAdminWarning(const boost::system::error_code &ec, boos
|
|||||||
{
|
{
|
||||||
if (!ec && &server->GetState() == this) {
|
if (!ec && &server->GetState() == this) {
|
||||||
// Find game admin.
|
// Find game admin.
|
||||||
SessionWrapper session = server->GetSessionManager().GetSessionByUniquePlayerId(server->GetAdminPlayerId());
|
boost::shared_ptr<SessionData> session = server->GetSessionManager().GetSessionByUniquePlayerId(server->GetAdminPlayerId());
|
||||||
if (session.sessionData.get()) {
|
if (session) {
|
||||||
// Send him a warning.
|
// Send him a warning.
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_timeoutWarningMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_timeoutWarningMessage;
|
||||||
TimeoutWarningMessage_t *netWarning = &packet->GetMsg()->choice.timeoutWarningMessage;
|
TimeoutWarningMessage_t *netWarning = &packet->GetMsg()->choice.timeoutWarningMessage;
|
||||||
netWarning->timeoutReason = NETWORK_TIMEOUT_GAME_ADMIN_IDLE;
|
netWarning->timeoutReason = NETWORK_TIMEOUT_GAME_ADMIN_IDLE;
|
||||||
netWarning->remainingSeconds = SERVER_GAME_ADMIN_WARNING_REMAINING_SEC;
|
netWarning->remainingSeconds = SERVER_GAME_ADMIN_WARNING_REMAINING_SEC;
|
||||||
server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
|
server->GetLobbyThread().GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
// Start timeout timer.
|
// Start timeout timer.
|
||||||
server->GetStateTimer1().expires_from_now(
|
server->GetStateTimer1().expires_from_now(
|
||||||
@@ -532,8 +530,8 @@ ServerGameStateInit::TimerAdminTimeout(const boost::system::error_code &ec, boos
|
|||||||
{
|
{
|
||||||
if (!ec && &server->GetState() == this) {
|
if (!ec && &server->GetState() == this) {
|
||||||
// Find game admin.
|
// Find game admin.
|
||||||
SessionWrapper session = server->GetSessionManager().GetSessionByUniquePlayerId(server->GetAdminPlayerId());
|
boost::shared_ptr<SessionData> session = server->GetSessionManager().GetSessionByUniquePlayerId(server->GetAdminPlayerId());
|
||||||
if (session.sessionData.get()) {
|
if (session) {
|
||||||
// Remove him from the game.
|
// Remove him from the game.
|
||||||
server->MoveSessionToLobby(session, NTF_NET_REMOVED_TIMEOUT);
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_TIMEOUT);
|
||||||
}
|
}
|
||||||
@@ -576,12 +574,12 @@ ServerGameStateInit::SendStartEvent(ServerGame &server, bool fillWithComputerPla
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet)
|
ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
if (packet->GetMsg()->present == PokerTHMessage_PR_startEventMessage) {
|
if (packet->GetMsg()->present == PokerTHMessage_PR_startEventMessage) {
|
||||||
StartEventMessage_t *netStartEvent = &packet->GetMsg()->choice.startEventMessage;
|
StartEventMessage_t *netStartEvent = &packet->GetMsg()->choice.startEventMessage;
|
||||||
// Only admins are allowed to start the game.
|
// Only admins are allowed to start the game.
|
||||||
if (session.playerData->IsGameAdmin()
|
if (session->GetPlayerData()->IsGameAdmin()
|
||||||
&& netStartEvent->gameId == server->GetId()
|
&& netStartEvent->gameId == server->GetId()
|
||||||
&& (server->GetGameData().gameType != GAME_TYPE_RANKING // ranking games need to be full
|
&& (server->GetGameData().gameType != GAME_TYPE_RANKING // ranking games need to be full
|
||||||
|| server->GetGameData().maxNumberOfPlayers == (int)server->GetCurNumberOfPlayers())) {
|
|| server->GetGameData().maxNumberOfPlayers == (int)server->GetCurNumberOfPlayers())) {
|
||||||
@@ -598,7 +596,7 @@ ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server,
|
|||||||
packet->GetMsg()->present = PokerTHMessage_PR_inviteNotifyMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_inviteNotifyMessage;
|
||||||
InviteNotifyMessage_t *netInvNotif = &packet->GetMsg()->choice.inviteNotifyMessage;
|
InviteNotifyMessage_t *netInvNotif = &packet->GetMsg()->choice.inviteNotifyMessage;
|
||||||
netInvNotif->gameId = netInvite->gameId;
|
netInvNotif->gameId = netInvite->gameId;
|
||||||
netInvNotif->playerIdByWhom = session.playerData->GetUniqueId();
|
netInvNotif->playerIdByWhom = session->GetPlayerData()->GetUniqueId();
|
||||||
netInvNotif->playerIdWho = netInvite->playerId;
|
netInvNotif->playerIdWho = netInvite->playerId;
|
||||||
|
|
||||||
bool requestSent = server->GetLobbyThread().SendToLobbyPlayer(netInvite->playerId, packet);
|
bool requestSent = server->GetLobbyThread().SendToLobbyPlayer(netInvite->playerId, packet);
|
||||||
@@ -619,7 +617,7 @@ ServerGameStateInit::InternalProcessPacket(boost::shared_ptr<ServerGame> server,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (packet->GetMsg()->present == PokerTHMessage_PR_resetTimeoutMessage) {
|
} else if (packet->GetMsg()->present == PokerTHMessage_PR_resetTimeoutMessage) {
|
||||||
if (session.playerData->IsGameAdmin()) {
|
if (session->GetPlayerData()->IsGameAdmin()) {
|
||||||
RegisterAdminTimer(server);
|
RegisterAdminTimer(server);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -676,17 +674,17 @@ ServerGameStateStartGame::Exit(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateStartGame::HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session)
|
ServerGameStateStartGame::HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
// Do not accept new sessions in this state.
|
// Do not accept new sessions in this state.
|
||||||
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateStartGame::InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet)
|
ServerGameStateStartGame::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
if (packet->GetMsg()->present == PokerTHMessage_PR_startEventAckMessage) {
|
if (packet->GetMsg()->present == PokerTHMessage_PR_startEventAckMessage) {
|
||||||
session.sessionData->SetReadyFlag();
|
session->SetReadyFlag();
|
||||||
if (server->GetSessionManager().CountReadySessions() == server->GetSessionManager().GetRawSessionCount()) {
|
if (server->GetSessionManager().CountReadySessions() == server->GetSessionManager().GetRawSessionCount()) {
|
||||||
// Everyone is ready.
|
// Everyone is ready.
|
||||||
server->GetSessionManager().ResetAllReadyFlags();
|
server->GetSessionManager().ResetAllReadyFlags();
|
||||||
@@ -714,8 +712,8 @@ ServerGameStateStartGame::DoStart(boost::shared_ptr<ServerGame> server)
|
|||||||
if (tmpPlayerList.size() <= 1) {
|
if (tmpPlayerList.size() <= 1) {
|
||||||
if (!tmpPlayerList.empty()) {
|
if (!tmpPlayerList.empty()) {
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer(tmpPlayerList.front());
|
boost::shared_ptr<PlayerData> tmpPlayer(tmpPlayerList.front());
|
||||||
SessionWrapper tmpSession = server->GetSessionManager().GetSessionByUniquePlayerId(tmpPlayer->GetUniqueId());
|
boost::shared_ptr<SessionData> tmpSession = server->GetSessionManager().GetSessionByUniquePlayerId(tmpPlayer->GetUniqueId());
|
||||||
if (tmpSession.sessionData)
|
if (tmpSession)
|
||||||
server->MoveSessionToLobby(tmpSession, NTF_NET_REMOVED_START_FAILED);
|
server->MoveSessionToLobby(tmpSession, NTF_NET_REMOVED_START_FAILED);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@@ -780,14 +778,14 @@ ServerGameStateHand::Exit(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateHand::HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session)
|
ServerGameStateHand::HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
// Do not accept new sessions in this state.
|
// Do not accept new sessions in this state.
|
||||||
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateHand::InternalProcessPacket(boost::shared_ptr<ServerGame> /*server*/, SessionWrapper /*session*/, boost::shared_ptr<NetPacket> /*packet*/)
|
ServerGameStateHand::InternalProcessPacket(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/, boost::shared_ptr<NetPacket> /*packet*/)
|
||||||
{
|
{
|
||||||
// TODO: maybe reject packet.
|
// TODO: maybe reject packet.
|
||||||
}
|
}
|
||||||
@@ -1088,8 +1086,8 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
while (i != end) {
|
while (i != end) {
|
||||||
// also send to inactive players, but not to disconnected players.
|
// also send to inactive players, but not to disconnected players.
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
|
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
|
||||||
SessionWrapper tmpSession = server->GetSessionManager().GetSessionByUniquePlayerId(tmpPlayer->getMyUniqueID());
|
boost::shared_ptr<SessionData> tmpSession = server->GetSessionManager().GetSessionByUniquePlayerId(tmpPlayer->getMyUniqueID());
|
||||||
if (tmpPlayer->isConnected() && tmpSession.sessionData) {
|
if (tmpPlayer->isConnected() && tmpSession) {
|
||||||
int cards[2];
|
int cards[2];
|
||||||
bool errorFlag = false;
|
bool errorFlag = false;
|
||||||
tmpPlayer->getMyCards(cards);
|
tmpPlayer->getMyCards(cards);
|
||||||
@@ -1098,7 +1096,7 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
notifyCards->GetMsg()->present = PokerTHMessage_PR_handStartMessage;
|
notifyCards->GetMsg()->present = PokerTHMessage_PR_handStartMessage;
|
||||||
HandStartMessage_t *netHandStart = ¬ifyCards->GetMsg()->choice.handStartMessage;
|
HandStartMessage_t *netHandStart = ¬ifyCards->GetMsg()->choice.handStartMessage;
|
||||||
netHandStart->gameId = server->GetId();
|
netHandStart->gameId = server->GetId();
|
||||||
string tmpPassword(tmpSession.sessionData->AuthGetPassword());
|
string tmpPassword(tmpSession->AuthGetPassword());
|
||||||
if (tmpPassword.empty()) { // encrypt only if password is present
|
if (tmpPassword.empty()) { // encrypt only if password is present
|
||||||
netHandStart->yourCards.present = yourCards_PR_plainCards;
|
netHandStart->yourCards.present = yourCards_PR_plainCards;
|
||||||
PlainCards_t *plainCards = &netHandStart->yourCards.choice.plainCards;
|
PlainCards_t *plainCards = &netHandStart->yourCards.choice.plainCards;
|
||||||
@@ -1131,7 +1129,7 @@ ServerGameStateHand::StartNewHand(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
if (!errorFlag) {
|
if (!errorFlag) {
|
||||||
netHandStart->smallBlind = curGame.getCurrentHand()->getSmallBlind();
|
netHandStart->smallBlind = curGame.getCurrentHand()->getSmallBlind();
|
||||||
server->GetLobbyThread().GetSender().Send(tmpSession.sessionData, notifyCards);
|
server->GetLobbyThread().GetSender().Send(tmpSession, notifyCards);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
@@ -1230,22 +1228,22 @@ ServerGameStateWaitPlayerAction::Exit(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateWaitPlayerAction::HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session)
|
ServerGameStateWaitPlayerAction::HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
// Do not accept new sessions in this state.
|
// Do not accept new sessions in this state.
|
||||||
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateWaitPlayerAction::InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet)
|
ServerGameStateWaitPlayerAction::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
if (packet->GetMsg()->present == PokerTHMessage_PR_myActionRequestMessage) {
|
if (packet->GetMsg()->present == PokerTHMessage_PR_myActionRequestMessage) {
|
||||||
MyActionRequestMessage_t *netMyAction = &packet->GetMsg()->choice.myActionRequestMessage;
|
MyActionRequestMessage_t *netMyAction = &packet->GetMsg()->choice.myActionRequestMessage;
|
||||||
|
|
||||||
// TODO consider game id.
|
// TODO consider game id.
|
||||||
Game &curGame = server->GetGame();
|
Game &curGame = server->GetGame();
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = curGame.getPlayerByUniqueId(session.playerData->GetUniqueId());
|
boost::shared_ptr<PlayerInterface> tmpPlayer = curGame.getPlayerByUniqueId(session->GetPlayerData()->GetUniqueId());
|
||||||
if (!tmpPlayer.get())
|
if (!tmpPlayer)
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_UNKNOWN_PLAYER_ID, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_UNKNOWN_PLAYER_ID, 0);
|
||||||
|
|
||||||
// Check whether this is the correct round.
|
// Check whether this is the correct round.
|
||||||
@@ -1294,7 +1292,7 @@ ServerGameStateWaitPlayerAction::InternalProcessPacket(boost::shared_ptr<ServerG
|
|||||||
netActionRejected->yourAction = netMyAction->myAction;
|
netActionRejected->yourAction = netMyAction->myAction;
|
||||||
netActionRejected->yourRelativeBet = netMyAction->myRelativeBet;
|
netActionRejected->yourRelativeBet = netMyAction->myRelativeBet;
|
||||||
netActionRejected->rejectionReason = code;
|
netActionRejected->rejectionReason = code;
|
||||||
server->GetLobbyThread().GetSender().Send(session.sessionData, reject);
|
server->GetLobbyThread().GetSender().Send(session, reject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1309,8 +1307,8 @@ ServerGameStateWaitPlayerAction::TimerTimeout(const boost::system::error_code &e
|
|||||||
boost::shared_ptr<PlayerInterface> curPlayer = curGame.getCurrentPlayer();
|
boost::shared_ptr<PlayerInterface> curPlayer = curGame.getCurrentPlayer();
|
||||||
if (!curPlayer)
|
if (!curPlayer)
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_NO_CURRENT_PLAYER, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_NO_CURRENT_PLAYER, 0);
|
||||||
SessionWrapper tmpSession = server->GetSessionManager().GetSessionByUniquePlayerId(curPlayer->getMyUniqueID());
|
boost::shared_ptr<SessionData> tmpSession = server->GetSessionManager().GetSessionByUniquePlayerId(curPlayer->getMyUniqueID());
|
||||||
if (!tmpSession.sessionData)
|
if (!tmpSession)
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_NO_CURRENT_PLAYER, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_NO_CURRENT_PLAYER, 0);
|
||||||
|
|
||||||
// Player did not act fast enough. Act for him.
|
// Player did not act fast enough. Act for him.
|
||||||
@@ -1328,7 +1326,7 @@ ServerGameStateWaitPlayerAction::TimerTimeout(const boost::system::error_code &e
|
|||||||
warning->GetMsg()->present = PokerTHMessage_PR_afkWarningMessage;
|
warning->GetMsg()->present = PokerTHMessage_PR_afkWarningMessage;
|
||||||
AfkWarningMessage_t *netWarning = &warning->GetMsg()->choice.afkWarningMessage;
|
AfkWarningMessage_t *netWarning = &warning->GetMsg()->choice.afkWarningMessage;
|
||||||
netWarning->remainingTimeouts = SERVER_KICK_ACTION_TIMEOUT_REMAINING;
|
netWarning->remainingTimeouts = SERVER_KICK_ACTION_TIMEOUT_REMAINING;
|
||||||
server->GetLobbyThread().GetSender().Send(tmpSession.sessionData, warning);
|
server->GetLobbyThread().GetSender().Send(tmpSession, warning);
|
||||||
} else if (curPlayer->getActionTimeoutCounter() > SERVER_WARNING_ACTION_TIMEOUT_THRESHOLD + SERVER_KICK_ACTION_TIMEOUT_REMAINING) {
|
} else if (curPlayer->getActionTimeoutCounter() > SERVER_WARNING_ACTION_TIMEOUT_THRESHOLD + SERVER_KICK_ACTION_TIMEOUT_REMAINING) {
|
||||||
server->InternalKickPlayer(curPlayer->getMyUniqueID());
|
server->InternalKickPlayer(curPlayer->getMyUniqueID());
|
||||||
}
|
}
|
||||||
@@ -1384,14 +1382,14 @@ ServerGameStateWaitNextHand::Exit(boost::shared_ptr<ServerGame> server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateWaitNextHand::HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session)
|
ServerGameStateWaitNextHand::HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
// Do not accept new sessions in this state.
|
// Do not accept new sessions in this state.
|
||||||
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
server->MoveSessionToLobby(session, NTF_NET_REMOVED_ALREADY_RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerGameStateWaitNextHand::InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet)
|
ServerGameStateWaitNextHand::InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
if (packet->GetMsg()->present == PokerTHMessage_PR_showMyCardsRequestMessage) {
|
if (packet->GetMsg()->present == PokerTHMessage_PR_showMyCardsRequestMessage) {
|
||||||
Game &curGame = server->GetGame();
|
Game &curGame = server->GetGame();
|
||||||
@@ -1399,7 +1397,7 @@ ServerGameStateWaitNextHand::InternalProcessPacket(boost::shared_ptr<ServerGame>
|
|||||||
show->GetMsg()->present = PokerTHMessage_PR_afterHandShowCardsMessage;
|
show->GetMsg()->present = PokerTHMessage_PR_afterHandShowCardsMessage;
|
||||||
|
|
||||||
AfterHandShowCardsMessage_t *netShowCards = &show->GetMsg()->choice.afterHandShowCardsMessage;
|
AfterHandShowCardsMessage_t *netShowCards = &show->GetMsg()->choice.afterHandShowCardsMessage;
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer(curGame.getPlayerByUniqueId(session.playerData->GetUniqueId()));
|
boost::shared_ptr<PlayerInterface> tmpPlayer(curGame.getPlayerByUniqueId(session->GetPlayerData()->GetUniqueId()));
|
||||||
if (tmpPlayer) {
|
if (tmpPlayer) {
|
||||||
SetPlayerResult(netShowCards->playerResult, tmpPlayer);
|
SetPlayerResult(netShowCards->playerResult, tmpPlayer);
|
||||||
server->SendToAllPlayers(show, SessionData::Game);
|
server->SendToAllPlayers(show, SessionData::Game);
|
||||||
|
|||||||
@@ -285,23 +285,23 @@ ServerLobbyThread::AddConnection(boost::shared_ptr<tcp::socket> sock)
|
|||||||
if (!hasClientIp) {
|
if (!hasClientIp) {
|
||||||
// We do not accept sessions if we cannot
|
// We do not accept sessions if we cannot
|
||||||
// retrieve the client address.
|
// retrieve the client address.
|
||||||
SessionError(SessionWrapper(sessionData, boost::shared_ptr<PlayerData>()), ERR_NET_INVALID_SESSION);
|
SessionError(sessionData, ERR_NET_INVALID_SESSION);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// Server is full.
|
// Server is full.
|
||||||
// Gracefully close this session.
|
// Gracefully close this session.
|
||||||
SessionError(SessionWrapper(sessionData, boost::shared_ptr<PlayerData>()), ERR_NET_SERVER_FULL);
|
SessionError(sessionData, ERR_NET_SERVER_FULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::ReAddSession(SessionWrapper session, int reason)
|
ServerLobbyThread::ReAddSession(boost::shared_ptr<SessionData> session, int reason)
|
||||||
{
|
{
|
||||||
if (session.sessionData.get() && session.playerData.get()) {
|
if (session && session->GetPlayerData()) {
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_gamePlayerMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_gamePlayerMessage;
|
||||||
GamePlayerMessage_t *netPlayerMsg = &packet->GetMsg()->choice.gamePlayerMessage;
|
GamePlayerMessage_t *netPlayerMsg = &packet->GetMsg()->choice.gamePlayerMessage;
|
||||||
netPlayerMsg->gameId = session.sessionData->GetGameId();
|
netPlayerMsg->gameId = session->GetGameId();
|
||||||
netPlayerMsg->gamePlayerNotification.present = gamePlayerNotification_PR_removedFromGame;
|
netPlayerMsg->gamePlayerNotification.present = gamePlayerNotification_PR_removedFromGame;
|
||||||
RemovedFromGame_t *removed = &netPlayerMsg->gamePlayerNotification.choice.removedFromGame;
|
RemovedFromGame_t *removed = &netPlayerMsg->gamePlayerNotification.choice.removedFromGame;
|
||||||
|
|
||||||
@@ -325,32 +325,32 @@ ServerLobbyThread::ReAddSession(SessionWrapper session, int reason)
|
|||||||
removed->removedFromGameReason = removedFromGameReason_removedOnRequest;
|
removed->removedFromGameReason = removedFromGameReason_removedOnRequest;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session, packet);
|
||||||
|
|
||||||
HandleReAddedSession(session);
|
HandleReAddedSession(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::MoveSessionToGame(ServerGame &game, SessionWrapper session, bool autoLeave)
|
ServerLobbyThread::MoveSessionToGame(ServerGame &game, boost::shared_ptr<SessionData> session, bool autoLeave)
|
||||||
{
|
{
|
||||||
// Remove session from the lobby.
|
// Remove session from the lobby.
|
||||||
m_sessionManager.RemoveSession(session.sessionData->GetId());
|
m_sessionManager.RemoveSession(session->GetId());
|
||||||
// Session is now in game state.
|
// Session is now in game state.
|
||||||
session.sessionData->SetState(SessionData::Game);
|
session->SetState(SessionData::Game);
|
||||||
// Store it in the list of game sessions.
|
// Store it in the list of game sessions.
|
||||||
m_gameSessionManager.AddSession(session);
|
m_gameSessionManager.AddSession(session);
|
||||||
// Set the game id of the session.
|
// Set the game id of the session.
|
||||||
session.sessionData->SetGameId(game.GetId());
|
session->SetGameId(game.GetId());
|
||||||
// Add session to the game.
|
// Add session to the game.
|
||||||
game.AddSession(session);
|
game.AddSession(session);
|
||||||
// Optionally enable auto leave after game finish.
|
// Optionally enable auto leave after game finish.
|
||||||
if (autoLeave)
|
if (autoLeave)
|
||||||
game.SetPlayerAutoLeaveOnFinish(session.playerData->GetUniqueId());
|
game.SetPlayerAutoLeaveOnFinish(session->GetPlayerData()->GetUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::RemoveSessionFromGame(SessionWrapper session)
|
ServerLobbyThread::RemoveSessionFromGame(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
// Just remove the session. Only for fatal errors.
|
// Just remove the session. Only for fatal errors.
|
||||||
CloseSession(session);
|
CloseSession(session);
|
||||||
@@ -359,11 +359,11 @@ ServerLobbyThread::RemoveSessionFromGame(SessionWrapper session)
|
|||||||
void
|
void
|
||||||
ServerLobbyThread::CloseSession(SessionId sessionId)
|
ServerLobbyThread::CloseSession(SessionId sessionId)
|
||||||
{
|
{
|
||||||
SessionWrapper session = m_sessionManager.GetSessionById(sessionId);
|
boost::shared_ptr<SessionData> session = m_sessionManager.GetSessionById(sessionId);
|
||||||
if (!session.sessionData)
|
if (!session)
|
||||||
session = m_gameSessionManager.GetSessionById(sessionId);
|
session = m_gameSessionManager.GetSessionById(sessionId);
|
||||||
if (session.sessionData) {
|
if (session) {
|
||||||
GameMap::iterator pos = m_gameMap.find(session.sessionData->GetGameId());
|
GameMap::iterator pos = m_gameMap.find(session->GetGameId());
|
||||||
if (pos != m_gameMap.end()) {
|
if (pos != m_gameMap.end()) {
|
||||||
pos->second->ErrorRemoveSession(session);
|
pos->second->ErrorRemoveSession(session);
|
||||||
} else {
|
} else {
|
||||||
@@ -373,25 +373,25 @@ ServerLobbyThread::CloseSession(SessionId sessionId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::CloseSession(SessionWrapper session)
|
ServerLobbyThread::CloseSession(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if (session.sessionData && session.sessionData->GetState() != SessionData::Closed) { // Make this call reentrant.
|
if (session && session->GetState() != SessionData::Closed) { // Make this call reentrant.
|
||||||
LOG_VERBOSE("Closing session #" << session.sessionData->GetId() << ".");
|
LOG_VERBOSE("Closing session #" << session->GetId() << ".");
|
||||||
session.sessionData->SetState(SessionData::Closed);
|
session->SetState(SessionData::Closed);
|
||||||
|
|
||||||
m_sessionManager.RemoveSession(session.sessionData->GetId());
|
m_sessionManager.RemoveSession(session->GetId());
|
||||||
m_gameSessionManager.RemoveSession(session.sessionData->GetId());
|
m_gameSessionManager.RemoveSession(session->GetId());
|
||||||
|
|
||||||
if (session.playerData)
|
if (session->GetPlayerData())
|
||||||
NotifyPlayerLeftLobby(session.playerData->GetUniqueId());
|
NotifyPlayerLeftLobby(session->GetPlayerData()->GetUniqueId());
|
||||||
// Update stats (if needed).
|
// Update stats (if needed).
|
||||||
UpdateStatisticsNumberOfPlayers();
|
UpdateStatisticsNumberOfPlayers();
|
||||||
session.sessionData->SetGameId(0);
|
session->SetGameId(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::ResubscribeLobbyMsg(SessionWrapper session)
|
ServerLobbyThread::ResubscribeLobbyMsg(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
InternalResubscribeMsg(session);
|
InternalResubscribeMsg(session);
|
||||||
}
|
}
|
||||||
@@ -480,21 +480,21 @@ ServerLobbyThread::NotifyReopeningGame(unsigned gameId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleGameRetrievePlayerInfo(SessionWrapper session, const PlayerInfoRequestMessage_t &playerInfoRequest)
|
ServerLobbyThread::HandleGameRetrievePlayerInfo(boost::shared_ptr<SessionData> session, const PlayerInfoRequestMessage_t &playerInfoRequest)
|
||||||
{
|
{
|
||||||
// Someone within a game requested player info.
|
// Someone within a game requested player info.
|
||||||
HandleNetPacketRetrievePlayerInfo(session, playerInfoRequest);
|
HandleNetPacketRetrievePlayerInfo(session, playerInfoRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleGameRetrieveAvatar(SessionWrapper session, const AvatarRequestMessage_t &retrieveAvatar)
|
ServerLobbyThread::HandleGameRetrieveAvatar(boost::shared_ptr<SessionData> session, const AvatarRequestMessage_t &retrieveAvatar)
|
||||||
{
|
{
|
||||||
// Someone within a game requested an avatar.
|
// Someone within a game requested an avatar.
|
||||||
HandleNetPacketRetrieveAvatar(session, retrieveAvatar);
|
HandleNetPacketRetrieveAvatar(session, retrieveAvatar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleChatRequest(SessionWrapper session, const ChatRequestMessage_t &chatRequest)
|
ServerLobbyThread::HandleChatRequest(boost::shared_ptr<SessionData> session, const ChatRequestMessage_t &chatRequest)
|
||||||
{
|
{
|
||||||
// Someone within a game sent a lobby message.
|
// Someone within a game sent a lobby message.
|
||||||
HandleNetPacketChatRequest(session, chatRequest);
|
HandleNetPacketChatRequest(session, chatRequest);
|
||||||
@@ -504,12 +504,12 @@ bool
|
|||||||
ServerLobbyThread::KickPlayerByName(const std::string &playerName)
|
ServerLobbyThread::KickPlayerByName(const std::string &playerName)
|
||||||
{
|
{
|
||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
SessionWrapper session = m_sessionManager.GetSessionByPlayerName(playerName);
|
boost::shared_ptr<SessionData> session = m_sessionManager.GetSessionByPlayerName(playerName);
|
||||||
if (!session.sessionData.get())
|
if (!session)
|
||||||
session = m_gameSessionManager.GetSessionByPlayerName(playerName);
|
session = m_gameSessionManager.GetSessionByPlayerName(playerName);
|
||||||
|
|
||||||
if (session.sessionData.get() && session.playerData.get()) {
|
if (session && session->GetPlayerData()) {
|
||||||
RemovePlayer(session.playerData->GetUniqueId(), ERR_NET_PLAYER_KICKED);
|
RemovePlayer(session->GetPlayerData()->GetUniqueId(), ERR_NET_PLAYER_KICKED);
|
||||||
retVal = true;
|
retVal = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -520,12 +520,12 @@ string
|
|||||||
ServerLobbyThread::GetPlayerIPAddress(const std::string &playerName) const
|
ServerLobbyThread::GetPlayerIPAddress(const std::string &playerName) const
|
||||||
{
|
{
|
||||||
string ipAddress;
|
string ipAddress;
|
||||||
SessionWrapper session = m_sessionManager.GetSessionByPlayerName(playerName);
|
boost::shared_ptr<SessionData> session = m_sessionManager.GetSessionByPlayerName(playerName);
|
||||||
if (!session.sessionData)
|
if (!session)
|
||||||
session = m_gameSessionManager.GetSessionByPlayerName(playerName);
|
session = m_gameSessionManager.GetSessionByPlayerName(playerName);
|
||||||
|
|
||||||
if (session.sessionData && session.playerData)
|
if (session)
|
||||||
ipAddress = session.sessionData->GetClientAddr();
|
ipAddress = session->GetClientAddr();
|
||||||
|
|
||||||
return ipAddress;
|
return ipAddress;
|
||||||
}
|
}
|
||||||
@@ -534,12 +534,12 @@ std::string
|
|||||||
ServerLobbyThread::GetPlayerNameFromId(unsigned playerId) const
|
ServerLobbyThread::GetPlayerNameFromId(unsigned playerId) const
|
||||||
{
|
{
|
||||||
string name;
|
string name;
|
||||||
SessionWrapper session = m_sessionManager.GetSessionByUniquePlayerId(playerId);
|
boost::shared_ptr<SessionData> session = m_sessionManager.GetSessionByUniquePlayerId(playerId);
|
||||||
if (!session.sessionData)
|
if (!session)
|
||||||
session = m_gameSessionManager.GetSessionByUniquePlayerId(playerId);
|
session = m_gameSessionManager.GetSessionByUniquePlayerId(playerId);
|
||||||
|
|
||||||
if (session.sessionData && session.playerData)
|
if (session && session->GetPlayerData())
|
||||||
name = session.playerData->GetName();
|
name = session->GetPlayerData()->GetName();
|
||||||
|
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
@@ -645,9 +645,9 @@ bool
|
|||||||
ServerLobbyThread::SendToLobbyPlayer(unsigned playerId, boost::shared_ptr<NetPacket> packet)
|
ServerLobbyThread::SendToLobbyPlayer(unsigned playerId, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
SessionWrapper tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId);
|
boost::shared_ptr<SessionData> tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId);
|
||||||
if (tmpSession.sessionData) {
|
if (tmpSession) {
|
||||||
GetSender().Send(tmpSession.sessionData, packet);
|
GetSender().Send(tmpSession, packet);
|
||||||
retVal = true;
|
retVal = true;
|
||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
@@ -853,15 +853,11 @@ ServerLobbyThread::InitChatCleaner()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::DispatchPacket(boost::shared_ptr<SessionData> s, boost::shared_ptr<NetPacket> packet)
|
ServerLobbyThread::DispatchPacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
// Find the session.
|
if (session) {
|
||||||
SessionWrapper session = m_sessionManager.GetSessionById(s->GetId());
|
|
||||||
if (!session.sessionData)
|
|
||||||
session = m_gameSessionManager.GetSessionById(s->GetId());
|
|
||||||
if (session.sessionData) {
|
|
||||||
// Retrieve current game, if applicable.
|
// Retrieve current game, if applicable.
|
||||||
boost::shared_ptr<ServerGame> game = InternalGetGameFromId(session.sessionData->GetGameId());
|
boost::shared_ptr<ServerGame> game = InternalGetGameFromId(session->GetGameId());
|
||||||
if (game) {
|
if (game) {
|
||||||
// We need to catch game-specific exceptions, so that they do not affect the server.
|
// We need to catch game-specific exceptions, so that they do not affect the server.
|
||||||
try {
|
try {
|
||||||
@@ -876,13 +872,13 @@ ServerLobbyThread::DispatchPacket(boost::shared_ptr<SessionData> s, boost::share
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandlePacket(SessionWrapper session, boost::shared_ptr<NetPacket> packet)
|
ServerLobbyThread::HandlePacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet)
|
||||||
{
|
{
|
||||||
if (session.sessionData && packet) {
|
if (session && packet) {
|
||||||
if (packet->IsClientActivity())
|
if (packet->IsClientActivity())
|
||||||
session.sessionData->ResetActivityTimer();
|
session->ResetActivityTimer();
|
||||||
|
|
||||||
if (session.sessionData->GetState() == SessionData::Init) {
|
if (session->GetState() == SessionData::Init) {
|
||||||
if (packet->GetMsg()->present == PokerTHMessage_PR_initMessage)
|
if (packet->GetMsg()->present == PokerTHMessage_PR_initMessage)
|
||||||
HandleNetPacketInit(session, packet->GetMsg()->choice.initMessage);
|
HandleNetPacketInit(session, packet->GetMsg()->choice.initMessage);
|
||||||
else if (packet->GetMsg()->present == PokerTHMessage_PR_authMessage) {
|
else if (packet->GetMsg()->present == PokerTHMessage_PR_authMessage) {
|
||||||
@@ -901,7 +897,7 @@ ServerLobbyThread::HandlePacket(SessionWrapper session, boost::shared_ptr<NetPac
|
|||||||
SessionError(session, ERR_SOCK_INVALID_STATE);
|
SessionError(session, ERR_SOCK_INVALID_STATE);
|
||||||
} else
|
} else
|
||||||
SessionError(session, ERR_SOCK_INVALID_STATE);
|
SessionError(session, ERR_SOCK_INVALID_STATE);
|
||||||
} else if (session.sessionData->GetState() == SessionData::ReceivingAvatar) {
|
} else if (session->GetState() == SessionData::ReceivingAvatar) {
|
||||||
if (packet->GetMsg()->present == PokerTHMessage_PR_avatarReplyMessage) {
|
if (packet->GetMsg()->present == PokerTHMessage_PR_avatarReplyMessage) {
|
||||||
AvatarReplyMessage_t *avatarReply = &packet->GetMsg()->choice.avatarReplyMessage;
|
AvatarReplyMessage_t *avatarReply = &packet->GetMsg()->choice.avatarReplyMessage;
|
||||||
if (avatarReply->avatarResult.present == avatarResult_PR_avatarData)
|
if (avatarReply->avatarResult.present == avatarResult_PR_avatarData)
|
||||||
@@ -924,7 +920,7 @@ ServerLobbyThread::HandlePacket(SessionWrapper session, boost::shared_ptr<NetPac
|
|||||||
if (subscriptionRequest->subscriptionAction == subscriptionAction_resubscribeGameList)
|
if (subscriptionRequest->subscriptionAction == subscriptionAction_resubscribeGameList)
|
||||||
InternalResubscribeMsg(session);
|
InternalResubscribeMsg(session);
|
||||||
else
|
else
|
||||||
session.sessionData->ResetWantsLobbyMsg();
|
session->ResetWantsLobbyMsg();
|
||||||
} else if (packet->GetMsg()->present == PokerTHMessage_PR_joinGameRequestMessage) {
|
} else if (packet->GetMsg()->present == PokerTHMessage_PR_joinGameRequestMessage) {
|
||||||
JoinGameRequestMessage_t *joinRequest = &packet->GetMsg()->choice.joinGameRequestMessage;
|
JoinGameRequestMessage_t *joinRequest = &packet->GetMsg()->choice.joinGameRequestMessage;
|
||||||
string password;
|
string password;
|
||||||
@@ -945,9 +941,9 @@ ServerLobbyThread::HandlePacket(SessionWrapper session, boost::shared_ptr<NetPac
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage_t &initMessage)
|
ServerLobbyThread::HandleNetPacketInit(boost::shared_ptr<SessionData> session, const InitMessage_t &initMessage)
|
||||||
{
|
{
|
||||||
LOG_VERBOSE("Received init for session #" << session.sessionData->GetId() << ".");
|
LOG_VERBOSE("Received init for session #" << session->GetId() << ".");
|
||||||
|
|
||||||
// Before any other processing, perform some denial of service and
|
// Before any other processing, perform some denial of service and
|
||||||
// brute force attack prevention by checking whether the user recently sent an
|
// brute force attack prevention by checking whether the user recently sent an
|
||||||
@@ -956,10 +952,10 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage
|
|||||||
bool recentlySentInit = false;
|
bool recentlySentInit = false;
|
||||||
{
|
{
|
||||||
boost::mutex::scoped_lock lock(m_timerClientAddressMapMutex);
|
boost::mutex::scoped_lock lock(m_timerClientAddressMapMutex);
|
||||||
if (m_timerClientAddressMap.find(session.sessionData->GetClientAddr()) != m_timerClientAddressMap.end())
|
if (m_timerClientAddressMap.find(session->GetClientAddr()) != m_timerClientAddressMap.end())
|
||||||
recentlySentInit = true;
|
recentlySentInit = true;
|
||||||
else
|
else
|
||||||
m_timerClientAddressMap[session.sessionData->GetClientAddr()] = boost::timers::portable::microsec_timer();
|
m_timerClientAddressMap[session->GetClientAddr()] = boost::timers::portable::microsec_timer();
|
||||||
}
|
}
|
||||||
if (recentlySentInit) {
|
if (recentlySentInit) {
|
||||||
SessionError(session, ERR_NET_INIT_BLOCKED);
|
SessionError(session, ERR_NET_INIT_BLOCKED);
|
||||||
@@ -969,7 +965,7 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage
|
|||||||
|
|
||||||
// Check the protocol version.
|
// Check the protocol version.
|
||||||
if (initMessage.requestedVersion.major != NET_VERSION_MAJOR
|
if (initMessage.requestedVersion.major != NET_VERSION_MAJOR
|
||||||
|| session.playerData) { // Has this session already sent an init?
|
|| session->GetPlayerData()) { // Has this session already sent an init?
|
||||||
SessionError(session, ERR_NET_VERSION_NOT_SUPPORTED);
|
SessionError(session, ERR_NET_VERSION_NOT_SUPPORTED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1001,9 +997,9 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage
|
|||||||
string inAuthData((const char *)authLogin->clientUserData.buf, authLogin->clientUserData.size);
|
string inAuthData((const char *)authLogin->clientUserData.buf, authLogin->clientUserData.size);
|
||||||
if (authLogin->avatar)
|
if (authLogin->avatar)
|
||||||
memcpy(avatarMD5.GetData(), authLogin->avatar->buf, MD5_DATA_SIZE);
|
memcpy(avatarMD5.GetData(), authLogin->avatar->buf, MD5_DATA_SIZE);
|
||||||
session.sessionData->CreateServerAuthSession(m_authContext);
|
session->CreateServerAuthSession(m_authContext);
|
||||||
if (session.sessionData->AuthStep(1, inAuthData))
|
if (session->AuthStep(1, inAuthData))
|
||||||
playerName = session.sessionData->AuthGetUser();
|
playerName = session->AuthGetUser();
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
else if (initMessage.login.present == login_PR_unauthenticatedLogin) {
|
else if (initMessage.login.present == login_PR_unauthenticatedLogin) {
|
||||||
@@ -1042,7 +1038,7 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Check whether the peer IP address is banned.
|
// Check whether the peer IP address is banned.
|
||||||
if (GetBanManager().IsIPAddressBanned(session.sessionData->GetClientAddr())) {
|
if (GetBanManager().IsIPAddressBanned(session->GetClientAddr())) {
|
||||||
SessionError(session, ERR_NET_PLAYER_BANNED);
|
SessionError(session, ERR_NET_PLAYER_BANNED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1054,8 +1050,8 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage
|
|||||||
tmpPlayerData->SetAvatarMD5(avatarMD5);
|
tmpPlayerData->SetAvatarMD5(avatarMD5);
|
||||||
|
|
||||||
// Set player data for session.
|
// Set player data for session.
|
||||||
m_sessionManager.SetSessionPlayerData(session.sessionData->GetId(), tmpPlayerData);
|
m_sessionManager.SetSessionPlayerData(session->GetId(), tmpPlayerData);
|
||||||
session.playerData = tmpPlayerData;
|
session->SetPlayerData(tmpPlayerData);
|
||||||
|
|
||||||
if (noAuth)
|
if (noAuth)
|
||||||
InitAfterLogin(session);
|
InitAfterLogin(session);
|
||||||
@@ -1064,12 +1060,12 @@ ServerLobbyThread::HandleNetPacketInit(SessionWrapper session, const InitMessage
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketAuthClientResponse(SessionWrapper session, const AuthClientResponse_t &clientResponse)
|
ServerLobbyThread::HandleNetPacketAuthClientResponse(boost::shared_ptr<SessionData> session, const AuthClientResponse_t &clientResponse)
|
||||||
{
|
{
|
||||||
if (session.sessionData && session.playerData && session.sessionData->AuthGetCurStepNum() == 1) {
|
if (session && session->GetPlayerData() && session->AuthGetCurStepNum() == 1) {
|
||||||
string authData = STL_STRING_FROM_OCTET_STRING(clientResponse.clientResponse);
|
string authData = STL_STRING_FROM_OCTET_STRING(clientResponse.clientResponse);
|
||||||
if (session.sessionData->AuthStep(2, authData)) {
|
if (session->AuthStep(2, authData)) {
|
||||||
string outVerification(session.sessionData->AuthGetNextOutMsg());
|
string outVerification(session->AuthGetNextOutMsg());
|
||||||
|
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_authMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_authMessage;
|
||||||
@@ -1080,7 +1076,7 @@ ServerLobbyThread::HandleNetPacketAuthClientResponse(SessionWrapper session, con
|
|||||||
&verification->serverVerification,
|
&verification->serverVerification,
|
||||||
(char *)outVerification.c_str(),
|
(char *)outVerification.c_str(),
|
||||||
outVerification.size());
|
outVerification.size());
|
||||||
GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session, packet);
|
||||||
// The last message is only for server verification.
|
// The last message is only for server verification.
|
||||||
// We are done now, the user has logged in.
|
// We are done now, the user has logged in.
|
||||||
CheckAvatarBlacklist(session);
|
CheckAvatarBlacklist(session);
|
||||||
@@ -1090,9 +1086,9 @@ ServerLobbyThread::HandleNetPacketAuthClientResponse(SessionWrapper session, con
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketAvatarHeader(SessionWrapper session, unsigned /*requestId*/, const AvatarHeader_t &avatarHeader)
|
ServerLobbyThread::HandleNetPacketAvatarHeader(boost::shared_ptr<SessionData> session, unsigned /*requestId*/, const AvatarHeader_t &avatarHeader)
|
||||||
{
|
{
|
||||||
if (session.playerData) {
|
if (session->GetPlayerData()) {
|
||||||
if (avatarHeader.avatarSize >= MIN_AVATAR_FILE_SIZE && avatarHeader.avatarSize <= MAX_AVATAR_FILE_SIZE) {
|
if (avatarHeader.avatarSize >= MIN_AVATAR_FILE_SIZE && avatarHeader.avatarSize <= MAX_AVATAR_FILE_SIZE) {
|
||||||
boost::shared_ptr<AvatarFile> tmpAvatarFile(new AvatarFile);
|
boost::shared_ptr<AvatarFile> tmpAvatarFile(new AvatarFile);
|
||||||
tmpAvatarFile->fileData.reserve(avatarHeader.avatarSize);
|
tmpAvatarFile->fileData.reserve(avatarHeader.avatarSize);
|
||||||
@@ -1100,32 +1096,32 @@ ServerLobbyThread::HandleNetPacketAvatarHeader(SessionWrapper session, unsigned
|
|||||||
tmpAvatarFile->reportedSize = avatarHeader.avatarSize;
|
tmpAvatarFile->reportedSize = avatarHeader.avatarSize;
|
||||||
// Ignore request id for now.
|
// Ignore request id for now.
|
||||||
|
|
||||||
session.playerData->SetNetAvatarFile(tmpAvatarFile);
|
session->GetPlayerData()->SetNetAvatarFile(tmpAvatarFile);
|
||||||
|
|
||||||
// Session is now receiving an avatar.
|
// Session is now receiving an avatar.
|
||||||
session.sessionData->SetState(SessionData::ReceivingAvatar);
|
session->SetState(SessionData::ReceivingAvatar);
|
||||||
} else
|
} else
|
||||||
SessionError(session, ERR_NET_AVATAR_TOO_LARGE);
|
SessionError(session, ERR_NET_AVATAR_TOO_LARGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketUnknownAvatar(SessionWrapper session, unsigned /*requestId*/, const UnknownAvatar_t &/*unknownAvatar*/)
|
ServerLobbyThread::HandleNetPacketUnknownAvatar(boost::shared_ptr<SessionData> session, unsigned /*requestId*/, const UnknownAvatar_t &/*unknownAvatar*/)
|
||||||
{
|
{
|
||||||
if (session.playerData.get()) {
|
if (session->GetPlayerData()) {
|
||||||
// Free memory (just in case).
|
// Free memory (just in case).
|
||||||
session.playerData->SetNetAvatarFile(boost::shared_ptr<AvatarFile>());
|
session->GetPlayerData()->SetNetAvatarFile(boost::shared_ptr<AvatarFile>());
|
||||||
session.playerData->SetAvatarMD5(MD5Buf());
|
session->GetPlayerData()->SetAvatarMD5(MD5Buf());
|
||||||
// Start session.
|
// Start session.
|
||||||
EstablishSession(session);
|
EstablishSession(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketAvatarFile(SessionWrapper session, unsigned /*requestId*/, const AvatarData_t &avatarData)
|
ServerLobbyThread::HandleNetPacketAvatarFile(boost::shared_ptr<SessionData> session, unsigned /*requestId*/, const AvatarData_t &avatarData)
|
||||||
{
|
{
|
||||||
if (session.playerData.get()) {
|
if (session->GetPlayerData()) {
|
||||||
boost::shared_ptr<AvatarFile> tmpAvatar = session.playerData->GetNetAvatarFile();
|
boost::shared_ptr<AvatarFile> tmpAvatar = session->GetPlayerData()->GetNetAvatarFile();
|
||||||
if (tmpAvatar.get() && tmpAvatar->fileData.size() + avatarData.avatarBlock.size <= tmpAvatar->reportedSize) {
|
if (tmpAvatar.get() && tmpAvatar->fileData.size() + avatarData.avatarBlock.size <= tmpAvatar->reportedSize) {
|
||||||
std::copy(&avatarData.avatarBlock.buf[0], &avatarData.avatarBlock.buf[avatarData.avatarBlock.size], back_inserter(tmpAvatar->fileData));
|
std::copy(&avatarData.avatarBlock.buf[0], &avatarData.avatarBlock.buf[avatarData.avatarBlock.size], back_inserter(tmpAvatar->fileData));
|
||||||
}
|
}
|
||||||
@@ -1133,28 +1129,28 @@ ServerLobbyThread::HandleNetPacketAvatarFile(SessionWrapper session, unsigned /*
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketAvatarEnd(SessionWrapper session, unsigned /*requestId*/, const AvatarEnd_t &/*avatarEnd*/)
|
ServerLobbyThread::HandleNetPacketAvatarEnd(boost::shared_ptr<SessionData> session, unsigned /*requestId*/, const AvatarEnd_t &/*avatarEnd*/)
|
||||||
{
|
{
|
||||||
if (session.playerData.get()) {
|
if (session->GetPlayerData()) {
|
||||||
boost::shared_ptr<AvatarFile> tmpAvatar = session.playerData->GetNetAvatarFile();
|
boost::shared_ptr<AvatarFile> tmpAvatar = session->GetPlayerData()->GetNetAvatarFile();
|
||||||
MD5Buf avatarMD5 = session.playerData->GetAvatarMD5();
|
MD5Buf avatarMD5 = session->GetPlayerData()->GetAvatarMD5();
|
||||||
if (!avatarMD5.IsZero() && tmpAvatar.get()) {
|
if (!avatarMD5.IsZero() && tmpAvatar.get()) {
|
||||||
unsigned avatarSize = (unsigned)tmpAvatar->fileData.size();
|
unsigned avatarSize = (unsigned)tmpAvatar->fileData.size();
|
||||||
if (avatarSize == tmpAvatar->reportedSize) {
|
if (avatarSize == tmpAvatar->reportedSize) {
|
||||||
if (!GetAvatarManager().StoreAvatarInCache(avatarMD5, tmpAvatar->fileType, &tmpAvatar->fileData[0], avatarSize, true)) {
|
if (!GetAvatarManager().StoreAvatarInCache(avatarMD5, tmpAvatar->fileType, &tmpAvatar->fileData[0], avatarSize, true)) {
|
||||||
session.playerData->SetAvatarMD5(MD5Buf());
|
session->GetPlayerData()->SetAvatarMD5(MD5Buf());
|
||||||
LOG_ERROR("Failed to store avatar in cache directory.");
|
LOG_ERROR("Failed to store avatar in cache directory.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Free memory.
|
// Free memory.
|
||||||
session.playerData->SetNetAvatarFile(boost::shared_ptr<AvatarFile>());
|
session->GetPlayerData()->SetNetAvatarFile(boost::shared_ptr<AvatarFile>());
|
||||||
// Set avatar file name.
|
// Set avatar file name.
|
||||||
string avatarFileName;
|
string avatarFileName;
|
||||||
if (GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName))
|
if (GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName))
|
||||||
session.playerData->SetAvatarFile(avatarFileName);
|
session->GetPlayerData()->SetAvatarFile(avatarFileName);
|
||||||
// Init finished - start session.
|
// Init finished - start session.
|
||||||
EstablishSession(session);
|
EstablishSession(session);
|
||||||
LOG_MSG("Client \"" << session.sessionData->GetClientAddr() << "\" uploaded avatar \""
|
LOG_MSG("Client \"" << session->GetClientAddr() << "\" uploaded avatar \""
|
||||||
<< boost::filesystem::path(avatarFileName).file_string() << "\".");
|
<< boost::filesystem::path(avatarFileName).file_string() << "\".");
|
||||||
} else
|
} else
|
||||||
SessionError(session, ERR_NET_WRONG_AVATAR_SIZE);
|
SessionError(session, ERR_NET_WRONG_AVATAR_SIZE);
|
||||||
@@ -1163,12 +1159,18 @@ ServerLobbyThread::HandleNetPacketAvatarEnd(SessionWrapper session, unsigned /*r
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(SessionWrapper session, const PlayerInfoRequestMessage_t &playerInfoRequest)
|
ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(boost::shared_ptr<SessionData> session, const PlayerInfoRequestMessage_t &playerInfoRequest)
|
||||||
{
|
{
|
||||||
// Find player in lobby or in a game.
|
// Find player in lobby or in a game.
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer = m_sessionManager.GetSessionByUniquePlayerId(playerInfoRequest.playerId).playerData;
|
boost::shared_ptr<SessionData> tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerInfoRequest.playerId);
|
||||||
if (!tmpPlayer)
|
if (!tmpSession) {
|
||||||
tmpPlayer = m_gameSessionManager.GetSessionByUniquePlayerId(playerInfoRequest.playerId).playerData;
|
tmpSession = m_gameSessionManager.GetSessionByUniquePlayerId(playerInfoRequest.playerId);
|
||||||
|
}
|
||||||
|
boost::shared_ptr<PlayerData> tmpPlayer;
|
||||||
|
if (tmpSession) {
|
||||||
|
tmpPlayer = tmpSession->GetPlayerData();
|
||||||
|
}
|
||||||
|
|
||||||
if (!tmpPlayer) {
|
if (!tmpPlayer) {
|
||||||
boost::mutex::scoped_lock lock(m_computerPlayersMutex);
|
boost::mutex::scoped_lock lock(m_computerPlayersMutex);
|
||||||
PlayerDataMap::const_iterator pos = m_computerPlayers.find(playerInfoRequest.playerId);
|
PlayerDataMap::const_iterator pos = m_computerPlayers.find(playerInfoRequest.playerId);
|
||||||
@@ -1210,11 +1212,11 @@ ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(SessionWrapper session, con
|
|||||||
// Unknown player id - notify client.
|
// Unknown player id - notify client.
|
||||||
netPlayerInfoReply->playerInfoResult.present = playerInfoResult_PR_unknownPlayerInfo;
|
netPlayerInfoReply->playerInfoResult.present = playerInfoResult_PR_unknownPlayerInfo;
|
||||||
}
|
}
|
||||||
GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const AvatarRequestMessage_t &retrieveAvatar)
|
ServerLobbyThread::HandleNetPacketRetrieveAvatar(boost::shared_ptr<SessionData> session, const AvatarRequestMessage_t &retrieveAvatar)
|
||||||
{
|
{
|
||||||
bool avatarFound = false;
|
bool avatarFound = false;
|
||||||
|
|
||||||
@@ -1225,7 +1227,7 @@ ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const A
|
|||||||
NetPacketList tmpPackets;
|
NetPacketList tmpPackets;
|
||||||
if (GetAvatarManager().AvatarFileToNetPackets(tmpFile, retrieveAvatar.requestId, tmpPackets) == 0) {
|
if (GetAvatarManager().AvatarFileToNetPackets(tmpFile, retrieveAvatar.requestId, tmpPackets) == 0) {
|
||||||
avatarFound = true;
|
avatarFound = true;
|
||||||
GetSender().Send(session.sessionData, tmpPackets);
|
GetSender().Send(session, tmpPackets);
|
||||||
} else
|
} else
|
||||||
LOG_ERROR("Failed to read avatar file for network transmission.");
|
LOG_ERROR("Failed to read avatar file for network transmission.");
|
||||||
}
|
}
|
||||||
@@ -1238,14 +1240,14 @@ ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const A
|
|||||||
netAvatarReply->requestId = retrieveAvatar.requestId;
|
netAvatarReply->requestId = retrieveAvatar.requestId;
|
||||||
netAvatarReply->avatarResult.present = avatarResult_PR_unknownAvatar;
|
netAvatarReply->avatarResult.present = avatarResult_PR_unknownAvatar;
|
||||||
|
|
||||||
GetSender().Send(session.sessionData, unknownAvatar);
|
GetSender().Send(session, unknownAvatar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketCreateGame(SessionWrapper session, const std::string &password, bool autoLeave, const JoinNewGame_t &newGame)
|
ServerLobbyThread::HandleNetPacketCreateGame(boost::shared_ptr<SessionData> session, const std::string &password, bool autoLeave, const JoinNewGame_t &newGame)
|
||||||
{
|
{
|
||||||
LOG_VERBOSE("Creating new game, initiated by session #" << session.sessionData->GetId() << ".");
|
LOG_VERBOSE("Creating new game, initiated by session #" << session->GetId() << ".");
|
||||||
|
|
||||||
// Create a new game.
|
// Create a new game.
|
||||||
GameData tmpData;
|
GameData tmpData;
|
||||||
@@ -1254,14 +1256,14 @@ ServerLobbyThread::HandleNetPacketCreateGame(SessionWrapper session, const std::
|
|||||||
unsigned gameId = GetNextGameId();
|
unsigned gameId = GetNextGameId();
|
||||||
|
|
||||||
if (IsGameNameInUse(gameName)) {
|
if (IsGameNameInUse(gameName)) {
|
||||||
SendJoinGameFailed(session.sessionData, gameId, NTF_NET_JOIN_GAME_NAME_IN_USE);
|
SendJoinGameFailed(session, gameId, NTF_NET_JOIN_GAME_NAME_IN_USE);
|
||||||
} else if (GetBanManager().IsBadGameName(gameName)) {
|
} else if (GetBanManager().IsBadGameName(gameName)) {
|
||||||
SendJoinGameFailed(session.sessionData, gameId, NTF_NET_JOIN_GAME_BAD_NAME);
|
SendJoinGameFailed(session, gameId, NTF_NET_JOIN_GAME_BAD_NAME);
|
||||||
} else if (session.playerData->GetRights() == PLAYER_RIGHTS_GUEST
|
} else if (session->GetPlayerData()->GetRights() == PLAYER_RIGHTS_GUEST
|
||||||
&& tmpData.gameType != GAME_TYPE_NORMAL) {
|
&& tmpData.gameType != GAME_TYPE_NORMAL) {
|
||||||
SendJoinGameFailed(session.sessionData, gameId, NTF_NET_JOIN_GUEST_FORBIDDEN);
|
SendJoinGameFailed(session, gameId, NTF_NET_JOIN_GUEST_FORBIDDEN);
|
||||||
} else if (!ServerGame::CheckSettings(tmpData, password, GetServerMode())) {
|
} else if (!ServerGame::CheckSettings(tmpData, password, GetServerMode())) {
|
||||||
SendJoinGameFailed(session.sessionData, gameId, NTF_NET_JOIN_INVALID_SETTINGS);
|
SendJoinGameFailed(session, gameId, NTF_NET_JOIN_INVALID_SETTINGS);
|
||||||
} else {
|
} else {
|
||||||
boost::shared_ptr<ServerGame> game(
|
boost::shared_ptr<ServerGame> game(
|
||||||
new ServerGame(
|
new ServerGame(
|
||||||
@@ -1270,7 +1272,7 @@ ServerLobbyThread::HandleNetPacketCreateGame(SessionWrapper session, const std::
|
|||||||
gameName,
|
gameName,
|
||||||
password,
|
password,
|
||||||
tmpData,
|
tmpData,
|
||||||
session.playerData->GetUniqueId(),
|
session->GetPlayerData()->GetUniqueId(),
|
||||||
GetGui(),
|
GetGui(),
|
||||||
m_serverConfig,
|
m_serverConfig,
|
||||||
*m_serverLog));
|
*m_serverLog));
|
||||||
@@ -1284,7 +1286,7 @@ ServerLobbyThread::HandleNetPacketCreateGame(SessionWrapper session, const std::
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketJoinGame(SessionWrapper session, const std::string &password, bool autoLeave, const JoinExistingGame_t &joinGame)
|
ServerLobbyThread::HandleNetPacketJoinGame(boost::shared_ptr<SessionData> session, const std::string &password, bool autoLeave, const JoinExistingGame_t &joinGame)
|
||||||
{
|
{
|
||||||
// Join an existing game.
|
// Join an existing game.
|
||||||
GameMap::iterator pos = m_gameMap.find(joinGame.gameId);
|
GameMap::iterator pos = m_gameMap.find(joinGame.gameId);
|
||||||
@@ -1292,41 +1294,41 @@ ServerLobbyThread::HandleNetPacketJoinGame(SessionWrapper session, const std::st
|
|||||||
if (pos != m_gameMap.end()) {
|
if (pos != m_gameMap.end()) {
|
||||||
ServerGame &game = *pos->second;
|
ServerGame &game = *pos->second;
|
||||||
const GameData &tmpData = game.GetGameData();
|
const GameData &tmpData = game.GetGameData();
|
||||||
if (session.playerData->GetRights() == PLAYER_RIGHTS_GUEST
|
if (session->GetPlayerData()->GetRights() == PLAYER_RIGHTS_GUEST
|
||||||
&& tmpData.gameType != GAME_TYPE_NORMAL) {
|
&& tmpData.gameType != GAME_TYPE_NORMAL) {
|
||||||
SendJoinGameFailed(session.sessionData, joinGame.gameId, NTF_NET_JOIN_GUEST_FORBIDDEN);
|
SendJoinGameFailed(session, joinGame.gameId, NTF_NET_JOIN_GUEST_FORBIDDEN);
|
||||||
} else if (tmpData.gameType == GAME_TYPE_INVITE_ONLY
|
} else if (tmpData.gameType == GAME_TYPE_INVITE_ONLY
|
||||||
&& !game.IsPlayerInvited(session.playerData->GetUniqueId())) {
|
&& !game.IsPlayerInvited(session->GetPlayerData()->GetUniqueId())) {
|
||||||
SendJoinGameFailed(session.sessionData, joinGame.gameId, NTF_NET_JOIN_NOT_INVITED);
|
SendJoinGameFailed(session, joinGame.gameId, NTF_NET_JOIN_NOT_INVITED);
|
||||||
} else if (!game.CheckPassword(password)) {
|
} else if (!game.CheckPassword(password)) {
|
||||||
SendJoinGameFailed(session.sessionData, joinGame.gameId, NTF_NET_JOIN_INVALID_PASSWORD);
|
SendJoinGameFailed(session, joinGame.gameId, NTF_NET_JOIN_INVALID_PASSWORD);
|
||||||
} else if (tmpData.gameType == GAME_TYPE_RANKING
|
} else if (tmpData.gameType == GAME_TYPE_RANKING
|
||||||
&& session.sessionData->GetClientAddr() != SERVER_ADDRESS_LOCALHOST_STR
|
&& session->GetClientAddr() != SERVER_ADDRESS_LOCALHOST_STR
|
||||||
&& session.sessionData->GetClientAddr() != SERVER_ADDRESS_LOCALHOST_STR_V4V6
|
&& session->GetClientAddr() != SERVER_ADDRESS_LOCALHOST_STR_V4V6
|
||||||
&& session.sessionData->GetClientAddr() != SERVER_ADDRESS_LOCALHOST_STR_V4
|
&& session->GetClientAddr() != SERVER_ADDRESS_LOCALHOST_STR_V4
|
||||||
&& game.IsClientAddressConnected(session.sessionData->GetClientAddr())) {
|
&& game.IsClientAddressConnected(session->GetClientAddr())) {
|
||||||
SendJoinGameFailed(session.sessionData, joinGame.gameId, NTF_NET_JOIN_IP_BLOCKED);
|
SendJoinGameFailed(session, joinGame.gameId, NTF_NET_JOIN_IP_BLOCKED);
|
||||||
} else {
|
} else {
|
||||||
MoveSessionToGame(game, session, autoLeave);
|
MoveSessionToGame(game, session, autoLeave);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
SendJoinGameFailed(session.sessionData, joinGame.gameId, NTF_NET_JOIN_GAME_INVALID);
|
SendJoinGameFailed(session, joinGame.gameId, NTF_NET_JOIN_GAME_INVALID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketChatRequest(SessionWrapper session, const ChatRequestMessage_t &chatRequest)
|
ServerLobbyThread::HandleNetPacketChatRequest(boost::shared_ptr<SessionData> session, const ChatRequestMessage_t &chatRequest)
|
||||||
{
|
{
|
||||||
bool chatSent = false;
|
bool chatSent = false;
|
||||||
// Guests are not allowed to chat.
|
// Guests are not allowed to chat.
|
||||||
if (session.playerData && session.playerData->GetRights() != PLAYER_RIGHTS_GUEST) {
|
if (session->GetPlayerData() && session->GetPlayerData()->GetRights() != PLAYER_RIGHTS_GUEST) {
|
||||||
if (chatRequest.chatRequestType.present == chatRequestType_PR_chatRequestTypeLobby) {
|
if (chatRequest.chatRequestType.present == chatRequestType_PR_chatRequestTypeLobby) {
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_chatMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_chatMessage;
|
||||||
ChatMessage_t *netChat = &packet->GetMsg()->choice.chatMessage;
|
ChatMessage_t *netChat = &packet->GetMsg()->choice.chatMessage;
|
||||||
netChat->chatType.present = chatType_PR_chatTypeLobby;
|
netChat->chatType.present = chatType_PR_chatTypeLobby;
|
||||||
ChatTypeLobby_t *netLobbyChat = &netChat->chatType.choice.chatTypeLobby;
|
ChatTypeLobby_t *netLobbyChat = &netChat->chatType.choice.chatTypeLobby;
|
||||||
netLobbyChat->playerId = session.playerData->GetUniqueId();
|
netLobbyChat->playerId = session->GetPlayerData()->GetUniqueId();
|
||||||
OCTET_STRING_fromBuf(
|
OCTET_STRING_fromBuf(
|
||||||
&netChat->chatText,
|
&netChat->chatText,
|
||||||
(char *)chatRequest.chatText.buf,
|
(char *)chatRequest.chatText.buf,
|
||||||
@@ -1338,24 +1340,24 @@ ServerLobbyThread::HandleNetPacketChatRequest(SessionWrapper session, const Chat
|
|||||||
string chatMsg = STL_STRING_FROM_OCTET_STRING(chatRequest.chatText);
|
string chatMsg = STL_STRING_FROM_OCTET_STRING(chatRequest.chatText);
|
||||||
// Send the message to the chat cleaner bot.
|
// Send the message to the chat cleaner bot.
|
||||||
m_chatCleanerManager->HandleLobbyChatText(
|
m_chatCleanerManager->HandleLobbyChatText(
|
||||||
session.playerData->GetUniqueId(),
|
session->GetPlayerData()->GetUniqueId(),
|
||||||
session.playerData->GetName(),
|
session->GetPlayerData()->GetName(),
|
||||||
chatMsg);
|
chatMsg);
|
||||||
// Send the message to the irc bot.
|
// Send the message to the irc bot.
|
||||||
GetIrcBotCallback().SignalLobbyMessage(
|
GetIrcBotCallback().SignalLobbyMessage(
|
||||||
session.playerData->GetUniqueId(),
|
session->GetPlayerData()->GetUniqueId(),
|
||||||
session.playerData->GetName(),
|
session->GetPlayerData()->GetName(),
|
||||||
chatMsg);
|
chatMsg);
|
||||||
chatSent = true;
|
chatSent = true;
|
||||||
} else if (chatRequest.chatRequestType.present == chatRequestType_PR_chatRequestTypePrivate) {
|
} else if (chatRequest.chatRequestType.present == chatRequestType_PR_chatRequestTypePrivate) {
|
||||||
const ChatRequestTypePrivate_t *netPrivateChat = &chatRequest.chatRequestType.choice.chatRequestTypePrivate;
|
const ChatRequestTypePrivate_t *netPrivateChat = &chatRequest.chatRequestType.choice.chatRequestTypePrivate;
|
||||||
SessionWrapper targetSession = m_sessionManager.GetSessionByUniquePlayerId(netPrivateChat->targetPlayerId);
|
boost::shared_ptr<SessionData> targetSession = m_sessionManager.GetSessionByUniquePlayerId(netPrivateChat->targetPlayerId);
|
||||||
if (!targetSession.sessionData)
|
if (!targetSession)
|
||||||
targetSession = m_gameSessionManager.GetSessionByUniquePlayerId(netPrivateChat->targetPlayerId);
|
targetSession = m_gameSessionManager.GetSessionByUniquePlayerId(netPrivateChat->targetPlayerId);
|
||||||
|
|
||||||
if (targetSession.sessionData && targetSession.playerData) {
|
if (targetSession && targetSession->GetPlayerData()) {
|
||||||
// Only allow private messages to players which are not in running games.
|
// Only allow private messages to players which are not in running games.
|
||||||
unsigned gameId = targetSession.sessionData->GetGameId();
|
unsigned gameId = targetSession->GetGameId();
|
||||||
GameMap::const_iterator pos = m_gameMap.find(gameId);
|
GameMap::const_iterator pos = m_gameMap.find(gameId);
|
||||||
if (pos == m_gameMap.end() || !pos->second->IsRunning()) {
|
if (pos == m_gameMap.end() || !pos->second->IsRunning()) {
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
@@ -1363,12 +1365,12 @@ ServerLobbyThread::HandleNetPacketChatRequest(SessionWrapper session, const Chat
|
|||||||
ChatMessage_t *netChat = &packet->GetMsg()->choice.chatMessage;
|
ChatMessage_t *netChat = &packet->GetMsg()->choice.chatMessage;
|
||||||
netChat->chatType.present = chatType_PR_chatTypePrivate;
|
netChat->chatType.present = chatType_PR_chatTypePrivate;
|
||||||
ChatTypePrivate_t *netPrivateChat = &netChat->chatType.choice.chatTypePrivate;
|
ChatTypePrivate_t *netPrivateChat = &netChat->chatType.choice.chatTypePrivate;
|
||||||
netPrivateChat->playerId = session.playerData->GetUniqueId();
|
netPrivateChat->playerId = session->GetPlayerData()->GetUniqueId();
|
||||||
OCTET_STRING_fromBuf(
|
OCTET_STRING_fromBuf(
|
||||||
&netChat->chatText,
|
&netChat->chatText,
|
||||||
(char *)chatRequest.chatText.buf,
|
(char *)chatRequest.chatText.buf,
|
||||||
chatRequest.chatText.size);
|
chatRequest.chatText.size);
|
||||||
GetSender().Send(targetSession.sessionData, packet);
|
GetSender().Send(targetSession, packet);
|
||||||
chatSent = true;
|
chatSent = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1383,18 +1385,18 @@ ServerLobbyThread::HandleNetPacketChatRequest(SessionWrapper session, const Chat
|
|||||||
&netReject->chatText,
|
&netReject->chatText,
|
||||||
(char *)chatRequest.chatText.buf,
|
(char *)chatRequest.chatText.buf,
|
||||||
chatRequest.chatText.size);
|
chatRequest.chatText.size);
|
||||||
GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleNetPacketRejectGameInvitation(SessionWrapper session, const RejectGameInvitationMessage_t &reject)
|
ServerLobbyThread::HandleNetPacketRejectGameInvitation(boost::shared_ptr<SessionData> session, const RejectGameInvitationMessage_t &reject)
|
||||||
{
|
{
|
||||||
GameMap::iterator pos = m_gameMap.find(reject.gameId);
|
GameMap::iterator pos = m_gameMap.find(reject.gameId);
|
||||||
|
|
||||||
if (pos != m_gameMap.end() && session.playerData) {
|
if (pos != m_gameMap.end() && session->GetPlayerData()) {
|
||||||
ServerGame &game = *pos->second;
|
ServerGame &game = *pos->second;
|
||||||
unsigned tmpPlayerId = session.playerData->GetUniqueId();
|
unsigned tmpPlayerId = session->GetPlayerData()->GetUniqueId();
|
||||||
if (game.IsPlayerInvited(tmpPlayerId)) {
|
if (game.IsPlayerInvited(tmpPlayerId)) {
|
||||||
// If he rejects, he is no longer invited.
|
// If he rejects, he is no longer invited.
|
||||||
game.RemovePlayerInvitation(tmpPlayerId);
|
game.RemovePlayerInvitation(tmpPlayerId);
|
||||||
@@ -1412,11 +1414,11 @@ ServerLobbyThread::HandleNetPacketRejectGameInvitation(SessionWrapper session, c
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::AuthChallenge(SessionWrapper session, const string &secret)
|
ServerLobbyThread::AuthChallenge(boost::shared_ptr<SessionData> session, const string &secret)
|
||||||
{
|
{
|
||||||
if (session.sessionData && session.playerData && session.sessionData->AuthGetCurStepNum() == 1) {
|
if (session && session->GetPlayerData() && session->AuthGetCurStepNum() == 1) {
|
||||||
session.sessionData->AuthSetPassword(secret); // For this auth session.
|
session->AuthSetPassword(secret); // For this auth session.
|
||||||
string outChallenge(session.sessionData->AuthGetNextOutMsg());
|
string outChallenge(session->AuthGetNextOutMsg());
|
||||||
|
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_authMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_authMessage;
|
||||||
@@ -1427,17 +1429,17 @@ ServerLobbyThread::AuthChallenge(SessionWrapper session, const string &secret)
|
|||||||
&challenge->serverChallenge,
|
&challenge->serverChallenge,
|
||||||
(char *)outChallenge.c_str(),
|
(char *)outChallenge.c_str(),
|
||||||
outChallenge.size());
|
outChallenge.size());
|
||||||
GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::CheckAvatarBlacklist(SessionWrapper session)
|
ServerLobbyThread::CheckAvatarBlacklist(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if (session.sessionData && session.playerData) {
|
if (session && session->GetPlayerData()) {
|
||||||
const MD5Buf &avatarMD5 = session.playerData->GetAvatarMD5();
|
const MD5Buf &avatarMD5 = session->GetPlayerData()->GetAvatarMD5();
|
||||||
if (!avatarMD5.IsZero())
|
if (!avatarMD5.IsZero())
|
||||||
m_database->AsyncCheckAvatarBlacklist(session.playerData->GetUniqueId(), avatarMD5.ToString());
|
m_database->AsyncCheckAvatarBlacklist(session->GetPlayerData()->GetUniqueId(), avatarMD5.ToString());
|
||||||
else
|
else
|
||||||
InitAfterLogin(session);
|
InitAfterLogin(session);
|
||||||
}
|
}
|
||||||
@@ -1446,9 +1448,9 @@ ServerLobbyThread::CheckAvatarBlacklist(SessionWrapper session)
|
|||||||
void
|
void
|
||||||
ServerLobbyThread::AvatarBlacklisted(unsigned playerId)
|
ServerLobbyThread::AvatarBlacklisted(unsigned playerId)
|
||||||
{
|
{
|
||||||
SessionWrapper tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId, true);
|
boost::shared_ptr<SessionData> tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId, true);
|
||||||
if (tmpSession.sessionData && tmpSession.playerData) {
|
if (tmpSession && tmpSession->GetPlayerData()) {
|
||||||
tmpSession.playerData->SetAvatarMD5(MD5Buf()); // Reset avatar if blacklisted.
|
tmpSession->GetPlayerData()->SetAvatarMD5(MD5Buf()); // Reset avatar if blacklisted.
|
||||||
InitAfterLogin(tmpSession);
|
InitAfterLogin(tmpSession);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1456,43 +1458,43 @@ ServerLobbyThread::AvatarBlacklisted(unsigned playerId)
|
|||||||
void
|
void
|
||||||
ServerLobbyThread::AvatarOK(unsigned playerId)
|
ServerLobbyThread::AvatarOK(unsigned playerId)
|
||||||
{
|
{
|
||||||
SessionWrapper tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId, true);
|
boost::shared_ptr<SessionData> tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId, true);
|
||||||
InitAfterLogin(tmpSession);
|
InitAfterLogin(tmpSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::InitAfterLogin(SessionWrapper session)
|
ServerLobbyThread::InitAfterLogin(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if (session.sessionData && session.playerData) {
|
if (session && session->GetPlayerData()) {
|
||||||
const MD5Buf &avatarMD5 = session.playerData->GetAvatarMD5();
|
const MD5Buf &avatarMD5 = session->GetPlayerData()->GetAvatarMD5();
|
||||||
string avatarFileName;
|
string avatarFileName;
|
||||||
if (!avatarMD5.IsZero()
|
if (!avatarMD5.IsZero()
|
||||||
&& !GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName)) {
|
&& !GetAvatarManager().GetAvatarFileName(avatarMD5, avatarFileName)) {
|
||||||
RequestPlayerAvatar(session);
|
RequestPlayerAvatar(session);
|
||||||
} else {
|
} else {
|
||||||
if (!avatarFileName.empty())
|
if (!avatarFileName.empty())
|
||||||
session.playerData->SetAvatarFile(avatarFileName);
|
session->GetPlayerData()->SetAvatarFile(avatarFileName);
|
||||||
EstablishSession(session);
|
EstablishSession(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::EstablishSession(SessionWrapper session)
|
ServerLobbyThread::EstablishSession(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if (!session.playerData)
|
if (!session->GetPlayerData())
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||||
|
|
||||||
// Run postlogin for DB
|
// Run postlogin for DB
|
||||||
string tmpAvatarHash;
|
string tmpAvatarHash;
|
||||||
string tmpAvatarType;
|
string tmpAvatarType;
|
||||||
if (!session.playerData->GetAvatarMD5().IsZero()) {
|
if (!session->GetPlayerData()->GetAvatarMD5().IsZero()) {
|
||||||
tmpAvatarHash = session.playerData->GetAvatarMD5().ToString();
|
tmpAvatarHash = session->GetPlayerData()->GetAvatarMD5().ToString();
|
||||||
tmpAvatarType = AvatarManager::GetAvatarFileExtension(AvatarManager::GetAvatarFileType(session.playerData->GetAvatarFile()));
|
tmpAvatarType = AvatarManager::GetAvatarFileExtension(AvatarManager::GetAvatarFileType(session->GetPlayerData()->GetAvatarFile()));
|
||||||
if (!tmpAvatarType.empty())
|
if (!tmpAvatarType.empty())
|
||||||
tmpAvatarType.erase(0, 1); // Only store extension without the "."
|
tmpAvatarType.erase(0, 1); // Only store extension without the "."
|
||||||
}
|
}
|
||||||
m_database->PlayerPostLogin(session.playerData->GetDBId(), tmpAvatarHash, tmpAvatarType);
|
m_database->PlayerPostLogin(session->GetPlayerData()->GetDBId(), tmpAvatarHash, tmpAvatarType);
|
||||||
|
|
||||||
// Send ACK to client.
|
// Send ACK to client.
|
||||||
boost::shared_ptr<NetPacket> ack(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> ack(new NetPacket(NetPacket::Alloc));
|
||||||
@@ -1503,16 +1505,16 @@ ServerLobbyThread::EstablishSession(SessionWrapper session)
|
|||||||
&netInitAck->yourSessionId,
|
&netInitAck->yourSessionId,
|
||||||
(char *)&sessionId,
|
(char *)&sessionId,
|
||||||
boost::uuids::uuid::static_size());
|
boost::uuids::uuid::static_size());
|
||||||
netInitAck->yourPlayerId = session.playerData->GetUniqueId();
|
netInitAck->yourPlayerId = session->GetPlayerData()->GetUniqueId();
|
||||||
GetSender().Send(session.sessionData, ack);
|
GetSender().Send(session, ack);
|
||||||
|
|
||||||
// Send the connected players list to the client.
|
// Send the connected players list to the client.
|
||||||
SendPlayerList(session.sessionData);
|
SendPlayerList(session);
|
||||||
// Send the game list to the client.
|
// Send the game list to the client.
|
||||||
SendGameList(session.sessionData);
|
SendGameList(session);
|
||||||
|
|
||||||
// Session is now established.
|
// Session is now established.
|
||||||
session.sessionData->SetState(SessionData::Established);
|
session->SetState(SessionData::Established);
|
||||||
|
|
||||||
{
|
{
|
||||||
boost::mutex::scoped_lock lock(m_statMutex);
|
boost::mutex::scoped_lock lock(m_statMutex);
|
||||||
@@ -1520,26 +1522,26 @@ ServerLobbyThread::EstablishSession(SessionWrapper session)
|
|||||||
m_statDataChanged = true;
|
m_statDataChanged = true;
|
||||||
}
|
}
|
||||||
// Notify all players.
|
// Notify all players.
|
||||||
NotifyPlayerJoinedLobby(session.playerData->GetUniqueId());
|
NotifyPlayerJoinedLobby(session->GetPlayerData()->GetUniqueId());
|
||||||
|
|
||||||
UpdateStatisticsNumberOfPlayers();
|
UpdateStatisticsNumberOfPlayers();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::AuthenticatePlayer(SessionWrapper session)
|
ServerLobbyThread::AuthenticatePlayer(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if(session.playerData) {
|
if(session->GetPlayerData()) {
|
||||||
m_database->AsyncPlayerLogin(session.playerData->GetUniqueId(), session.playerData->GetName());
|
m_database->AsyncPlayerLogin(session->GetPlayerData()->GetUniqueId(), session->GetPlayerData()->GetName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::UserValid(unsigned playerId, const DBPlayerData &dbPlayerData)
|
ServerLobbyThread::UserValid(unsigned playerId, const DBPlayerData &dbPlayerData)
|
||||||
{
|
{
|
||||||
SessionWrapper tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId, true);
|
boost::shared_ptr<SessionData> tmpSession = m_sessionManager.GetSessionByUniquePlayerId(playerId, true);
|
||||||
if (tmpSession.sessionData && tmpSession.playerData) {
|
if (tmpSession && tmpSession->GetPlayerData()) {
|
||||||
tmpSession.playerData->SetDBId(dbPlayerData.id);
|
tmpSession->GetPlayerData()->SetDBId(dbPlayerData.id);
|
||||||
tmpSession.playerData->SetCountry(dbPlayerData.country);
|
tmpSession->GetPlayerData()->SetCountry(dbPlayerData.country);
|
||||||
this->AuthChallenge(tmpSession, dbPlayerData.secret);
|
this->AuthChallenge(tmpSession, dbPlayerData.secret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1553,16 +1555,16 @@ ServerLobbyThread::UserInvalid(unsigned playerId)
|
|||||||
void
|
void
|
||||||
ServerLobbyThread::SendReportAvatarResult(unsigned byPlayerId, unsigned reportedPlayerId, bool success)
|
ServerLobbyThread::SendReportAvatarResult(unsigned byPlayerId, unsigned reportedPlayerId, bool success)
|
||||||
{
|
{
|
||||||
SessionWrapper session = m_sessionManager.GetSessionByUniquePlayerId(byPlayerId);
|
boost::shared_ptr<SessionData> session = m_sessionManager.GetSessionByUniquePlayerId(byPlayerId);
|
||||||
if (!session.sessionData)
|
if (!session)
|
||||||
session = m_gameSessionManager.GetSessionByUniquePlayerId(byPlayerId);
|
session = m_gameSessionManager.GetSessionByUniquePlayerId(byPlayerId);
|
||||||
if (session.sessionData) {
|
if (session) {
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_reportAvatarAckMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_reportAvatarAckMessage;
|
||||||
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
|
ReportAvatarAckMessage_t *netReportAck = &packet->GetMsg()->choice.reportAvatarAckMessage;
|
||||||
netReportAck->reportedPlayerId = reportedPlayerId;
|
netReportAck->reportedPlayerId = reportedPlayerId;
|
||||||
netReportAck->reportResult = success ? reportResult_avatarReportAccepted : reportResult_avatarReportInvalid;
|
netReportAck->reportResult = success ? reportResult_avatarReportAccepted : reportResult_avatarReportInvalid;
|
||||||
GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1573,20 +1575,20 @@ ServerLobbyThread::UserBlocked(unsigned playerId)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::RequestPlayerAvatar(SessionWrapper session)
|
ServerLobbyThread::RequestPlayerAvatar(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if (!session.playerData)
|
if (!session->GetPlayerData())
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||||
// Ask the client to send its avatar.
|
// Ask the client to send its avatar.
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_avatarRequestMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_avatarRequestMessage;
|
||||||
AvatarRequestMessage_t *netAvatarRequest = &packet->GetMsg()->choice.avatarRequestMessage;
|
AvatarRequestMessage_t *netAvatarRequest = &packet->GetMsg()->choice.avatarRequestMessage;
|
||||||
netAvatarRequest->requestId = session.playerData->GetUniqueId();
|
netAvatarRequest->requestId = session->GetPlayerData()->GetUniqueId();
|
||||||
OCTET_STRING_fromBuf(
|
OCTET_STRING_fromBuf(
|
||||||
&netAvatarRequest->avatar,
|
&netAvatarRequest->avatar,
|
||||||
(char *)session.playerData->GetAvatarMD5().GetData(),
|
(char *)session->GetPlayerData()->GetAvatarMD5().GetData(),
|
||||||
MD5_DATA_SIZE);
|
MD5_DATA_SIZE);
|
||||||
GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1772,8 +1774,8 @@ ServerLobbyThread::InternalRemoveGame(boost::shared_ptr<ServerGame> game)
|
|||||||
void
|
void
|
||||||
ServerLobbyThread::InternalRemovePlayer(unsigned playerId, unsigned errorCode)
|
ServerLobbyThread::InternalRemovePlayer(unsigned playerId, unsigned errorCode)
|
||||||
{
|
{
|
||||||
SessionWrapper session = m_sessionManager.GetSessionByUniquePlayerId(playerId, true);
|
boost::shared_ptr<SessionData> session = m_sessionManager.GetSessionByUniquePlayerId(playerId, true);
|
||||||
if (session.sessionData.get())
|
if (session)
|
||||||
SessionError(session, errorCode);
|
SessionError(session, errorCode);
|
||||||
else {
|
else {
|
||||||
// Scan games for the player.
|
// Scan games for the player.
|
||||||
@@ -1792,12 +1794,12 @@ ServerLobbyThread::InternalRemovePlayer(unsigned playerId, unsigned errorCode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::InternalResubscribeMsg(SessionWrapper session)
|
ServerLobbyThread::InternalResubscribeMsg(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
if (!session.sessionData->WantsLobbyMsg()) {
|
if (!session->WantsLobbyMsg()) {
|
||||||
session.sessionData->SetWantsLobbyMsg();
|
session->SetWantsLobbyMsg();
|
||||||
SendPlayerList(session.sessionData);
|
SendPlayerList(session);
|
||||||
SendGameList(session.sessionData);
|
SendGameList(session);
|
||||||
// Send new statistics information.
|
// Send new statistics information.
|
||||||
/* boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
/* boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_statisticsMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_statisticsMessage;
|
||||||
@@ -1808,20 +1810,20 @@ ServerLobbyThread::InternalResubscribeMsg(SessionWrapper session)
|
|||||||
data->statisticsValue = m_sessionManager.GetRawSessionCount() + m_gameSessionManager.GetRawSessionCount();
|
data->statisticsValue = m_sessionManager.GetRawSessionCount() + m_gameSessionManager.GetRawSessionCount();
|
||||||
ASN_SEQUENCE_ADD(&netStatistics->statisticsData.list, data);
|
ASN_SEQUENCE_ADD(&netStatistics->statisticsData.list, data);
|
||||||
|
|
||||||
GetSender().Send(session.sessionData, packet);*/
|
GetSender().Send(session, packet);*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::HandleReAddedSession(SessionWrapper session)
|
ServerLobbyThread::HandleReAddedSession(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
// Remove session from game session list.
|
// Remove session from game session list.
|
||||||
m_gameSessionManager.RemoveSession(session.sessionData->GetId());
|
m_gameSessionManager.RemoveSession(session->GetId());
|
||||||
|
|
||||||
if (m_sessionManager.GetRawSessionCount() <= SERVER_MAX_NUM_LOBBY_SESSIONS) {
|
if (m_sessionManager.GetRawSessionCount() <= SERVER_MAX_NUM_LOBBY_SESSIONS) {
|
||||||
// Set state (back) to established.
|
// Set state (back) to established.
|
||||||
session.sessionData->SetState(SessionData::Established);
|
session->SetState(SessionData::Established);
|
||||||
session.sessionData->SetGameId(0);
|
session->SetGameId(0);
|
||||||
// Add session to lobby list.
|
// Add session to lobby list.
|
||||||
m_sessionManager.AddSession(session);
|
m_sessionManager.AddSession(session);
|
||||||
} else {
|
} else {
|
||||||
@@ -1831,44 +1833,44 @@ ServerLobbyThread::HandleReAddedSession(SessionWrapper session)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::InternalCheckSessionTimeouts(SessionWrapper session)
|
ServerLobbyThread::InternalCheckSessionTimeouts(boost::shared_ptr<SessionData> session)
|
||||||
{
|
{
|
||||||
bool closeSession = false;
|
bool closeSession = false;
|
||||||
if (session.sessionData.get()) {
|
if (session) {
|
||||||
if (session.sessionData->GetState() == SessionData::Init && session.sessionData->GetAutoDisconnectTimerElapsedSec() >= SERVER_INIT_SESSION_TIMEOUT_SEC) {
|
if (session->GetState() == SessionData::Init && session->GetAutoDisconnectTimerElapsedSec() >= SERVER_INIT_SESSION_TIMEOUT_SEC) {
|
||||||
LOG_VERBOSE("Session init timeout, removing session #" << session.sessionData->GetId() << ".");
|
LOG_VERBOSE("Session init timeout, removing session #" << session->GetId() << ".");
|
||||||
closeSession = true;
|
closeSession = true;
|
||||||
} else if (session.sessionData->GetActivityTimerElapsedSec() >= SERVER_SESSION_ACTIVITY_TIMEOUT_SEC - SERVER_TIMEOUT_WARNING_REMAINING_SEC
|
} else if (session->GetActivityTimerElapsedSec() >= SERVER_SESSION_ACTIVITY_TIMEOUT_SEC - SERVER_TIMEOUT_WARNING_REMAINING_SEC
|
||||||
&& !session.sessionData->HasActivityNoticeBeenSent()) {
|
&& !session->HasActivityNoticeBeenSent()) {
|
||||||
session.sessionData->MarkActivityNotice();
|
session->MarkActivityNotice();
|
||||||
|
|
||||||
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
|
||||||
packet->GetMsg()->present = PokerTHMessage_PR_timeoutWarningMessage;
|
packet->GetMsg()->present = PokerTHMessage_PR_timeoutWarningMessage;
|
||||||
TimeoutWarningMessage_t *netWarning = &packet->GetMsg()->choice.timeoutWarningMessage;
|
TimeoutWarningMessage_t *netWarning = &packet->GetMsg()->choice.timeoutWarningMessage;
|
||||||
netWarning->timeoutReason = timeoutReason_timeoutNoDataReceived;
|
netWarning->timeoutReason = timeoutReason_timeoutNoDataReceived;
|
||||||
netWarning->remainingSeconds = SERVER_TIMEOUT_WARNING_REMAINING_SEC;
|
netWarning->remainingSeconds = SERVER_TIMEOUT_WARNING_REMAINING_SEC;
|
||||||
GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session, packet);
|
||||||
} else if (session.sessionData->GetActivityTimerElapsedSec() >= SERVER_SESSION_ACTIVITY_TIMEOUT_SEC) {
|
} else if (session->GetActivityTimerElapsedSec() >= SERVER_SESSION_ACTIVITY_TIMEOUT_SEC) {
|
||||||
LOG_VERBOSE("Activity timeout, removing session #" << session.sessionData->GetId() << ".");
|
LOG_VERBOSE("Activity timeout, removing session #" << session->GetId() << ".");
|
||||||
closeSession = true;
|
closeSession = true;
|
||||||
} else if (session.sessionData->GetAutoDisconnectTimerElapsedSec() >= SERVER_SESSION_FORCED_TIMEOUT_SEC) {
|
} else if (session->GetAutoDisconnectTimerElapsedSec() >= SERVER_SESSION_FORCED_TIMEOUT_SEC) {
|
||||||
LOG_VERBOSE("Auto disconnect timeout, removing session #" << session.sessionData->GetId() << ".");
|
LOG_VERBOSE("Auto disconnect timeout, removing session #" << session->GetId() << ".");
|
||||||
closeSession = true;
|
closeSession = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (closeSession) {
|
if (closeSession) {
|
||||||
if (session.playerData.get())
|
if (session->GetPlayerData())
|
||||||
RemovePlayer(session.playerData->GetUniqueId(), ERR_NET_SESSION_TIMED_OUT);
|
RemovePlayer(session->GetPlayerData()->GetUniqueId(), ERR_NET_SESSION_TIMED_OUT);
|
||||||
else
|
else
|
||||||
m_sessionManager.RemoveSession(session.sessionData->GetId());
|
m_sessionManager.RemoveSession(session->GetId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::SessionError(SessionWrapper session, int errorCode)
|
ServerLobbyThread::SessionError(boost::shared_ptr<SessionData> session, int errorCode)
|
||||||
{
|
{
|
||||||
if (session.sessionData) {
|
if (session) {
|
||||||
SendError(session.sessionData, errorCode);
|
SendError(session, errorCode);
|
||||||
CloseSession(session);
|
CloseSession(session);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -271,3 +271,18 @@ SessionData::GetAutoDisconnectTimerElapsedSec() const
|
|||||||
boost::mutex::scoped_lock lock(m_dataMutex);
|
boost::mutex::scoped_lock lock(m_dataMutex);
|
||||||
return m_autoDisconnectTimer.elapsed().total_seconds();
|
return m_autoDisconnectTimer.elapsed().total_seconds();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SessionData::SetPlayerData(boost::shared_ptr<PlayerData> player)
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_dataMutex);
|
||||||
|
m_playerData = player;
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::shared_ptr<PlayerData>
|
||||||
|
SessionData::GetPlayerData()
|
||||||
|
{
|
||||||
|
boost::mutex::scoped_lock lock(m_dataMutex);
|
||||||
|
return m_playerData;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,24 +42,18 @@ SessionManager::HasSessions() const
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SessionManager::AddSession(boost::shared_ptr<SessionData> sessionData)
|
SessionManager::AddSession(boost::shared_ptr<SessionData> session)
|
||||||
{
|
|
||||||
AddSession(SessionWrapper(sessionData, boost::shared_ptr<PlayerData>()));
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SessionManager::AddSession(SessionWrapper session)
|
|
||||||
{
|
{
|
||||||
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
||||||
|
|
||||||
SessionMap::iterator pos = m_sessionMap.lower_bound(session.sessionData->GetId());
|
SessionMap::iterator pos = m_sessionMap.lower_bound(session->GetId());
|
||||||
|
|
||||||
// If pos points to a pair whose key is equivalent to the socket, this handle
|
// If pos points to a pair whose key is equivalent to the socket, this handle
|
||||||
// already exists within the list.
|
// already exists within the list.
|
||||||
if (pos != m_sessionMap.end() && session.sessionData->GetId() == pos->first) {
|
if (pos != m_sessionMap.end() && session->GetId() == pos->first) {
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_SOCK_CONN_EXISTS, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_SOCK_CONN_EXISTS, 0);
|
||||||
}
|
}
|
||||||
m_sessionMap.insert(pos, SessionMap::value_type(session.sessionData->GetId(), session));
|
m_sessionMap.insert(pos, SessionMap::value_type(session->GetId(), session));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -69,7 +63,7 @@ SessionManager::SetSessionPlayerData(SessionId session, boost::shared_ptr<Player
|
|||||||
SessionMap::iterator pos = m_sessionMap.find(session);
|
SessionMap::iterator pos = m_sessionMap.find(session);
|
||||||
|
|
||||||
if (pos != m_sessionMap.end())
|
if (pos != m_sessionMap.end())
|
||||||
pos->second.playerData = playerData;
|
pos->second->SetPlayerData(playerData);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@@ -79,10 +73,10 @@ SessionManager::RemoveSession(SessionId session)
|
|||||||
return m_sessionMap.erase(session) == 1;
|
return m_sessionMap.erase(session) == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SessionWrapper
|
boost::shared_ptr<SessionData>
|
||||||
SessionManager::GetSessionById(SessionId id) const
|
SessionManager::GetSessionById(SessionId id) const
|
||||||
{
|
{
|
||||||
SessionWrapper tmpSession;
|
boost::shared_ptr<SessionData> tmpSession;
|
||||||
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
||||||
SessionMap::const_iterator pos = m_sessionMap.find(id);
|
SessionMap::const_iterator pos = m_sessionMap.find(id);
|
||||||
if (pos != m_sessionMap.end())
|
if (pos != m_sessionMap.end())
|
||||||
@@ -90,10 +84,10 @@ SessionManager::GetSessionById(SessionId id) const
|
|||||||
return tmpSession;
|
return tmpSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
SessionWrapper
|
boost::shared_ptr<SessionData>
|
||||||
SessionManager::GetSessionByPlayerName(const string &playerName) const
|
SessionManager::GetSessionByPlayerName(const string &playerName) const
|
||||||
{
|
{
|
||||||
SessionWrapper tmpSession;
|
boost::shared_ptr<SessionData> tmpSession;
|
||||||
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
||||||
|
|
||||||
SessionMap::const_iterator session_i = m_sessionMap.begin();
|
SessionMap::const_iterator session_i = m_sessionMap.begin();
|
||||||
@@ -101,9 +95,9 @@ SessionManager::GetSessionByPlayerName(const string &playerName) const
|
|||||||
|
|
||||||
while (session_i != session_end) {
|
while (session_i != session_end) {
|
||||||
// Check all players which are fully connected.
|
// Check all players which are fully connected.
|
||||||
if (session_i->second.sessionData->GetState() != SessionData::Init) {
|
if (session_i->second->GetState() != SessionData::Init) {
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer(session_i->second.playerData);
|
boost::shared_ptr<PlayerData> tmpPlayer(session_i->second->GetPlayerData());
|
||||||
if (!tmpPlayer.get())
|
if (!tmpPlayer)
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||||
if (tmpPlayer->GetName() == playerName) {
|
if (tmpPlayer->GetName() == playerName) {
|
||||||
tmpSession = session_i->second;
|
tmpSession = session_i->second;
|
||||||
@@ -116,10 +110,10 @@ SessionManager::GetSessionByPlayerName(const string &playerName) const
|
|||||||
return tmpSession;
|
return tmpSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
SessionWrapper
|
boost::shared_ptr<SessionData>
|
||||||
SessionManager::GetSessionByUniquePlayerId(unsigned uniqueId, bool initSessions) const
|
SessionManager::GetSessionByUniquePlayerId(unsigned uniqueId, bool initSessions) const
|
||||||
{
|
{
|
||||||
SessionWrapper tmpSession;
|
boost::shared_ptr<SessionData> tmpSession;
|
||||||
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
||||||
|
|
||||||
SessionMap::const_iterator session_i = m_sessionMap.begin();
|
SessionMap::const_iterator session_i = m_sessionMap.begin();
|
||||||
@@ -127,8 +121,8 @@ SessionManager::GetSessionByUniquePlayerId(unsigned uniqueId, bool initSessions)
|
|||||||
|
|
||||||
while (session_i != session_end) {
|
while (session_i != session_end) {
|
||||||
// Check all players which are fully connected.
|
// Check all players which are fully connected.
|
||||||
if (initSessions || session_i->second.sessionData->GetState() != SessionData::Init) {
|
if (initSessions || session_i->second->GetState() != SessionData::Init) {
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer(session_i->second.playerData);
|
boost::shared_ptr<PlayerData> tmpPlayer(session_i->second->GetPlayerData());
|
||||||
if (tmpPlayer && tmpPlayer->GetUniqueId() == uniqueId) {
|
if (tmpPlayer && tmpPlayer->GetUniqueId() == uniqueId) {
|
||||||
tmpSession = session_i->second;
|
tmpSession = session_i->second;
|
||||||
break;
|
break;
|
||||||
@@ -151,8 +145,8 @@ SessionManager::GetPlayerDataList() const
|
|||||||
|
|
||||||
while (session_i != session_end) {
|
while (session_i != session_end) {
|
||||||
// Get all players in the game.
|
// Get all players in the game.
|
||||||
if (session_i->second.sessionData->GetState() == SessionData::Game) {
|
if (session_i->second->GetState() == SessionData::Game) {
|
||||||
boost::shared_ptr<PlayerData> tmpPlayer(session_i->second.playerData);
|
boost::shared_ptr<PlayerData> tmpPlayer(session_i->second->GetPlayerData());
|
||||||
if (!tmpPlayer.get() || tmpPlayer->GetName().empty())
|
if (!tmpPlayer.get() || tmpPlayer->GetName().empty())
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||||
playerList.push_back(tmpPlayer);
|
playerList.push_back(tmpPlayer);
|
||||||
@@ -173,8 +167,8 @@ SessionManager::GetPlayerIdList(SessionData::State state) const
|
|||||||
|
|
||||||
while (session_i != session_end) {
|
while (session_i != session_end) {
|
||||||
// Get all players in the game.
|
// Get all players in the game.
|
||||||
if (session_i->second.sessionData->GetState() == state) {
|
if (session_i->second->GetState() == state) {
|
||||||
playerList.push_back(session_i->second.playerData->GetUniqueId());
|
playerList.push_back(session_i->second->GetPlayerData()->GetUniqueId());
|
||||||
}
|
}
|
||||||
++session_i;
|
++session_i;
|
||||||
}
|
}
|
||||||
@@ -186,9 +180,9 @@ SessionManager::IsPlayerConnected(const string &playerName) const
|
|||||||
{
|
{
|
||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
|
|
||||||
SessionWrapper tmpSession = GetSessionByPlayerName(playerName);
|
boost::shared_ptr<SessionData> tmpSession = GetSessionByPlayerName(playerName);
|
||||||
|
|
||||||
if (tmpSession.sessionData && tmpSession.playerData)
|
if (tmpSession && tmpSession->GetPlayerData())
|
||||||
retVal = true;
|
retVal = true;
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
@@ -199,9 +193,9 @@ SessionManager::IsPlayerConnected(unsigned uniqueId) const
|
|||||||
{
|
{
|
||||||
bool retVal = false;
|
bool retVal = false;
|
||||||
|
|
||||||
SessionWrapper tmpSession = GetSessionByUniquePlayerId(uniqueId);
|
boost::shared_ptr<SessionData> tmpSession = GetSessionByUniquePlayerId(uniqueId);
|
||||||
|
|
||||||
if (tmpSession.sessionData && tmpSession.playerData)
|
if (tmpSession && tmpSession->GetPlayerData())
|
||||||
retVal = true;
|
retVal = true;
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
@@ -217,7 +211,7 @@ SessionManager::IsClientAddressConnected(const std::string &clientAddress) const
|
|||||||
SessionMap::const_iterator end = m_sessionMap.end();
|
SessionMap::const_iterator end = m_sessionMap.end();
|
||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
if ((*i).second.sessionData->GetClientAddr() == clientAddress) {
|
if ((*i).second->GetClientAddr() == clientAddress) {
|
||||||
retVal = true;
|
retVal = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -227,7 +221,7 @@ SessionManager::IsClientAddressConnected(const std::string &clientAddress) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SessionManager::ForEach(boost::function<void (SessionWrapper)> func)
|
SessionManager::ForEach(boost::function<void (boost::shared_ptr<SessionData>)> func)
|
||||||
{
|
{
|
||||||
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
||||||
|
|
||||||
@@ -252,7 +246,7 @@ SessionManager::CountReadySessions() const
|
|||||||
SessionMap::const_iterator end = m_sessionMap.end();
|
SessionMap::const_iterator end = m_sessionMap.end();
|
||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
if ((*i).second.sessionData->IsReady())
|
if ((*i).second->IsReady())
|
||||||
++counter;
|
++counter;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
@@ -268,7 +262,7 @@ SessionManager::ResetAllReadyFlags()
|
|||||||
SessionMap::iterator end = m_sessionMap.end();
|
SessionMap::iterator end = m_sessionMap.end();
|
||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
(*i).second.sessionData->ResetReadyFlag();
|
(*i).second->ResetReadyFlag();
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -282,7 +276,7 @@ SessionManager::Clear()
|
|||||||
|
|
||||||
boost::system::error_code ec;
|
boost::system::error_code ec;
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
i->second.sessionData->GetAsioSocket()->close(ec);
|
i->second->GetAsioSocket()->close(ec);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
m_sessionMap.clear();
|
m_sessionMap.clear();
|
||||||
@@ -305,7 +299,7 @@ SessionManager::GetEstablishedSessionCount()
|
|||||||
SessionMap::const_iterator end = m_sessionMap.end();
|
SessionMap::const_iterator end = m_sessionMap.end();
|
||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
if ((*i).second.sessionData->GetState() >= SessionData::Established)
|
if ((*i).second->GetState() >= SessionData::Established)
|
||||||
++counter;
|
++counter;
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
@@ -321,12 +315,12 @@ SessionManager::SendToAllSessions(SenderHelper &sender, boost::shared_ptr<NetPac
|
|||||||
SessionMap::iterator end = m_sessionMap.end();
|
SessionMap::iterator end = m_sessionMap.end();
|
||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
if (!i->second.sessionData.get())
|
if (!i->second.get())
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||||
|
|
||||||
// Send each client (with a certain state) a copy of the packet.
|
// Send each client (with a certain state) a copy of the packet.
|
||||||
if (i->second.sessionData->GetState() == state)
|
if (i->second->GetState() == state)
|
||||||
sender.Send(i->second.sessionData, packet);
|
sender.Send(i->second, packet);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -340,12 +334,12 @@ SessionManager::SendLobbyMsgToAllSessions(SenderHelper &sender, boost::shared_pt
|
|||||||
SessionMap::iterator end = m_sessionMap.end();
|
SessionMap::iterator end = m_sessionMap.end();
|
||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
if (!i->second.sessionData.get())
|
if (!i->second.get())
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_INVALID_SESSION, 0);
|
||||||
|
|
||||||
// Send each client (with a certain state) a copy of the packet.
|
// Send each client (with a certain state) a copy of the packet.
|
||||||
if (i->second.sessionData->GetState() == state && i->second.sessionData->WantsLobbyMsg())
|
if (i->second->GetState() == state && i->second->WantsLobbyMsg())
|
||||||
sender.Send(i->second.sessionData, packet);
|
sender.Send(i->second, packet);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -360,9 +354,9 @@ SessionManager::SendToAllButOneSessions(SenderHelper &sender, boost::shared_ptr<
|
|||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
// Send each fully connected client but one a copy of the packet.
|
// Send each fully connected client but one a copy of the packet.
|
||||||
if (i->second.sessionData->GetState() == state)
|
if (i->second->GetState() == state)
|
||||||
if (i->first != except)
|
if (i->first != except)
|
||||||
sender.Send(i->second.sessionData, packet);
|
sender.Send(i->second, packet);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-10
@@ -55,10 +55,10 @@ public:
|
|||||||
DB_id GetDBId() const;
|
DB_id GetDBId() const;
|
||||||
void SetDBId(DB_id newId);
|
void SetDBId(DB_id newId);
|
||||||
|
|
||||||
void AddSession(SessionWrapper session);
|
void AddSession(boost::shared_ptr<SessionData> session);
|
||||||
void RemovePlayer(unsigned playerId, unsigned errorCode);
|
void RemovePlayer(unsigned playerId, unsigned errorCode);
|
||||||
|
|
||||||
void HandlePacket(SessionWrapper session, boost::shared_ptr<NetPacket> packet);
|
void HandlePacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
|
|
||||||
ServerCallback &GetCallback();
|
ServerCallback &GetCallback();
|
||||||
GameState GetCurRound() const;
|
GameState GetCurRound() const;
|
||||||
@@ -117,10 +117,10 @@ protected:
|
|||||||
void InternalEndGame();
|
void InternalEndGame();
|
||||||
|
|
||||||
void InternalKickPlayer(unsigned playerId);
|
void InternalKickPlayer(unsigned playerId);
|
||||||
void InternalAskVoteKick(SessionWrapper byWhom, unsigned playerIdWho, unsigned timeoutSec);
|
void InternalAskVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned playerIdWho, unsigned timeoutSec);
|
||||||
void InternalDenyAskVoteKick(SessionWrapper byWhom, unsigned playerIdWho, DenyKickPlayerReason reason);
|
void InternalDenyAskVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned playerIdWho, DenyKickPlayerReason reason);
|
||||||
void InternalVoteKick(SessionWrapper byWhom, unsigned petitionId, KickVote vote);
|
void InternalVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned petitionId, KickVote vote);
|
||||||
void InternalDenyVoteKick(SessionWrapper byWhom, unsigned petitionId, DenyVoteReason reason);
|
void InternalDenyVoteKick(boost::shared_ptr<SessionData> byWhom, unsigned petitionId, DenyVoteReason reason);
|
||||||
|
|
||||||
PlayerDataList GetFullPlayerDataList() const;
|
PlayerDataList GetFullPlayerDataList() const;
|
||||||
|
|
||||||
@@ -129,11 +129,11 @@ protected:
|
|||||||
bool IsComputerPlayerActive(unsigned playerId) const;
|
bool IsComputerPlayerActive(unsigned playerId) const;
|
||||||
void ResetComputerPlayerList();
|
void ResetComputerPlayerList();
|
||||||
|
|
||||||
void GracefulRemoveSession(SessionWrapper session, int reason);
|
void GracefulRemoveSession(boost::shared_ptr<SessionData> session, int reason);
|
||||||
void RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason);
|
void RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason);
|
||||||
void ErrorRemoveSession(SessionWrapper session);
|
void ErrorRemoveSession(boost::shared_ptr<SessionData> session);
|
||||||
void SessionError(SessionWrapper session, int errorCode);
|
void SessionError(boost::shared_ptr<SessionData> session, int errorCode);
|
||||||
void MoveSessionToLobby(SessionWrapper session, int reason);
|
void MoveSessionToLobby(boost::shared_ptr<SessionData> session, int reason);
|
||||||
|
|
||||||
void RemoveDisconnectedPlayers();
|
void RemoveDisconnectedPlayers();
|
||||||
size_t GetCurNumberOfPlayers() const;
|
size_t GetCurNumberOfPlayers() const;
|
||||||
|
|||||||
+16
-16
@@ -49,10 +49,10 @@ public:
|
|||||||
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> server) = 0;
|
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> server) = 0;
|
||||||
|
|
||||||
// Handling of a new session.
|
// Handling of a new session.
|
||||||
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session) = 0;
|
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session) = 0;
|
||||||
|
|
||||||
// Main processing function of the current state.
|
// Main processing function of the current state.
|
||||||
virtual void ProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet) = 0;
|
virtual void ProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Abstract State: Receiving.
|
// Abstract State: Receiving.
|
||||||
@@ -63,11 +63,11 @@ public:
|
|||||||
|
|
||||||
// Globally handle packets which are allowed in all running states.
|
// Globally handle packets which are allowed in all running states.
|
||||||
// Calls InternalProcess if packet has not been processed.
|
// Calls InternalProcess if packet has not been processed.
|
||||||
virtual void ProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet);
|
virtual void ProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet) = 0;
|
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
// State: Initialization.
|
// State: Initialization.
|
||||||
@@ -83,7 +83,7 @@ public:
|
|||||||
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> server);
|
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> server);
|
||||||
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> server);
|
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> server);
|
||||||
|
|
||||||
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
|
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ServerGameStateInit();
|
ServerGameStateInit();
|
||||||
@@ -97,7 +97,7 @@ protected:
|
|||||||
void TimerAdminTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
void TimerAdminTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
||||||
void SendStartEvent(ServerGame &server, bool fillWithComputerPlayers);
|
void SendStartEvent(ServerGame &server, bool fillWithComputerPlayers);
|
||||||
|
|
||||||
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet);
|
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
|
|
||||||
static boost::shared_ptr<NetPacket> CreateNetPacketPlayerJoined(unsigned gameId, const PlayerData &playerData);
|
static boost::shared_ptr<NetPacket> CreateNetPacketPlayerJoined(unsigned gameId, const PlayerData &playerData);
|
||||||
|
|
||||||
@@ -117,12 +117,12 @@ public:
|
|||||||
|
|
||||||
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
|
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ServerGameStateStartGame();
|
ServerGameStateStartGame();
|
||||||
|
|
||||||
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet);
|
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
||||||
void DoStart(boost::shared_ptr<ServerGame> server);
|
void DoStart(boost::shared_ptr<ServerGame> server);
|
||||||
|
|
||||||
@@ -142,12 +142,12 @@ public:
|
|||||||
|
|
||||||
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
|
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ServerGameStateHand();
|
ServerGameStateHand();
|
||||||
|
|
||||||
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet);
|
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
void TimerLoop(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
void TimerLoop(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
||||||
void EngineLoop(boost::shared_ptr<ServerGame> server);
|
void EngineLoop(boost::shared_ptr<ServerGame> server);
|
||||||
void TimerShowCards(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
void TimerShowCards(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
||||||
@@ -176,12 +176,12 @@ public:
|
|||||||
|
|
||||||
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
|
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ServerGameStateWaitPlayerAction();
|
ServerGameStateWaitPlayerAction();
|
||||||
|
|
||||||
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet);
|
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -200,12 +200,12 @@ public:
|
|||||||
|
|
||||||
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
|
virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ServerGameStateWaitNextHand();
|
ServerGameStateWaitNextHand();
|
||||||
|
|
||||||
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, SessionWrapper session, boost::shared_ptr<NetPacket> packet);
|
virtual void InternalProcessPacket(boost::shared_ptr<ServerGame> server, boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
void TimerTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -225,10 +225,10 @@ public:
|
|||||||
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
virtual void NotifySessionRemoved(boost::shared_ptr<ServerGame> /*server*/) {}
|
||||||
|
|
||||||
// Handling of a new session.
|
// Handling of a new session.
|
||||||
virtual void HandleNewSession(boost::shared_ptr<ServerGame> /*server*/, SessionWrapper /*session*/) {}
|
virtual void HandleNewSession(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/) {}
|
||||||
|
|
||||||
// Main processing function of the current state.
|
// Main processing function of the current state.
|
||||||
virtual void ProcessPacket(boost::shared_ptr<ServerGame> /*server*/, SessionWrapper /*session*/, boost::shared_ptr<NetPacket> /*packet*/) {}
|
virtual void ProcessPacket(boost::shared_ptr<ServerGame> /*server*/, boost::shared_ptr<SessionData> /*session*/, boost::shared_ptr<NetPacket> /*packet*/) {}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
ServerGameStateFinal() {}
|
ServerGameStateFinal() {}
|
||||||
|
|||||||
+32
-32
@@ -61,11 +61,11 @@ public:
|
|||||||
virtual void SignalTermination();
|
virtual void SignalTermination();
|
||||||
|
|
||||||
void AddConnection(boost::shared_ptr<boost::asio::ip::tcp::socket> sock);
|
void AddConnection(boost::shared_ptr<boost::asio::ip::tcp::socket> sock);
|
||||||
void ReAddSession(SessionWrapper session, int reason);
|
void ReAddSession(boost::shared_ptr<SessionData> session, int reason);
|
||||||
void MoveSessionToGame(ServerGame &game, SessionWrapper session, bool autoLeave);
|
void MoveSessionToGame(ServerGame &game, boost::shared_ptr<SessionData> session, bool autoLeave);
|
||||||
void RemoveSessionFromGame(SessionWrapper session);
|
void RemoveSessionFromGame(boost::shared_ptr<SessionData> session);
|
||||||
void SessionError(SessionWrapper session, int errorCode);
|
void SessionError(boost::shared_ptr<SessionData> session, int errorCode);
|
||||||
void ResubscribeLobbyMsg(SessionWrapper session);
|
void ResubscribeLobbyMsg(boost::shared_ptr<SessionData> session);
|
||||||
void NotifyPlayerJoinedLobby(unsigned playerId);
|
void NotifyPlayerJoinedLobby(unsigned playerId);
|
||||||
void NotifyPlayerLeftLobby(unsigned playerId);
|
void NotifyPlayerLeftLobby(unsigned playerId);
|
||||||
void NotifyPlayerJoinedGame(unsigned gameId, unsigned playerId);
|
void NotifyPlayerJoinedGame(unsigned gameId, unsigned playerId);
|
||||||
@@ -75,9 +75,9 @@ public:
|
|||||||
void NotifyReopeningGame(unsigned gameId);
|
void NotifyReopeningGame(unsigned gameId);
|
||||||
|
|
||||||
void DispatchPacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
void DispatchPacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
void HandleGameRetrievePlayerInfo(SessionWrapper session, const PlayerInfoRequestMessage_t &playerInfoRequest);
|
void HandleGameRetrievePlayerInfo(boost::shared_ptr<SessionData> session, const PlayerInfoRequestMessage_t &playerInfoRequest);
|
||||||
void HandleGameRetrieveAvatar(SessionWrapper session, const AvatarRequestMessage_t &retrieveAvatar);
|
void HandleGameRetrieveAvatar(boost::shared_ptr<SessionData> session, const AvatarRequestMessage_t &retrieveAvatar);
|
||||||
void HandleChatRequest(SessionWrapper session, const ChatRequestMessage_t &chatRequest);
|
void HandleChatRequest(boost::shared_ptr<SessionData> session, const ChatRequestMessage_t &chatRequest);
|
||||||
|
|
||||||
bool KickPlayerByName(const std::string &playerName);
|
bool KickPlayerByName(const std::string &playerName);
|
||||||
std::string GetPlayerIPAddress(const std::string &playerName) const;
|
std::string GetPlayerIPAddress(const std::string &playerName) const;
|
||||||
@@ -116,7 +116,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
|
|
||||||
typedef std::deque<boost::shared_ptr<boost::asio::ip::tcp::socket> > ConnectQueue;
|
typedef std::deque<boost::shared_ptr<boost::asio::ip::tcp::socket> > ConnectQueue;
|
||||||
typedef std::list<SessionWrapper> SessionList;
|
typedef std::list<boost::shared_ptr<SessionData>> SessionList;
|
||||||
typedef std::list<SessionId> SessionIdList;
|
typedef std::list<SessionId> SessionIdList;
|
||||||
typedef std::map<SessionId, boost::timers::portable::microsec_timer> TimerSessionMap;
|
typedef std::map<SessionId, boost::timers::portable::microsec_timer> TimerSessionMap;
|
||||||
typedef std::map<unsigned, boost::shared_ptr<ServerGame> > GameMap;
|
typedef std::map<unsigned, boost::shared_ptr<ServerGame> > GameMap;
|
||||||
@@ -131,33 +131,33 @@ protected:
|
|||||||
void ClearAuthContext();
|
void ClearAuthContext();
|
||||||
void InitChatCleaner();
|
void InitChatCleaner();
|
||||||
|
|
||||||
void HandlePacket(SessionWrapper session, boost::shared_ptr<NetPacket> packet);
|
void HandlePacket(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
void HandleNetPacketInit(SessionWrapper session, const InitMessage_t &initMessage);
|
void HandleNetPacketInit(boost::shared_ptr<SessionData> session, const InitMessage_t &initMessage);
|
||||||
void HandleNetPacketAuthClientResponse(SessionWrapper session, const AuthClientResponse_t &clientResponse);
|
void HandleNetPacketAuthClientResponse(boost::shared_ptr<SessionData> session, const AuthClientResponse_t &clientResponse);
|
||||||
void HandleNetPacketAvatarHeader(SessionWrapper session, unsigned requestId, const AvatarHeader_t &avatarHeader);
|
void HandleNetPacketAvatarHeader(boost::shared_ptr<SessionData> session, unsigned requestId, const AvatarHeader_t &avatarHeader);
|
||||||
void HandleNetPacketUnknownAvatar(SessionWrapper session, unsigned requestId, const UnknownAvatar_t &unknownAvatar);
|
void HandleNetPacketUnknownAvatar(boost::shared_ptr<SessionData> session, unsigned requestId, const UnknownAvatar_t &unknownAvatar);
|
||||||
void HandleNetPacketAvatarFile(SessionWrapper session, unsigned requestId, const AvatarData_t &avatarData);
|
void HandleNetPacketAvatarFile(boost::shared_ptr<SessionData> session, unsigned requestId, const AvatarData_t &avatarData);
|
||||||
void HandleNetPacketAvatarEnd(SessionWrapper session, unsigned requestId, const AvatarEnd_t &avatarEnd);
|
void HandleNetPacketAvatarEnd(boost::shared_ptr<SessionData> session, unsigned requestId, const AvatarEnd_t &avatarEnd);
|
||||||
void HandleNetPacketRetrievePlayerInfo(SessionWrapper session, const PlayerInfoRequestMessage_t &playerInfoRequest);
|
void HandleNetPacketRetrievePlayerInfo(boost::shared_ptr<SessionData> session, const PlayerInfoRequestMessage_t &playerInfoRequest);
|
||||||
void HandleNetPacketRetrieveAvatar(SessionWrapper session, const AvatarRequestMessage_t &retrieveAvatar);
|
void HandleNetPacketRetrieveAvatar(boost::shared_ptr<SessionData> session, const AvatarRequestMessage_t &retrieveAvatar);
|
||||||
void HandleNetPacketCreateGame(SessionWrapper session, const std::string &password, bool autoLeave, const JoinNewGame_t &newGame);
|
void HandleNetPacketCreateGame(boost::shared_ptr<SessionData> session, const std::string &password, bool autoLeave, const JoinNewGame_t &newGame);
|
||||||
void HandleNetPacketJoinGame(SessionWrapper session, const std::string &password, bool autoLeave, const JoinExistingGame_t &joinGame);
|
void HandleNetPacketJoinGame(boost::shared_ptr<SessionData> session, const std::string &password, bool autoLeave, const JoinExistingGame_t &joinGame);
|
||||||
void HandleNetPacketChatRequest(SessionWrapper session, const ChatRequestMessage_t &chatRequest);
|
void HandleNetPacketChatRequest(boost::shared_ptr<SessionData> session, const ChatRequestMessage_t &chatRequest);
|
||||||
void HandleNetPacketRejectGameInvitation(SessionWrapper session, const RejectGameInvitationMessage_t &reject);
|
void HandleNetPacketRejectGameInvitation(boost::shared_ptr<SessionData> session, const RejectGameInvitationMessage_t &reject);
|
||||||
// TODO would be better to use state pattern here.
|
// TODO would be better to use state pattern here.
|
||||||
void AuthChallenge(SessionWrapper session, const std::string &secret);
|
void AuthChallenge(boost::shared_ptr<SessionData> session, const std::string &secret);
|
||||||
void CheckAvatarBlacklist(SessionWrapper session);
|
void CheckAvatarBlacklist(boost::shared_ptr<SessionData> session);
|
||||||
void AvatarBlacklisted(unsigned playerId);
|
void AvatarBlacklisted(unsigned playerId);
|
||||||
void AvatarOK(unsigned playerId);
|
void AvatarOK(unsigned playerId);
|
||||||
void InitAfterLogin(SessionWrapper session);
|
void InitAfterLogin(boost::shared_ptr<SessionData> session);
|
||||||
void EstablishSession(SessionWrapper session);
|
void EstablishSession(boost::shared_ptr<SessionData> session);
|
||||||
void AuthenticatePlayer(SessionWrapper session);
|
void AuthenticatePlayer(boost::shared_ptr<SessionData> session);
|
||||||
void UserValid(unsigned playerId, const DBPlayerData &dbPlayerData);
|
void UserValid(unsigned playerId, const DBPlayerData &dbPlayerData);
|
||||||
void UserInvalid(unsigned playerId);
|
void UserInvalid(unsigned playerId);
|
||||||
void UserBlocked(unsigned playerId);
|
void UserBlocked(unsigned playerId);
|
||||||
|
|
||||||
void SendReportAvatarResult(unsigned byPlayerId, unsigned reportedPlayerId, bool success);
|
void SendReportAvatarResult(unsigned byPlayerId, unsigned reportedPlayerId, bool success);
|
||||||
void RequestPlayerAvatar(SessionWrapper session);
|
void RequestPlayerAvatar(boost::shared_ptr<SessionData> session);
|
||||||
void TimerRemoveGame(const boost::system::error_code &ec);
|
void TimerRemoveGame(const boost::system::error_code &ec);
|
||||||
void TimerRemovePlayer(const boost::system::error_code &ec);
|
void TimerRemovePlayer(const boost::system::error_code &ec);
|
||||||
void TimerUpdateClientLoginLock(const boost::system::error_code &ec);
|
void TimerUpdateClientLoginLock(const boost::system::error_code &ec);
|
||||||
@@ -169,16 +169,16 @@ protected:
|
|||||||
void InternalAddGame(boost::shared_ptr<ServerGame> game);
|
void InternalAddGame(boost::shared_ptr<ServerGame> game);
|
||||||
void InternalRemoveGame(boost::shared_ptr<ServerGame> game);
|
void InternalRemoveGame(boost::shared_ptr<ServerGame> game);
|
||||||
void InternalRemovePlayer(unsigned playerId, unsigned errorCode);
|
void InternalRemovePlayer(unsigned playerId, unsigned errorCode);
|
||||||
void InternalResubscribeMsg(SessionWrapper session);
|
void InternalResubscribeMsg(boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
void HandleReAddedSession(SessionWrapper session);
|
void HandleReAddedSession(boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
void InternalCheckSessionTimeouts(SessionWrapper session);
|
void InternalCheckSessionTimeouts(boost::shared_ptr<SessionData> session);
|
||||||
|
|
||||||
void CleanupSessionMap();
|
void CleanupSessionMap();
|
||||||
|
|
||||||
void CloseSession(SessionId sessionId);
|
void CloseSession(SessionId sessionId);
|
||||||
void CloseSession(SessionWrapper session);
|
void CloseSession(boost::shared_ptr<SessionData> session);
|
||||||
void SendError(boost::shared_ptr<SessionData> s, int errorCode);
|
void SendError(boost::shared_ptr<SessionData> s, int errorCode);
|
||||||
void SendJoinGameFailed(boost::shared_ptr<SessionData> s, unsigned gameId, int reason);
|
void SendJoinGameFailed(boost::shared_ptr<SessionData> s, unsigned gameId, int reason);
|
||||||
void SendPlayerList(boost::shared_ptr<SessionData> s);
|
void SendPlayerList(boost::shared_ptr<SessionData> s);
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ struct Gsasl_session;
|
|||||||
class ReceiveBuffer;
|
class ReceiveBuffer;
|
||||||
class SendBuffer;
|
class SendBuffer;
|
||||||
class NetPacket;
|
class NetPacket;
|
||||||
|
class PlayerData;
|
||||||
|
|
||||||
class SessionData : public boost::enable_shared_from_this<SessionData>
|
class SessionData : public boost::enable_shared_from_this<SessionData>
|
||||||
{
|
{
|
||||||
@@ -99,6 +100,9 @@ public:
|
|||||||
void MarkActivityNotice();
|
void MarkActivityNotice();
|
||||||
unsigned GetAutoDisconnectTimerElapsedSec() const;
|
unsigned GetAutoDisconnectTimerElapsedSec() const;
|
||||||
|
|
||||||
|
void SetPlayerData(boost::shared_ptr<PlayerData> player);
|
||||||
|
boost::shared_ptr<PlayerData> GetPlayerData();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SessionData(const SessionData &other);
|
SessionData(const SessionData &other);
|
||||||
SessionData &operator=(const SessionData &other);
|
SessionData &operator=(const SessionData &other);
|
||||||
@@ -122,6 +126,7 @@ private:
|
|||||||
int m_curAuthStep;
|
int m_curAuthStep;
|
||||||
std::string m_nextGsaslMsg;
|
std::string m_nextGsaslMsg;
|
||||||
std::string m_password;
|
std::string m_password;
|
||||||
|
boost::shared_ptr<PlayerData> m_playerData;
|
||||||
|
|
||||||
mutable boost::mutex m_dataMutex;
|
mutable boost::mutex m_dataMutex;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -32,14 +32,6 @@
|
|||||||
class NetPacket;
|
class NetPacket;
|
||||||
class SenderHelper;
|
class SenderHelper;
|
||||||
|
|
||||||
struct SessionWrapper {
|
|
||||||
SessionWrapper() {}
|
|
||||||
SessionWrapper(boost::shared_ptr<SessionData> s, boost::shared_ptr<PlayerData> p)
|
|
||||||
: sessionData(s), playerData(p) {}
|
|
||||||
boost::shared_ptr<SessionData> sessionData;
|
|
||||||
boost::shared_ptr<PlayerData> playerData;
|
|
||||||
};
|
|
||||||
|
|
||||||
class SessionManager
|
class SessionManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -48,14 +40,13 @@ public:
|
|||||||
|
|
||||||
bool HasSessions() const;
|
bool HasSessions() const;
|
||||||
|
|
||||||
void AddSession(boost::shared_ptr<SessionData> sessionData); // new Sessions without player data
|
void AddSession(boost::shared_ptr<SessionData> sessionData);
|
||||||
void AddSession(SessionWrapper session);
|
|
||||||
void SetSessionPlayerData(SessionId session, boost::shared_ptr<PlayerData> playerData);
|
void SetSessionPlayerData(SessionId session, boost::shared_ptr<PlayerData> playerData);
|
||||||
bool RemoveSession(SessionId session);
|
bool RemoveSession(SessionId session);
|
||||||
|
|
||||||
SessionWrapper GetSessionById(SessionId id) const;
|
boost::shared_ptr<SessionData> GetSessionById(SessionId id) const;
|
||||||
SessionWrapper GetSessionByPlayerName(const std::string &playerName) const;
|
boost::shared_ptr<SessionData> GetSessionByPlayerName(const std::string &playerName) const;
|
||||||
SessionWrapper GetSessionByUniquePlayerId(unsigned uniqueId, bool initSessions = false) const;
|
boost::shared_ptr<SessionData> GetSessionByUniquePlayerId(unsigned uniqueId, bool initSessions = false) const;
|
||||||
|
|
||||||
PlayerDataList GetPlayerDataList() const;
|
PlayerDataList GetPlayerDataList() const;
|
||||||
PlayerIdList GetPlayerIdList(SessionData::State state) const;
|
PlayerIdList GetPlayerIdList(SessionData::State state) const;
|
||||||
@@ -63,7 +54,7 @@ public:
|
|||||||
bool IsPlayerConnected(unsigned uniqueId) const;
|
bool IsPlayerConnected(unsigned uniqueId) const;
|
||||||
bool IsClientAddressConnected(const std::string &clientAddress) const;
|
bool IsClientAddressConnected(const std::string &clientAddress) const;
|
||||||
|
|
||||||
void ForEach(boost::function<void (SessionWrapper)> func);
|
void ForEach(boost::function<void (boost::shared_ptr<SessionData>)> func);
|
||||||
|
|
||||||
unsigned CountReadySessions() const;
|
unsigned CountReadySessions() const;
|
||||||
void ResetAllReadyFlags();
|
void ResetAllReadyFlags();
|
||||||
@@ -78,7 +69,7 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
typedef std::map<SessionId, SessionWrapper> SessionMap;
|
typedef std::map<SessionId, boost::shared_ptr<SessionData> > SessionMap;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user