Rewriting sender yet again to fit the new asio design. Polling for new send data is no longer needed, this also reduces lag.
This commit is contained in:
@@ -22,10 +22,10 @@
|
|||||||
#define _CLIENTTHREAD_H_
|
#define _CLIENTTHREAD_H_
|
||||||
|
|
||||||
#include <boost/shared_ptr.hpp>
|
#include <boost/shared_ptr.hpp>
|
||||||
|
#include <boost/asio.hpp>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <core/thread.h>
|
#include <core/thread.h>
|
||||||
#include <net/senderinterface.h>
|
|
||||||
#include <guiinterface.h>
|
#include <guiinterface.h>
|
||||||
#include <serverdata.h>
|
#include <serverdata.h>
|
||||||
#include <playerdata.h>
|
#include <playerdata.h>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
|
|
||||||
class ClientContext;
|
class ClientContext;
|
||||||
class ClientState;
|
class ClientState;
|
||||||
class SenderThread;
|
class SenderHelper;
|
||||||
class ReceiverHelper;
|
class ReceiverHelper;
|
||||||
class DownloaderThread;
|
class DownloaderThread;
|
||||||
class ClientSenderCallback;
|
class ClientSenderCallback;
|
||||||
@@ -127,6 +127,7 @@ protected:
|
|||||||
ClientState &GetState();
|
ClientState &GetState();
|
||||||
void SetState(ClientState &newState);
|
void SetState(ClientState &newState);
|
||||||
|
|
||||||
|
SenderHelper &GetSender();
|
||||||
ReceiverHelper &GetReceiver();
|
ReceiverHelper &GetReceiver();
|
||||||
|
|
||||||
void SetGameId(unsigned id);
|
void SetGameId(unsigned id);
|
||||||
@@ -191,6 +192,7 @@ private:
|
|||||||
GuiInterface &m_gui;
|
GuiInterface &m_gui;
|
||||||
AvatarManager &m_avatarManager;
|
AvatarManager &m_avatarManager;
|
||||||
|
|
||||||
|
boost::shared_ptr<SenderHelper> m_senderHelper;
|
||||||
boost::shared_ptr<ReceiverHelper> m_receiver;
|
boost::shared_ptr<ReceiverHelper> m_receiver;
|
||||||
|
|
||||||
boost::shared_ptr<DownloaderThread> m_avatarDownloader;
|
boost::shared_ptr<DownloaderThread> m_avatarDownloader;
|
||||||
@@ -233,8 +235,6 @@ private:
|
|||||||
mutable boost::mutex m_curStatsMutex;
|
mutable boost::mutex m_curStatsMutex;
|
||||||
ServerStats m_curStats;
|
ServerStats m_curStats;
|
||||||
|
|
||||||
boost::shared_ptr<SenderInterface> m_senderHelper;
|
|
||||||
|
|
||||||
friend class AbstractClientStateReceiving;
|
friend class AbstractClientStateReceiving;
|
||||||
friend class ClientStateInit;
|
friend class ClientStateInit;
|
||||||
friend class ClientStateStartResolve;
|
friend class ClientStateStartResolve;
|
||||||
|
|||||||
@@ -689,7 +689,7 @@ ClientStateStartSession::Process(ClientThread &client)
|
|||||||
boost::shared_ptr<NetPacket> packet(new NetPacketInit);
|
boost::shared_ptr<NetPacket> packet(new NetPacketInit);
|
||||||
((NetPacketInit *)packet.get())->SetData(initData);
|
((NetPacketInit *)packet.get())->SetData(initData);
|
||||||
|
|
||||||
context.GetSessionData()->GetSender().Send(context.GetSessionData(), packet);
|
client.GetSender().Send(context.GetSessionData(), packet);
|
||||||
|
|
||||||
client.SetState(ClientStateWaitSession::Instance());
|
client.SetState(ClientStateWaitSession::Instance());
|
||||||
|
|
||||||
@@ -968,7 +968,7 @@ ClientStateWaitSession::InternalProcess(ClientThread &client, boost::shared_ptr<
|
|||||||
tmpList);
|
tmpList);
|
||||||
|
|
||||||
if (!avatarError)
|
if (!avatarError)
|
||||||
client.GetContext().GetSessionData()->GetSender().Send(client.GetContext().GetSessionData(), tmpList);
|
client.GetSender().Send(client.GetContext().GetSessionData(), tmpList);
|
||||||
else
|
else
|
||||||
throw ClientException(__FILE__, __LINE__, avatarError, 0);
|
throw ClientException(__FILE__, __LINE__, avatarError, 0);
|
||||||
}
|
}
|
||||||
@@ -1120,7 +1120,7 @@ ClientStateSynchronizeStart::Process(ClientThread &client)
|
|||||||
{
|
{
|
||||||
// Acknowledge start.
|
// Acknowledge start.
|
||||||
boost::shared_ptr<NetPacket> startAck(new NetPacketStartEventAck);
|
boost::shared_ptr<NetPacket> startAck(new NetPacketStartEventAck);
|
||||||
client.GetContext().GetSessionData()->GetSender().Send(client.GetContext().GetSessionData(), startAck);
|
client.GetSender().Send(client.GetContext().GetSessionData(), startAck);
|
||||||
// Unsubscribe lobby messages.
|
// Unsubscribe lobby messages.
|
||||||
client.UnsubscribeLobbyMsg();
|
client.UnsubscribeLobbyMsg();
|
||||||
|
|
||||||
|
|||||||
@@ -415,7 +415,6 @@ ClientThread::Main()
|
|||||||
if (IsSessionEstablished())
|
if (IsSessionEstablished())
|
||||||
SendPacketLoop();
|
SendPacketLoop();
|
||||||
m_ioService->poll();
|
m_ioService->poll();
|
||||||
GetContext().GetSessionData()->GetSender().Process();
|
|
||||||
Thread::Msleep(10);
|
Thread::Msleep(10);
|
||||||
}
|
}
|
||||||
} catch (const PokerTHException &e)
|
} catch (const PokerTHException &e)
|
||||||
@@ -446,7 +445,7 @@ ClientThread::SendPacketLoop()
|
|||||||
|
|
||||||
while (i != end)
|
while (i != end)
|
||||||
{
|
{
|
||||||
GetContext().GetSessionData()->GetSender().Send(GetContext().GetSessionData(), *i);
|
GetSender().Send(GetContext().GetSessionData(), *i);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
m_outPacketList.clear();
|
m_outPacketList.clear();
|
||||||
@@ -477,7 +476,7 @@ ClientThread::RequestPlayerInfo(unsigned id, bool requestAvatar)
|
|||||||
NetPacketRetrievePlayerInfo::Data reqData;
|
NetPacketRetrievePlayerInfo::Data reqData;
|
||||||
reqData.playerId = id;
|
reqData.playerId = id;
|
||||||
static_cast<NetPacketRetrievePlayerInfo *>(req.get())->SetData(reqData);
|
static_cast<NetPacketRetrievePlayerInfo *>(req.get())->SetData(reqData);
|
||||||
GetContext().GetSessionData()->GetSender().Send(GetContext().GetSessionData(), req);
|
GetSender().Send(GetContext().GetSessionData(), req);
|
||||||
|
|
||||||
m_playerInfoRequestList.push_back(id);
|
m_playerInfoRequestList.push_back(id);
|
||||||
|
|
||||||
@@ -592,7 +591,7 @@ ClientThread::RetrieveAvatarIfNeeded(unsigned id, const PlayerInfo &info)
|
|||||||
retrieveAvatarData.requestId = id;
|
retrieveAvatarData.requestId = id;
|
||||||
retrieveAvatarData.avatar = info.avatar;
|
retrieveAvatarData.avatar = info.avatar;
|
||||||
static_cast<NetPacketRetrieveAvatar *>(retrieveAvatar.get())->SetData(retrieveAvatarData);
|
static_cast<NetPacketRetrieveAvatar *>(retrieveAvatar.get())->SetData(retrieveAvatarData);
|
||||||
GetContext().GetSessionData()->GetSender().Send(GetContext().GetSessionData(), retrieveAvatar);
|
GetSender().Send(GetContext().GetSessionData(), retrieveAvatar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -688,7 +687,7 @@ ClientThread::UnsubscribeLobbyMsg()
|
|||||||
{
|
{
|
||||||
// Send unsubscribe request.
|
// Send unsubscribe request.
|
||||||
boost::shared_ptr<NetPacket> unsubscr(new NetPacketUnsubscribeGameList);
|
boost::shared_ptr<NetPacket> unsubscr(new NetPacketUnsubscribeGameList);
|
||||||
GetContext().GetSessionData()->GetSender().Send(GetContext().GetSessionData(), unsubscr);
|
GetSender().Send(GetContext().GetSessionData(), unsubscr);
|
||||||
GetContext().SetSubscribeLobbyMsg(false);
|
GetContext().SetSubscribeLobbyMsg(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -702,7 +701,7 @@ ClientThread::ResubscribeLobbyMsg()
|
|||||||
ClearGameInfoMap();
|
ClearGameInfoMap();
|
||||||
// Send resubscribe request.
|
// Send resubscribe request.
|
||||||
boost::shared_ptr<NetPacket> resubscr(new NetPacketResubscribeGameList);
|
boost::shared_ptr<NetPacket> resubscr(new NetPacketResubscribeGameList);
|
||||||
GetContext().GetSessionData()->GetSender().Send(GetContext().GetSessionData(), resubscr);
|
GetSender().Send(GetContext().GetSessionData(), resubscr);
|
||||||
GetContext().SetSubscribeLobbyMsg(true);
|
GetContext().SetSubscribeLobbyMsg(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -737,7 +736,6 @@ ClientThread::CreateContextSession()
|
|||||||
GetContext().SetSessionData(boost::shared_ptr<SessionData>(new SessionData(
|
GetContext().SetSessionData(boost::shared_ptr<SessionData>(new SessionData(
|
||||||
newSock,
|
newSock,
|
||||||
SESSION_ID_GENERIC,
|
SESSION_ID_GENERIC,
|
||||||
m_senderHelper,
|
|
||||||
*m_senderCallback)));
|
*m_senderCallback)));
|
||||||
validSocket = true;
|
validSocket = true;
|
||||||
} catch (...)
|
} catch (...)
|
||||||
@@ -760,10 +758,17 @@ ClientThread::SetState(ClientState &newState)
|
|||||||
m_curState = &newState;
|
m_curState = &newState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SenderHelper &
|
||||||
|
ClientThread::GetSender()
|
||||||
|
{
|
||||||
|
assert(m_senderHelper);
|
||||||
|
return *m_senderHelper;
|
||||||
|
}
|
||||||
|
|
||||||
ReceiverHelper &
|
ReceiverHelper &
|
||||||
ClientThread::GetReceiver()
|
ClientThread::GetReceiver()
|
||||||
{
|
{
|
||||||
assert(m_receiver.get());
|
assert(m_receiver);
|
||||||
return *m_receiver;
|
return *m_receiver;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -118,12 +118,13 @@ SenderHelper::Send(boost::shared_ptr<SessionData> session, boost::shared_ptr<Net
|
|||||||
// Second: Add packet to specific queue.
|
// Second: Add packet to specific queue.
|
||||||
boost::mutex::scoped_lock lock(tmpManager->dataMutex);
|
boost::mutex::scoped_lock lock(tmpManager->dataMutex);
|
||||||
if (tmpManager->list.size() < SEND_QUEUE_SIZE)
|
if (tmpManager->list.size() < SEND_QUEUE_SIZE)
|
||||||
|
{
|
||||||
tmpManager->list.push_back(packet);
|
tmpManager->list.push_back(packet);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
{
|
{
|
||||||
// Third: Update notification list.
|
// Third: Activate async send, if needed.
|
||||||
boost::mutex::scoped_lock lock(m_changedSessionsMutex);
|
tmpManager->AsyncSendNextPacket();
|
||||||
m_changedSessions.push_back(session->GetId());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -143,7 +144,7 @@ SenderHelper::Send(boost::shared_ptr<SessionData> session, const NetPacketList &
|
|||||||
tmpManager = pos->second;
|
tmpManager = pos->second;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
// Second: Add packet to specific queue.
|
// Second: Add packets to specific queue.
|
||||||
boost::mutex::scoped_lock lock(tmpManager->dataMutex);
|
boost::mutex::scoped_lock lock(tmpManager->dataMutex);
|
||||||
if (tmpManager->list.size() + packetList.size() <= SEND_QUEUE_SIZE)
|
if (tmpManager->list.size() + packetList.size() <= SEND_QUEUE_SIZE)
|
||||||
{
|
{
|
||||||
@@ -157,9 +158,8 @@ SenderHelper::Send(boost::shared_ptr<SessionData> session, const NetPacketList &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
// Third: Update notification list.
|
// Third: Activate async send, if needed.
|
||||||
boost::mutex::scoped_lock lock(m_changedSessionsMutex);
|
tmpManager->AsyncSendNextPacket();
|
||||||
m_changedSessions.push_back(session->GetId());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -167,71 +167,10 @@ SenderHelper::Send(boost::shared_ptr<SessionData> session, const NetPacketList &
|
|||||||
void
|
void
|
||||||
SenderHelper::SignalSessionTerminated(unsigned sessionId)
|
SenderHelper::SignalSessionTerminated(unsigned sessionId)
|
||||||
{
|
{
|
||||||
boost::mutex::scoped_lock lock(m_removedSessionsMutex);
|
|
||||||
m_removedSessions.push_back(sessionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SenderHelper::Process()
|
|
||||||
{
|
|
||||||
// Close sessions if they were destructed.
|
|
||||||
{
|
|
||||||
boost::mutex::scoped_lock lock(m_removedSessionsMutex);
|
|
||||||
if (!m_removedSessions.empty())
|
|
||||||
{
|
|
||||||
SessionIdList newRemovedSessions;
|
|
||||||
SessionIdList::iterator i = m_removedSessions.begin();
|
|
||||||
SessionIdList::iterator end = m_removedSessions.end();
|
|
||||||
|
|
||||||
boost::mutex::scoped_lock lock(m_sendQueueMapMutex);
|
boost::mutex::scoped_lock lock(m_sendQueueMapMutex);
|
||||||
|
|
||||||
while (i != end)
|
|
||||||
{
|
|
||||||
SendQueueMap::iterator pos = m_sendQueueMap.find(*i);
|
|
||||||
if (pos != m_sendQueueMap.end())
|
|
||||||
{
|
|
||||||
// Remove session if no write is in progress, else wait.
|
|
||||||
bool shouldDelete;
|
|
||||||
{
|
|
||||||
boost::mutex::scoped_lock lock(pos->second->dataMutex);
|
|
||||||
shouldDelete = (!pos->second->writeInProgress && pos->second->list.empty());
|
|
||||||
}
|
|
||||||
if (shouldDelete)
|
|
||||||
m_sendQueueMap.erase(pos);
|
|
||||||
else
|
|
||||||
newRemovedSessions.push_back(*i);
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
m_removedSessions = newRemovedSessions;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Iterate through all changed sessions, and send data if needed.
|
|
||||||
bool sessionValid;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
sessionValid = false;
|
|
||||||
unsigned sessionId = 0;
|
|
||||||
|
|
||||||
{
|
|
||||||
boost::mutex::scoped_lock lock(m_changedSessionsMutex);
|
|
||||||
if (!m_changedSessions.empty())
|
|
||||||
{
|
|
||||||
sessionId = m_changedSessions.front();
|
|
||||||
m_changedSessions.pop_front();
|
|
||||||
sessionValid = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
boost::shared_ptr<SendDataManager> tmpManager;
|
|
||||||
if (sessionValid)
|
|
||||||
{
|
|
||||||
boost::mutex::scoped_lock lock(m_sendQueueMapMutex);
|
|
||||||
SendQueueMap::iterator pos = m_sendQueueMap.find(sessionId);
|
SendQueueMap::iterator pos = m_sendQueueMap.find(sessionId);
|
||||||
if (pos != m_sendQueueMap.end())
|
if (pos != m_sendQueueMap.end())
|
||||||
tmpManager = pos->second;
|
m_sendQueueMap.erase(pos);
|
||||||
}
|
|
||||||
if (tmpManager)
|
|
||||||
tmpManager->AsyncSendNextPacket();
|
|
||||||
} while (sessionValid);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ ServerGame::GetCurRound() const
|
|||||||
void
|
void
|
||||||
ServerGame::SendToAllPlayers(boost::shared_ptr<NetPacket> packet, SessionData::State state)
|
ServerGame::SendToAllPlayers(boost::shared_ptr<NetPacket> packet, SessionData::State state)
|
||||||
{
|
{
|
||||||
GetSessionManager().SendToAllSessions(packet, state);
|
GetSessionManager().SendToAllSessions(GetLobbyThread().GetSender(), packet, state);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -314,7 +314,7 @@ ServerGame::InternalDenyAskVoteKick(SessionWrapper byWhom, unsigned playerIdWho,
|
|||||||
denyPetitionData.playerId = playerIdWho;
|
denyPetitionData.playerId = playerIdWho;
|
||||||
denyPetitionData.denyReason = reason;
|
denyPetitionData.denyReason = reason;
|
||||||
static_cast<NetPacketAskKickPlayerDenied *>(denyPetition.get())->SetData(denyPetitionData);
|
static_cast<NetPacketAskKickPlayerDenied *>(denyPetition.get())->SetData(denyPetitionData);
|
||||||
byWhom.sessionData->GetSender().Send(byWhom.sessionData, denyPetition);
|
GetLobbyThread().GetSender().Send(byWhom.sessionData, denyPetition);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -363,7 +363,7 @@ ServerGame::InternalDenyVoteKick(SessionWrapper byWhom, unsigned petitionId, Den
|
|||||||
denyVoteData.petitionId = petitionId;
|
denyVoteData.petitionId = petitionId;
|
||||||
denyVoteData.denyReason = reason;
|
denyVoteData.denyReason = reason;
|
||||||
static_cast<NetPacketVoteKickPlayerDenied *>(denyVote.get())->SetData(denyVoteData);
|
static_cast<NetPacketVoteKickPlayerDenied *>(denyVote.get())->SetData(denyVoteData);
|
||||||
byWhom.sessionData->GetSender().Send(byWhom.sessionData, denyVote);
|
GetLobbyThread().GetSender().Send(byWhom.sessionData, denyVote);
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerDataList
|
PlayerDataList
|
||||||
@@ -543,7 +543,7 @@ ServerGame::RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason)
|
|||||||
NetPacketGameAdminChanged::Data adminChangedData;
|
NetPacketGameAdminChanged::Data adminChangedData;
|
||||||
adminChangedData.playerId = newAdmin->GetUniqueId(); // Choose next player as admin.
|
adminChangedData.playerId = newAdmin->GetUniqueId(); // Choose next player as admin.
|
||||||
static_cast<NetPacketGameAdminChanged *>(adminChanged.get())->SetData(adminChangedData);
|
static_cast<NetPacketGameAdminChanged *>(adminChanged.get())->SetData(adminChangedData);
|
||||||
GetSessionManager().SendToAllSessions(adminChanged, SessionData::Game);
|
GetSessionManager().SendToAllSessions(GetLobbyThread().GetSender(), adminChanged, SessionData::Game);
|
||||||
|
|
||||||
GetLobbyThread().NotifyGameAdminChanged(GetId(), newAdmin->GetUniqueId());
|
GetLobbyThread().NotifyGameAdminChanged(GetId(), newAdmin->GetUniqueId());
|
||||||
}
|
}
|
||||||
@@ -557,7 +557,7 @@ ServerGame::RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason)
|
|||||||
thisPlayerLeftData.playerId = player->GetUniqueId();
|
thisPlayerLeftData.playerId = player->GetUniqueId();
|
||||||
thisPlayerLeftData.removeReason = reason;
|
thisPlayerLeftData.removeReason = reason;
|
||||||
static_cast<NetPacketPlayerLeft *>(thisPlayerLeft.get())->SetData(thisPlayerLeftData);
|
static_cast<NetPacketPlayerLeft *>(thisPlayerLeft.get())->SetData(thisPlayerLeftData);
|
||||||
GetSessionManager().SendToAllSessions(thisPlayerLeft, SessionData::Game);
|
GetSessionManager().SendToAllSessions(GetLobbyThread().GetSender(), thisPlayerLeft, SessionData::Game);
|
||||||
|
|
||||||
GetLobbyThread().NotifyPlayerLeftGame(GetId(), player->GetUniqueId());
|
GetLobbyThread().NotifyPlayerLeftGame(GetId(), player->GetUniqueId());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -130,94 +130,6 @@ static void SendNewRoundCards(ServerGame &server, Game &curGame, int state)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void StartNewHand(ServerGame &server)
|
|
||||||
{
|
|
||||||
// Initialize hand.
|
|
||||||
Game &curGame = server.GetGame();
|
|
||||||
curGame.initHand();
|
|
||||||
|
|
||||||
// HACK: Skip GUI notification run
|
|
||||||
curGame.getCurrentHand()->getFlop()->skipFirstRunGui();
|
|
||||||
curGame.getCurrentHand()->getTurn()->skipFirstRunGui();
|
|
||||||
curGame.getCurrentHand()->getRiver()->skipFirstRunGui();
|
|
||||||
|
|
||||||
// Consider all players, even inactive.
|
|
||||||
PlayerListIterator i = curGame.getSeatsList()->begin();
|
|
||||||
PlayerListIterator end = curGame.getSeatsList()->end();
|
|
||||||
|
|
||||||
// Send cards to all players.
|
|
||||||
while (i != end)
|
|
||||||
{
|
|
||||||
// also send to inactive players, but not to disconnected players.
|
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
|
|
||||||
if (tmpPlayer->getNetSessionData().get())
|
|
||||||
{
|
|
||||||
int cards[2];
|
|
||||||
tmpPlayer->getMyCards(cards);
|
|
||||||
boost::shared_ptr<NetPacket> notifyCards(new NetPacketHandStart);
|
|
||||||
NetPacketHandStart::Data handStartData;
|
|
||||||
handStartData.yourCards[0] = static_cast<unsigned>(cards[0]);
|
|
||||||
handStartData.yourCards[1] = static_cast<unsigned>(cards[1]);
|
|
||||||
handStartData.smallBlind = curGame.getCurrentHand()->getSmallBlind();
|
|
||||||
static_cast<NetPacketHandStart *>(notifyCards.get())->SetData(handStartData);
|
|
||||||
|
|
||||||
tmpPlayer->getNetSessionData()->GetSender().Send(tmpPlayer->getNetSessionData(), notifyCards);
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Start hand.
|
|
||||||
curGame.startHand();
|
|
||||||
|
|
||||||
// Auto small blind / big blind at the beginning of hand.
|
|
||||||
i = curGame.getActivePlayerList()->begin();
|
|
||||||
end = curGame.getActivePlayerList()->end();
|
|
||||||
|
|
||||||
while (i != end)
|
|
||||||
{
|
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
|
|
||||||
if (tmpPlayer->getMyButton() == BUTTON_SMALL_BLIND)
|
|
||||||
{
|
|
||||||
boost::shared_ptr<NetPacket> notifySmallBlind(new NetPacketPlayersActionDone);
|
|
||||||
NetPacketPlayersActionDone::Data actionDoneData;
|
|
||||||
actionDoneData.gameState = GAME_STATE_PREFLOP_SMALL_BLIND;
|
|
||||||
actionDoneData.playerId = tmpPlayer->getMyUniqueID();
|
|
||||||
actionDoneData.playerAction = (PlayerAction)tmpPlayer->getMyAction();
|
|
||||||
actionDoneData.totalPlayerBet = tmpPlayer->getMySet();
|
|
||||||
actionDoneData.playerMoney = tmpPlayer->getMyCash();
|
|
||||||
actionDoneData.highestSet = server.GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet();
|
|
||||||
actionDoneData.minimumRaise = server.GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise();
|
|
||||||
static_cast<NetPacketPlayersActionDone *>(notifySmallBlind.get())->SetData(actionDoneData);
|
|
||||||
server.SendToAllPlayers(notifySmallBlind, SessionData::Game);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = curGame.getActivePlayerList()->begin();
|
|
||||||
end = curGame.getActivePlayerList()->end();
|
|
||||||
while (i != end)
|
|
||||||
{
|
|
||||||
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
|
|
||||||
if (tmpPlayer->getMyButton() == BUTTON_BIG_BLIND)
|
|
||||||
{
|
|
||||||
boost::shared_ptr<NetPacket> notifyBigBlind(new NetPacketPlayersActionDone);
|
|
||||||
NetPacketPlayersActionDone::Data actionDoneData;
|
|
||||||
actionDoneData.gameState = GAME_STATE_PREFLOP_BIG_BLIND;
|
|
||||||
actionDoneData.playerId = tmpPlayer->getMyUniqueID();
|
|
||||||
actionDoneData.playerAction = (PlayerAction)tmpPlayer->getMyAction();
|
|
||||||
actionDoneData.totalPlayerBet = tmpPlayer->getMySet();
|
|
||||||
actionDoneData.playerMoney = tmpPlayer->getMyCash();
|
|
||||||
actionDoneData.highestSet = server.GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet();
|
|
||||||
actionDoneData.minimumRaise = server.GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise();
|
|
||||||
static_cast<NetPacketPlayersActionDone *>(notifyBigBlind.get())->SetData(actionDoneData);
|
|
||||||
server.SendToAllPlayers(notifyBigBlind, SessionData::Game);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void PerformPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInterface> player, PlayerAction action, int bet)
|
static void PerformPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInterface> player, PlayerAction action, int bet)
|
||||||
{
|
{
|
||||||
Game &curGame = server.GetGame();
|
Game &curGame = server.GetGame();
|
||||||
@@ -432,7 +344,7 @@ ServerGameStateInit::HandleNewSession(ServerGame &server, SessionWrapper session
|
|||||||
joinGameAckData.prights = session.playerData->GetRights();
|
joinGameAckData.prights = session.playerData->GetRights();
|
||||||
joinGameAckData.gameData = server.GetGameData();
|
joinGameAckData.gameData = server.GetGameData();
|
||||||
static_cast<NetPacketJoinGameAck *>(joinGameAck.get())->SetData(joinGameAckData);
|
static_cast<NetPacketJoinGameAck *>(joinGameAck.get())->SetData(joinGameAckData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, joinGameAck);
|
server.GetLobbyThread().GetSender().Send(session.sessionData, joinGameAck);
|
||||||
|
|
||||||
// Send notifications for connected players to client.
|
// Send notifications for connected players to client.
|
||||||
PlayerDataList tmpPlayerList = server.GetFullPlayerDataList();
|
PlayerDataList tmpPlayerList = server.GetFullPlayerDataList();
|
||||||
@@ -440,7 +352,7 @@ ServerGameStateInit::HandleNewSession(ServerGame &server, SessionWrapper session
|
|||||||
PlayerDataList::iterator player_end = tmpPlayerList.end();
|
PlayerDataList::iterator player_end = tmpPlayerList.end();
|
||||||
while (player_i != player_end)
|
while (player_i != player_end)
|
||||||
{
|
{
|
||||||
session.sessionData->GetSender().Send(session.sessionData, CreateNetPacketPlayerJoined(*(*player_i)));
|
server.GetLobbyThread().GetSender().Send(session.sessionData, CreateNetPacketPlayerJoined(*(*player_i)));
|
||||||
++player_i;
|
++player_i;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -485,7 +397,7 @@ ServerGameStateInit::TimerAdminWarning(ServerGame &server)
|
|||||||
warningData.timeoutReason = NETWORK_TIMEOUT_GAME_ADMIN_IDLE;
|
warningData.timeoutReason = NETWORK_TIMEOUT_GAME_ADMIN_IDLE;
|
||||||
warningData.remainingSeconds = SERVER_GAME_ADMIN_WARNING_REMAINING_SEC;
|
warningData.remainingSeconds = SERVER_GAME_ADMIN_WARNING_REMAINING_SEC;
|
||||||
static_cast<NetPacketTimeoutWarning *>(warning.get())->SetData(warningData);
|
static_cast<NetPacketTimeoutWarning *>(warning.get())->SetData(warningData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, warning);
|
server.GetLobbyThread().GetSender().Send(session.sessionData, warning);
|
||||||
}
|
}
|
||||||
// Start timeout timer.
|
// Start timeout timer.
|
||||||
server.GetLobbyThread().GetTimerManager().RestartTimer(
|
server.GetLobbyThread().GetTimerManager().RestartTimer(
|
||||||
@@ -686,7 +598,7 @@ ServerGameStateStartGame::DoStart(ServerGame &server)
|
|||||||
server.SendToAllPlayers(answer, SessionData::Game);
|
server.SendToAllPlayers(answer, SessionData::Game);
|
||||||
|
|
||||||
// Start the first hand.
|
// Start the first hand.
|
||||||
StartNewHand(server);
|
ServerGameStateHand::StartNewHand(server);
|
||||||
server.SetState(ServerGameStateHand::Instance());
|
server.SetState(ServerGameStateHand::Instance());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1018,6 +930,95 @@ ServerGameStateHand::GetDealCardsDelaySec(ServerGame &server)
|
|||||||
return delay;
|
return delay;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ServerGameStateHand::StartNewHand(ServerGame &server)
|
||||||
|
{
|
||||||
|
// Initialize hand.
|
||||||
|
Game &curGame = server.GetGame();
|
||||||
|
curGame.initHand();
|
||||||
|
|
||||||
|
// HACK: Skip GUI notification run
|
||||||
|
curGame.getCurrentHand()->getFlop()->skipFirstRunGui();
|
||||||
|
curGame.getCurrentHand()->getTurn()->skipFirstRunGui();
|
||||||
|
curGame.getCurrentHand()->getRiver()->skipFirstRunGui();
|
||||||
|
|
||||||
|
// Consider all players, even inactive.
|
||||||
|
PlayerListIterator i = curGame.getSeatsList()->begin();
|
||||||
|
PlayerListIterator end = curGame.getSeatsList()->end();
|
||||||
|
|
||||||
|
// Send cards to all players.
|
||||||
|
while (i != end)
|
||||||
|
{
|
||||||
|
// also send to inactive players, but not to disconnected players.
|
||||||
|
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
|
||||||
|
if (tmpPlayer->getNetSessionData().get())
|
||||||
|
{
|
||||||
|
int cards[2];
|
||||||
|
tmpPlayer->getMyCards(cards);
|
||||||
|
boost::shared_ptr<NetPacket> notifyCards(new NetPacketHandStart);
|
||||||
|
NetPacketHandStart::Data handStartData;
|
||||||
|
handStartData.yourCards[0] = static_cast<unsigned>(cards[0]);
|
||||||
|
handStartData.yourCards[1] = static_cast<unsigned>(cards[1]);
|
||||||
|
handStartData.smallBlind = curGame.getCurrentHand()->getSmallBlind();
|
||||||
|
static_cast<NetPacketHandStart *>(notifyCards.get())->SetData(handStartData);
|
||||||
|
|
||||||
|
server.GetLobbyThread().GetSender().Send(tmpPlayer->getNetSessionData(), notifyCards);
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Start hand.
|
||||||
|
curGame.startHand();
|
||||||
|
|
||||||
|
// Auto small blind / big blind at the beginning of hand.
|
||||||
|
i = curGame.getActivePlayerList()->begin();
|
||||||
|
end = curGame.getActivePlayerList()->end();
|
||||||
|
|
||||||
|
while (i != end)
|
||||||
|
{
|
||||||
|
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
|
||||||
|
if (tmpPlayer->getMyButton() == BUTTON_SMALL_BLIND)
|
||||||
|
{
|
||||||
|
boost::shared_ptr<NetPacket> notifySmallBlind(new NetPacketPlayersActionDone);
|
||||||
|
NetPacketPlayersActionDone::Data actionDoneData;
|
||||||
|
actionDoneData.gameState = GAME_STATE_PREFLOP_SMALL_BLIND;
|
||||||
|
actionDoneData.playerId = tmpPlayer->getMyUniqueID();
|
||||||
|
actionDoneData.playerAction = (PlayerAction)tmpPlayer->getMyAction();
|
||||||
|
actionDoneData.totalPlayerBet = tmpPlayer->getMySet();
|
||||||
|
actionDoneData.playerMoney = tmpPlayer->getMyCash();
|
||||||
|
actionDoneData.highestSet = server.GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet();
|
||||||
|
actionDoneData.minimumRaise = server.GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise();
|
||||||
|
static_cast<NetPacketPlayersActionDone *>(notifySmallBlind.get())->SetData(actionDoneData);
|
||||||
|
server.SendToAllPlayers(notifySmallBlind, SessionData::Game);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
|
||||||
|
i = curGame.getActivePlayerList()->begin();
|
||||||
|
end = curGame.getActivePlayerList()->end();
|
||||||
|
while (i != end)
|
||||||
|
{
|
||||||
|
boost::shared_ptr<PlayerInterface> tmpPlayer = *i;
|
||||||
|
if (tmpPlayer->getMyButton() == BUTTON_BIG_BLIND)
|
||||||
|
{
|
||||||
|
boost::shared_ptr<NetPacket> notifyBigBlind(new NetPacketPlayersActionDone);
|
||||||
|
NetPacketPlayersActionDone::Data actionDoneData;
|
||||||
|
actionDoneData.gameState = GAME_STATE_PREFLOP_BIG_BLIND;
|
||||||
|
actionDoneData.playerId = tmpPlayer->getMyUniqueID();
|
||||||
|
actionDoneData.playerAction = (PlayerAction)tmpPlayer->getMyAction();
|
||||||
|
actionDoneData.totalPlayerBet = tmpPlayer->getMySet();
|
||||||
|
actionDoneData.playerMoney = tmpPlayer->getMyCash();
|
||||||
|
actionDoneData.highestSet = server.GetGame().getCurrentHand()->getCurrentBeRo()->getHighestSet();
|
||||||
|
actionDoneData.minimumRaise = server.GetGame().getCurrentHand()->getCurrentBeRo()->getMinimumRaise();
|
||||||
|
static_cast<NetPacketPlayersActionDone *>(notifyBigBlind.get())->SetData(actionDoneData);
|
||||||
|
server.SendToAllPlayers(notifyBigBlind, SessionData::Game);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -1133,7 +1134,7 @@ ServerGameStateWaitPlayerAction::InternalProcessPacket(ServerGame &server, Sessi
|
|||||||
rejectData.playerBet = actionData.playerBet;
|
rejectData.playerBet = actionData.playerBet;
|
||||||
rejectData.rejectionReason = code;
|
rejectData.rejectionReason = code;
|
||||||
static_cast<NetPacketPlayersActionRejected *>(reject.get())->SetData(rejectData);
|
static_cast<NetPacketPlayersActionRejected *>(reject.get())->SetData(rejectData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, reject);
|
server.GetLobbyThread().GetSender().Send(session.sessionData, reject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ ServerLobbyThread::AddConnection(boost::shared_ptr<tcp::socket> sock)
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
// Create a new session.
|
// Create a new session.
|
||||||
boost::shared_ptr<SessionData> sessionData(new SessionData(sock, m_curSessionId++, m_sender, *m_senderCallback));
|
boost::shared_ptr<SessionData> sessionData(new SessionData(sock, m_curSessionId++, *m_senderCallback));
|
||||||
m_sessionManager.AddSession(sessionData);
|
m_sessionManager.AddSession(sessionData);
|
||||||
|
|
||||||
LOG_VERBOSE("Accepted connection - session #" << sessionData->GetId() << ".");
|
LOG_VERBOSE("Accepted connection - session #" << sessionData->GetId() << ".");
|
||||||
@@ -191,7 +191,7 @@ ServerLobbyThread::ReAddSession(SessionWrapper session, int reason)
|
|||||||
NetPacketRemovedFromGame::Data removedData;
|
NetPacketRemovedFromGame::Data removedData;
|
||||||
removedData.removeReason = reason;
|
removedData.removeReason = reason;
|
||||||
static_cast<NetPacketRemovedFromGame *>(packet.get())->SetData(removedData);
|
static_cast<NetPacketRemovedFromGame *>(packet.get())->SetData(removedData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session.sessionData, packet);
|
||||||
|
|
||||||
HandleReAddedSession(session);
|
HandleReAddedSession(session);
|
||||||
}
|
}
|
||||||
@@ -247,8 +247,8 @@ ServerLobbyThread::NotifyPlayerJoinedGame(unsigned gameId, unsigned playerId)
|
|||||||
packetData.gameId = gameId;
|
packetData.gameId = gameId;
|
||||||
packetData.playerId = playerId;
|
packetData.playerId = playerId;
|
||||||
static_cast<NetPacketGameListPlayerJoined *>(packet.get())->SetData(packetData);
|
static_cast<NetPacketGameListPlayerJoined *>(packet.get())->SetData(packetData);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -260,8 +260,8 @@ ServerLobbyThread::NotifyPlayerLeftGame(unsigned gameId, unsigned playerId)
|
|||||||
packetData.gameId = gameId;
|
packetData.gameId = gameId;
|
||||||
packetData.playerId = playerId;
|
packetData.playerId = playerId;
|
||||||
static_cast<NetPacketGameListPlayerLeft *>(packet.get())->SetData(packetData);
|
static_cast<NetPacketGameListPlayerLeft *>(packet.get())->SetData(packetData);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -273,24 +273,24 @@ ServerLobbyThread::NotifyGameAdminChanged(unsigned gameId, unsigned newAdminPlay
|
|||||||
packetData.gameId = gameId;
|
packetData.gameId = gameId;
|
||||||
packetData.newAdminplayerId = newAdminPlayerId;
|
packetData.newAdminplayerId = newAdminPlayerId;
|
||||||
static_cast<NetPacketGameListAdminChanged *>(packet.get())->SetData(packetData);
|
static_cast<NetPacketGameListAdminChanged *>(packet.get())->SetData(packetData);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::NotifyStartingGame(unsigned gameId)
|
ServerLobbyThread::NotifyStartingGame(unsigned gameId)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_STARTED);
|
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_STARTED);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ServerLobbyThread::NotifyReopeningGame(unsigned gameId)
|
ServerLobbyThread::NotifyReopeningGame(unsigned gameId)
|
||||||
{
|
{
|
||||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_CREATED);
|
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(gameId, GAME_MODE_CREATED);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -422,7 +422,7 @@ ServerLobbyThread::SendGlobalChat(const string &message)
|
|||||||
outChatData.playerId = 0;
|
outChatData.playerId = 0;
|
||||||
outChatData.text = message;
|
outChatData.text = message;
|
||||||
static_cast<NetPacketChatText *>(outChat.get())->SetData(outChatData);
|
static_cast<NetPacketChatText *>(outChat.get())->SetData(outChatData);
|
||||||
m_gameSessionManager.SendToAllSessions(outChat, SessionData::Game);
|
m_gameSessionManager.SendToAllSessions(GetSender(), outChat, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -432,7 +432,7 @@ ServerLobbyThread::SendGlobalMsgBox(const string &message)
|
|||||||
NetPacketMsgBoxText::Data outMsgData;
|
NetPacketMsgBoxText::Data outMsgData;
|
||||||
outMsgData.text = message;
|
outMsgData.text = message;
|
||||||
static_cast<NetPacketMsgBoxText *>(outMsg.get())->SetData(outMsgData);
|
static_cast<NetPacketMsgBoxText *>(outMsg.get())->SetData(outMsgData);
|
||||||
m_gameSessionManager.SendToAllSessions(outMsg, SessionData::Game);
|
m_gameSessionManager.SendToAllSessions(GetSender(), outMsg, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -474,7 +474,7 @@ ServerLobbyThread::GetStartTime() const
|
|||||||
return m_startTime;
|
return m_startTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
SenderInterface &
|
SenderHelper &
|
||||||
ServerLobbyThread::GetSender()
|
ServerLobbyThread::GetSender()
|
||||||
{
|
{
|
||||||
assert(m_sender);
|
assert(m_sender);
|
||||||
@@ -560,11 +560,6 @@ ServerLobbyThread::RegisterTimers()
|
|||||||
SERVER_UPDATE_AVATAR_LOCK_INTERVAL_MSEC,
|
SERVER_UPDATE_AVATAR_LOCK_INTERVAL_MSEC,
|
||||||
boost::bind(&ServerLobbyThread::TimerUpdateClientAvatarLock, this),
|
boost::bind(&ServerLobbyThread::TimerUpdateClientAvatarLock, this),
|
||||||
true);
|
true);
|
||||||
// Check if new data needs to be sent.
|
|
||||||
m_timerManager.RegisterTimer(
|
|
||||||
SERVER_PROCESS_SEND_INTERVAL_MSEC,
|
|
||||||
boost::bind(&SenderInterface::Process, m_sender),
|
|
||||||
true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -891,7 +886,7 @@ ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(SessionWrapper session, con
|
|||||||
infoData.playerInfo.avatarType = AvatarManager::GetAvatarFileType(tmpPlayer->GetAvatarFile());
|
infoData.playerInfo.avatarType = AvatarManager::GetAvatarFileType(tmpPlayer->GetAvatarFile());
|
||||||
}
|
}
|
||||||
static_cast<NetPacketPlayerInfo *>(info.get())->SetData(infoData);
|
static_cast<NetPacketPlayerInfo *>(info.get())->SetData(infoData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, info);
|
GetSender().Send(session.sessionData, info);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -900,7 +895,7 @@ ServerLobbyThread::HandleNetPacketRetrievePlayerInfo(SessionWrapper session, con
|
|||||||
NetPacketUnknownPlayerId::Data unknownData;
|
NetPacketUnknownPlayerId::Data unknownData;
|
||||||
unknownData.playerId = request.playerId;
|
unknownData.playerId = request.playerId;
|
||||||
static_cast<NetPacketUnknownPlayerId *>(unknown.get())->SetData(unknownData);
|
static_cast<NetPacketUnknownPlayerId *>(unknown.get())->SetData(unknownData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, unknown);
|
GetSender().Send(session.sessionData, unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -918,7 +913,7 @@ ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const N
|
|||||||
if (GetAvatarManager().AvatarFileToNetPackets(tmpFile, request.requestId, tmpPackets) == 0)
|
if (GetAvatarManager().AvatarFileToNetPackets(tmpFile, request.requestId, tmpPackets) == 0)
|
||||||
{
|
{
|
||||||
avatarFound = true;
|
avatarFound = true;
|
||||||
session.sessionData->GetSender().Send(session.sessionData, tmpPackets);
|
GetSender().Send(session.sessionData, tmpPackets);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
LOG_ERROR("Failed to read avatar file for network transmission.");
|
LOG_ERROR("Failed to read avatar file for network transmission.");
|
||||||
@@ -931,7 +926,7 @@ ServerLobbyThread::HandleNetPacketRetrieveAvatar(SessionWrapper session, const N
|
|||||||
NetPacketUnknownAvatar::Data unknownData;
|
NetPacketUnknownAvatar::Data unknownData;
|
||||||
unknownData.requestId = request.requestId;
|
unknownData.requestId = request.requestId;
|
||||||
static_cast<NetPacketUnknownAvatar *>(unknown.get())->SetData(unknownData);
|
static_cast<NetPacketUnknownAvatar *>(unknown.get())->SetData(unknownData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, unknown);
|
GetSender().Send(session.sessionData, unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1001,7 +996,7 @@ ServerLobbyThread::EstablishSession(SessionWrapper session)
|
|||||||
initAckData.sessionId = session.sessionData->GetId(); // TODO: currently unused.
|
initAckData.sessionId = session.sessionData->GetId(); // TODO: currently unused.
|
||||||
initAckData.playerId = session.playerData->GetUniqueId();
|
initAckData.playerId = session.playerData->GetUniqueId();
|
||||||
static_cast<NetPacketInitAck *>(initAck.get())->SetData(initAckData);
|
static_cast<NetPacketInitAck *>(initAck.get())->SetData(initAckData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, initAck);
|
GetSender().Send(session.sessionData, initAck);
|
||||||
|
|
||||||
// Send the game list to the client.
|
// Send the game list to the client.
|
||||||
SendGameList(session.sessionData);
|
SendGameList(session.sessionData);
|
||||||
@@ -1033,7 +1028,7 @@ ServerLobbyThread::RequestPlayerAvatar(SessionWrapper session)
|
|||||||
retrieveAvatarData.requestId = session.playerData->GetUniqueId();
|
retrieveAvatarData.requestId = session.playerData->GetUniqueId();
|
||||||
retrieveAvatarData.avatar = session.playerData->GetAvatarMD5();
|
retrieveAvatarData.avatar = session.playerData->GetAvatarMD5();
|
||||||
static_cast<NetPacketRetrieveAvatar *>(retrieveAvatar.get())->SetData(retrieveAvatarData);
|
static_cast<NetPacketRetrieveAvatar *>(retrieveAvatar.get())->SetData(retrieveAvatarData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, retrieveAvatar);
|
GetSender().Send(session.sessionData, retrieveAvatar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1129,8 +1124,8 @@ ServerLobbyThread::InternalAddGame(boost::shared_ptr<ServerGame> game)
|
|||||||
// Add game to list.
|
// Add game to list.
|
||||||
m_gameMap.insert(GameMap::value_type(game->GetId(), game));
|
m_gameMap.insert(GameMap::value_type(game->GetId(), game));
|
||||||
// Notify all players.
|
// Notify all players.
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(CreateNetPacketGameListNew(*game), SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), CreateNetPacketGameListNew(*game), SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(CreateNetPacketGameListNew(*game), SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), CreateNetPacketGameListNew(*game), SessionData::Game);
|
||||||
|
|
||||||
{
|
{
|
||||||
boost::mutex::scoped_lock lock(m_statMutex);
|
boost::mutex::scoped_lock lock(m_statMutex);
|
||||||
@@ -1161,8 +1156,8 @@ ServerLobbyThread::InternalRemoveGame(boost::shared_ptr<ServerGame> game)
|
|||||||
game->RemoveAllSessions();
|
game->RemoveAllSessions();
|
||||||
// Notify all players.
|
// Notify all players.
|
||||||
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(game->GetId(), GAME_MODE_CLOSED);
|
boost::shared_ptr<NetPacket> packet = CreateNetPacketGameListUpdate(game->GetId(), GAME_MODE_CLOSED);
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1204,7 +1199,7 @@ ServerLobbyThread::InternalResubscribeMsg(SessionWrapper session)
|
|||||||
try {
|
try {
|
||||||
static_cast<NetPacketStatisticsChanged *>(packet.get())->SetData(statData);
|
static_cast<NetPacketStatisticsChanged *>(packet.get())->SetData(statData);
|
||||||
|
|
||||||
session.sessionData->GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session.sessionData, packet);
|
||||||
} catch (const NetException &)
|
} catch (const NetException &)
|
||||||
{
|
{
|
||||||
// Ignore errors for now.
|
// Ignore errors for now.
|
||||||
@@ -1253,7 +1248,7 @@ ServerLobbyThread::InternalCheckSessionTimeouts(SessionWrapper session)
|
|||||||
warningData.timeoutReason = NETWORK_TIMEOUT_GENERIC;
|
warningData.timeoutReason = NETWORK_TIMEOUT_GENERIC;
|
||||||
warningData.remainingSeconds = SERVER_TIMEOUT_WARNING_REMAINING_SEC;
|
warningData.remainingSeconds = SERVER_TIMEOUT_WARNING_REMAINING_SEC;
|
||||||
static_cast<NetPacketTimeoutWarning *>(packet.get())->SetData(warningData);
|
static_cast<NetPacketTimeoutWarning *>(packet.get())->SetData(warningData);
|
||||||
session.sessionData->GetSender().Send(session.sessionData, packet);
|
GetSender().Send(session.sessionData, packet);
|
||||||
}
|
}
|
||||||
else if (session.sessionData->GetActivityTimerElapsedSec() >= SERVER_SESSION_ACTIVITY_TIMEOUT_SEC)
|
else if (session.sessionData->GetActivityTimerElapsedSec() >= SERVER_SESSION_ACTIVITY_TIMEOUT_SEC)
|
||||||
{
|
{
|
||||||
@@ -1290,7 +1285,7 @@ ServerLobbyThread::SendError(boost::shared_ptr<SessionData> s, int errorCode)
|
|||||||
NetPacketError::Data errorData;
|
NetPacketError::Data errorData;
|
||||||
errorData.errorCode = errorCode;
|
errorData.errorCode = errorCode;
|
||||||
static_cast<NetPacketError *>(packet.get())->SetData(errorData);
|
static_cast<NetPacketError *>(packet.get())->SetData(errorData);
|
||||||
s->GetSender().Send(s, packet);
|
GetSender().Send(s, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1300,7 +1295,7 @@ ServerLobbyThread::SendJoinGameFailed(boost::shared_ptr<SessionData> s, int reas
|
|||||||
NetPacketJoinGameFailed::Data failedData;
|
NetPacketJoinGameFailed::Data failedData;
|
||||||
failedData.failureCode = reason;
|
failedData.failureCode = reason;
|
||||||
static_cast<NetPacketJoinGameFailed *>(packet.get())->SetData(failedData);
|
static_cast<NetPacketJoinGameFailed *>(packet.get())->SetData(failedData);
|
||||||
s->GetSender().Send(s, packet);
|
GetSender().Send(s, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -1310,7 +1305,7 @@ ServerLobbyThread::SendGameList(boost::shared_ptr<SessionData> s)
|
|||||||
GameMap::const_iterator game_end = m_gameMap.end();
|
GameMap::const_iterator game_end = m_gameMap.end();
|
||||||
while (game_i != game_end)
|
while (game_i != game_end)
|
||||||
{
|
{
|
||||||
s->GetSender().Send(s, CreateNetPacketGameListNew(*game_i->second));
|
GetSender().Send(s, CreateNetPacketGameListNew(*game_i->second));
|
||||||
++game_i;
|
++game_i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1345,8 +1340,8 @@ ServerLobbyThread::BroadcastStatisticsUpdate(const ServerStats &stats)
|
|||||||
try {
|
try {
|
||||||
static_cast<NetPacketStatisticsChanged *>(packet.get())->SetData(statData);
|
static_cast<NetPacketStatisticsChanged *>(packet.get())->SetData(statData);
|
||||||
|
|
||||||
m_sessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Established);
|
m_sessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Established);
|
||||||
m_gameSessionManager.SendLobbyMsgToAllSessions(packet, SessionData::Game);
|
m_gameSessionManager.SendLobbyMsgToAllSessions(GetSender(), packet, SessionData::Game);
|
||||||
} catch (const NetException &)
|
} catch (const NetException &)
|
||||||
{
|
{
|
||||||
// Ignore errors for now.
|
// Ignore errors for now.
|
||||||
|
|||||||
@@ -18,15 +18,12 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include <net/sessiondata.h>
|
#include <net/sessiondata.h>
|
||||||
#include <net/senderinterface.h>
|
|
||||||
|
|
||||||
SessionData::SessionData(boost::shared_ptr<boost::asio::ip::tcp::socket> sock, SessionId id,
|
SessionData::SessionData(boost::shared_ptr<boost::asio::ip::tcp::socket> sock, SessionId id, SessionDataCallback &cb)
|
||||||
boost::shared_ptr<SenderInterface> sender, SessionDataCallback &cb)
|
|
||||||
: m_socket(sock), m_id(id), m_gameId(0), m_state(SessionData::Init), m_readyFlag(false),
|
: m_socket(sock), m_id(id), m_gameId(0), m_state(SessionData::Init), m_readyFlag(false),
|
||||||
m_wantsLobbyMsg(true), m_activityTimeoutNoticeSent(false), m_callback(cb),
|
m_wantsLobbyMsg(true), m_activityTimeoutNoticeSent(false), m_callback(cb),
|
||||||
m_maxNumPlayers(0)
|
m_maxNumPlayers(0)
|
||||||
{
|
{
|
||||||
m_sender = sender;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SessionData::~SessionData()
|
SessionData::~SessionData()
|
||||||
@@ -144,12 +141,6 @@ SessionData::GetReceiveBuffer()
|
|||||||
return m_receiveBuffer;
|
return m_receiveBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
SenderInterface &
|
|
||||||
SessionData::GetSender()
|
|
||||||
{
|
|
||||||
return *m_sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
SessionData::ResetActivityTimer()
|
SessionData::ResetActivityTimer()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include <net/sessionmanager.h>
|
#include <net/sessionmanager.h>
|
||||||
#include <net/senderinterface.h>
|
#include <net/senderhelper.h>
|
||||||
#include <net/serverexception.h>
|
#include <net/serverexception.h>
|
||||||
#include <net/socket_msg.h>
|
#include <net/socket_msg.h>
|
||||||
|
|
||||||
@@ -363,7 +363,7 @@ SessionManager::GetRawSessionCount()
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SessionManager::SendToAllSessions(boost::shared_ptr<NetPacket> packet, SessionData::State state)
|
SessionManager::SendToAllSessions(SenderHelper &sender, boost::shared_ptr<NetPacket> packet, SessionData::State state)
|
||||||
{
|
{
|
||||||
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
||||||
|
|
||||||
@@ -377,13 +377,13 @@ SessionManager::SendToAllSessions(boost::shared_ptr<NetPacket> packet, SessionDa
|
|||||||
|
|
||||||
// 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.sessionData->GetState() == state)
|
||||||
i->second.sessionData->GetSender().Send(i->second.sessionData, boost::shared_ptr<NetPacket>(packet->Clone()));
|
sender.Send(i->second.sessionData, boost::shared_ptr<NetPacket>(packet->Clone()));
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SessionManager::SendLobbyMsgToAllSessions(boost::shared_ptr<NetPacket> packet, SessionData::State state)
|
SessionManager::SendLobbyMsgToAllSessions(SenderHelper &sender, boost::shared_ptr<NetPacket> packet, SessionData::State state)
|
||||||
{
|
{
|
||||||
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
||||||
|
|
||||||
@@ -397,13 +397,13 @@ SessionManager::SendLobbyMsgToAllSessions(boost::shared_ptr<NetPacket> packet, S
|
|||||||
|
|
||||||
// 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.sessionData->GetState() == state && i->second.sessionData->WantsLobbyMsg())
|
||||||
i->second.sessionData->GetSender().Send(i->second.sessionData, boost::shared_ptr<NetPacket>(packet->Clone()));
|
sender.Send(i->second.sessionData, boost::shared_ptr<NetPacket>(packet->Clone()));
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SessionManager::SendToAllButOneSessions(boost::shared_ptr<NetPacket> packet, SessionId except, SessionData::State state)
|
SessionManager::SendToAllButOneSessions(SenderHelper &sender, boost::shared_ptr<NetPacket> packet, SessionId except, SessionData::State state)
|
||||||
{
|
{
|
||||||
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
boost::recursive_mutex::scoped_lock lock(m_sessionMapMutex);
|
||||||
|
|
||||||
@@ -415,7 +415,7 @@ SessionManager::SendToAllButOneSessions(boost::shared_ptr<NetPacket> packet, Ses
|
|||||||
// 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.sessionData->GetState() == state)
|
||||||
if (i->first != except)
|
if (i->first != except)
|
||||||
i->second.sessionData->GetSender().Send(i->second.sessionData, boost::shared_ptr<NetPacket>(packet->Clone()));
|
sender.Send(i->second.sessionData, boost::shared_ptr<NetPacket>(packet->Clone()));
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-16
@@ -21,29 +21,24 @@
|
|||||||
#ifndef _SENDERHELPER_H_
|
#ifndef _SENDERHELPER_H_
|
||||||
#define _SENDERHELPER_H_
|
#define _SENDERHELPER_H_
|
||||||
|
|
||||||
#include <net/senderinterface.h>
|
|
||||||
#include <net/netpacket.h>
|
#include <net/netpacket.h>
|
||||||
#include <net/sendercallback.h>
|
#include <net/sendercallback.h>
|
||||||
|
|
||||||
class SessionData;
|
class SessionData;
|
||||||
class SendDataManager;
|
class SendDataManager;
|
||||||
|
|
||||||
class SenderHelper : public SenderInterface
|
class SenderHelper
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SenderHelper(SenderCallback &cb, boost::shared_ptr<boost::asio::io_service> ioService);
|
SenderHelper(SenderCallback &cb, boost::shared_ptr<boost::asio::io_service> ioService);
|
||||||
virtual ~SenderHelper();
|
~SenderHelper();
|
||||||
|
|
||||||
virtual void Send(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
void Send(boost::shared_ptr<SessionData> session, boost::shared_ptr<NetPacket> packet);
|
||||||
virtual void Send(boost::shared_ptr<SessionData> session, const NetPacketList &packetList);
|
void Send(boost::shared_ptr<SessionData> session, const NetPacketList &packetList);
|
||||||
|
|
||||||
virtual void Process();
|
void SignalSessionTerminated(unsigned sessionId);
|
||||||
|
|
||||||
virtual void SignalSessionTerminated(unsigned sessionId);
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef std::list<unsigned> SessionIdList;
|
|
||||||
|
|
||||||
typedef std::map<SessionId, boost::shared_ptr<SendDataManager> > SendQueueMap;
|
typedef std::map<SessionId, boost::shared_ptr<SendDataManager> > SendQueueMap;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -53,12 +48,6 @@ private:
|
|||||||
|
|
||||||
SendQueueMap m_sendQueueMap;
|
SendQueueMap m_sendQueueMap;
|
||||||
mutable boost::mutex m_sendQueueMapMutex;
|
mutable boost::mutex m_sendQueueMapMutex;
|
||||||
|
|
||||||
SessionIdList m_changedSessions;
|
|
||||||
mutable boost::mutex m_changedSessionsMutex;
|
|
||||||
|
|
||||||
SessionIdList m_removedSessions;
|
|
||||||
mutable boost::mutex m_removedSessionsMutex;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -145,9 +145,12 @@ protected:
|
|||||||
void TimerNextHand(ServerGame &server);
|
void TimerNextHand(ServerGame &server);
|
||||||
void TimerNextGame(ServerGame &server);
|
void TimerNextGame(ServerGame &server);
|
||||||
int GetDealCardsDelaySec(ServerGame &server);
|
int GetDealCardsDelaySec(ServerGame &server);
|
||||||
|
static void StartNewHand(ServerGame &server);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static ServerGameStateHand s_state;
|
static ServerGameStateHand s_state;
|
||||||
|
|
||||||
|
friend class ServerGameStateStartGame;
|
||||||
};
|
};
|
||||||
|
|
||||||
// State: Wait for a player action.
|
// State: Wait for a player action.
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
#define NET_ADMIN_IRC_TERMINATE_TIMEOUT_MSEC 4000
|
#define NET_ADMIN_IRC_TERMINATE_TIMEOUT_MSEC 4000
|
||||||
|
|
||||||
|
|
||||||
class SenderInterface;
|
class SenderHelper;
|
||||||
class ReceiverHelper;
|
class ReceiverHelper;
|
||||||
class ServerSenderCallback;
|
class ServerSenderCallback;
|
||||||
class ServerGame;
|
class ServerGame;
|
||||||
@@ -95,7 +95,7 @@ public:
|
|||||||
ServerStats GetStats() const;
|
ServerStats GetStats() const;
|
||||||
boost::posix_time::ptime GetStartTime() const;
|
boost::posix_time::ptime GetStartTime() const;
|
||||||
|
|
||||||
SenderInterface &GetSender();
|
SenderHelper &GetSender();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
@@ -175,7 +175,7 @@ private:
|
|||||||
boost::shared_ptr<boost::asio::io_service::work> m_work;
|
boost::shared_ptr<boost::asio::io_service::work> m_work;
|
||||||
|
|
||||||
boost::shared_ptr<ServerSenderCallback> m_senderCallback;
|
boost::shared_ptr<ServerSenderCallback> m_senderCallback;
|
||||||
boost::shared_ptr<SenderInterface> m_sender;
|
boost::shared_ptr<SenderHelper> m_sender;
|
||||||
boost::shared_ptr<ReceiverHelper> m_receiver;
|
boost::shared_ptr<ReceiverHelper> m_receiver;
|
||||||
|
|
||||||
SessionManager m_sessionManager;
|
SessionManager m_sessionManager;
|
||||||
|
|||||||
@@ -36,15 +36,12 @@ typedef unsigned SessionId;
|
|||||||
#define SESSION_ID_INIT INVALID_SESSION
|
#define SESSION_ID_INIT INVALID_SESSION
|
||||||
#define SESSION_ID_GENERIC 0xFFFFFFFF
|
#define SESSION_ID_GENERIC 0xFFFFFFFF
|
||||||
|
|
||||||
class SenderInterface;
|
|
||||||
|
|
||||||
class SessionData
|
class SessionData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum State { Init, ReceivingAvatar, Established, Game };
|
enum State { Init, ReceivingAvatar, Established, Game };
|
||||||
|
|
||||||
SessionData(boost::shared_ptr<boost::asio::ip::tcp::socket> sock, SessionId id,
|
SessionData(boost::shared_ptr<boost::asio::ip::tcp::socket> sock, SessionId id, SessionDataCallback &cb);
|
||||||
boost::shared_ptr<SenderInterface> sender, SessionDataCallback &cb);
|
|
||||||
~SessionData();
|
~SessionData();
|
||||||
|
|
||||||
SessionId GetId() const;
|
SessionId GetId() const;
|
||||||
@@ -69,7 +66,6 @@ public:
|
|||||||
void SetClientAddr(const std::string &addr);
|
void SetClientAddr(const std::string &addr);
|
||||||
|
|
||||||
ReceiveBuffer &GetReceiveBuffer();
|
ReceiveBuffer &GetReceiveBuffer();
|
||||||
SenderInterface &GetSender();
|
|
||||||
|
|
||||||
void ResetActivityTimer();
|
void ResetActivityTimer();
|
||||||
unsigned GetActivityTimerElapsedSec() const;
|
unsigned GetActivityTimerElapsedSec() const;
|
||||||
@@ -92,7 +88,6 @@ private:
|
|||||||
boost::timers::portable::microsec_timer m_activityTimer;
|
boost::timers::portable::microsec_timer m_activityTimer;
|
||||||
bool m_activityTimeoutNoticeSent;
|
bool m_activityTimeoutNoticeSent;
|
||||||
boost::timers::portable::microsec_timer m_autoDisconnectTimer;
|
boost::timers::portable::microsec_timer m_autoDisconnectTimer;
|
||||||
boost::shared_ptr<SenderInterface> m_sender;
|
|
||||||
SessionDataCallback &m_callback;
|
SessionDataCallback &m_callback;
|
||||||
unsigned m_maxNumPlayers;
|
unsigned m_maxNumPlayers;
|
||||||
|
|
||||||
|
|||||||
@@ -28,8 +28,8 @@
|
|||||||
#include <playerdata.h>
|
#include <playerdata.h>
|
||||||
#include <core/thread.h>
|
#include <core/thread.h>
|
||||||
|
|
||||||
class SenderInterface;
|
|
||||||
class NetPacket;
|
class NetPacket;
|
||||||
|
class SenderHelper;
|
||||||
|
|
||||||
struct SessionWrapper
|
struct SessionWrapper
|
||||||
{
|
{
|
||||||
@@ -73,9 +73,9 @@ public:
|
|||||||
void Clear();
|
void Clear();
|
||||||
unsigned GetRawSessionCount();
|
unsigned GetRawSessionCount();
|
||||||
|
|
||||||
void SendToAllSessions(boost::shared_ptr<NetPacket> packet, SessionData::State state);
|
void SendToAllSessions(SenderHelper &sender, boost::shared_ptr<NetPacket> packet, SessionData::State state);
|
||||||
void SendLobbyMsgToAllSessions(boost::shared_ptr<NetPacket> packet, SessionData::State state);
|
void SendLobbyMsgToAllSessions(SenderHelper &sender, boost::shared_ptr<NetPacket> packet, SessionData::State state);
|
||||||
void SendToAllButOneSessions(boost::shared_ptr<NetPacket> packet, SessionId except, SessionData::State state);
|
void SendToAllButOneSessions(SenderHelper &sender, boost::shared_ptr<NetPacket> packet, SessionId except, SessionData::State state);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user