Delay auto-start of games when they are full.

This commit is contained in:
lotodore
2010-09-04 20:08:40 +00:00
parent 7d145bf0e1
commit e8eda4f189
4 changed files with 88 additions and 35 deletions
+11 -3
View File
@@ -50,7 +50,8 @@ ServerGame::ServerGame(boost::shared_ptr<ServerLobbyThread> lobbyThread, u_int32
: m_adminPlayerId(adminPlayerId), m_lobbyThread(lobbyThread), m_gui(gui), : m_adminPlayerId(adminPlayerId), m_lobbyThread(lobbyThread), m_gui(gui),
m_gameData(gameData), m_curState(NULL), m_id(id), m_dbId(DB_ID_INVALID), m_name(name), m_gameData(gameData), m_curState(NULL), m_id(id), m_dbId(DB_ID_INVALID), m_name(name),
m_password(pwd), m_playerConfig(playerConfig), m_gameNum(1), m_curPetitionId(1), m_password(pwd), m_playerConfig(playerConfig), m_gameNum(1), m_curPetitionId(1),
m_voteKickTimer(lobbyThread->GetIOService()), m_stateTimer(lobbyThread->GetIOService()) m_voteKickTimer(lobbyThread->GetIOService()), m_stateTimer1(lobbyThread->GetIOService()),
m_stateTimer2(lobbyThread->GetIOService())
{ {
LOG_VERBOSE("Game object " << GetId() << " created."); LOG_VERBOSE("Game object " << GetId() << " created.");
@@ -758,6 +759,7 @@ ServerGame::RemovePlayerData(boost::shared_ptr<PlayerData> player, int reason)
} }
GetSessionManager().SendToAllSessions(GetLobbyThread().GetSender(), thisPlayerLeft, SessionData::Game); GetSessionManager().SendToAllSessions(GetLobbyThread().GetSender(), thisPlayerLeft, SessionData::Game);
GetState().NotifySessionRemoved(shared_from_this());
GetLobbyThread().NotifyPlayerLeftGame(GetId(), player->GetUniqueId()); GetLobbyThread().NotifyPlayerLeftGame(GetId(), player->GetUniqueId());
} }
@@ -891,9 +893,15 @@ ServerGame::SetState(ServerGameState &newState)
} }
boost::asio::deadline_timer & boost::asio::deadline_timer &
ServerGame::GetStateTimer() ServerGame::GetStateTimer1()
{ {
return m_stateTimer; return m_stateTimer1;
}
boost::asio::deadline_timer &
ServerGame::GetStateTimer2()
{
return m_stateTimer2;
} }
ReceiverHelper & ReceiverHelper &
+63 -30
View File
@@ -62,6 +62,7 @@ using namespace std;
#endif #endif
#define SERVER_START_GAME_TIMEOUT_SEC 10 #define SERVER_START_GAME_TIMEOUT_SEC 10
#define SERVER_AUTOSTART_GAME_DELAY_SEC 6
#define SERVER_GAME_ADMIN_WARNING_REMAINING_SEC 60 #define SERVER_GAME_ADMIN_WARNING_REMAINING_SEC 60
#define SERVER_GAME_ADMIN_TIMEOUT_SEC 300 // 5 min, MUST be > SERVER_GAME_ADMIN_WARNING_REMAINING_SEC #define SERVER_GAME_ADMIN_TIMEOUT_SEC 300 // 5 min, MUST be > SERVER_GAME_ADMIN_WARNING_REMAINING_SEC
#define SERVER_VOTE_KICK_TIMEOUT_SEC 30 #define SERVER_VOTE_KICK_TIMEOUT_SEC 30
@@ -329,6 +330,7 @@ void
ServerGameStateInit::Exit(boost::shared_ptr<ServerGame> server) ServerGameStateInit::Exit(boost::shared_ptr<ServerGame> server)
{ {
UnregisterAdminTimer(server); UnregisterAdminTimer(server);
UnregisterAutoStartTimer(server);
} }
void void
@@ -338,6 +340,12 @@ ServerGameStateInit::NotifyGameAdminChanged(boost::shared_ptr<ServerGame> server
RegisterAdminTimer(server); RegisterAdminTimer(server);
} }
void
ServerGameStateInit::NotifySessionRemoved(boost::shared_ptr<ServerGame> server)
{
UnregisterAutoStartTimer(server);
}
void void
ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session) ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session)
{ {
@@ -391,7 +399,7 @@ ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, Sess
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.
SendStartEvent(*server, false); RegisterAutoStartTimer(server);
} }
} }
} }
@@ -400,9 +408,9 @@ ServerGameStateInit::HandleNewSession(boost::shared_ptr<ServerGame> server, Sess
void void
ServerGameStateInit::RegisterAdminTimer(boost::shared_ptr<ServerGame> server) ServerGameStateInit::RegisterAdminTimer(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(SERVER_GAME_ADMIN_TIMEOUT_SEC - SERVER_GAME_ADMIN_WARNING_REMAINING_SEC)); boost::posix_time::seconds(SERVER_GAME_ADMIN_TIMEOUT_SEC - SERVER_GAME_ADMIN_WARNING_REMAINING_SEC));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateInit::TimerAdminWarning, this, boost::asio::placeholders::error, server)); &ServerGameStateInit::TimerAdminWarning, this, boost::asio::placeholders::error, server));
} }
@@ -410,7 +418,32 @@ ServerGameStateInit::RegisterAdminTimer(boost::shared_ptr<ServerGame> server)
void void
ServerGameStateInit::UnregisterAdminTimer(boost::shared_ptr<ServerGame> server) ServerGameStateInit::UnregisterAdminTimer(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer().cancel(); server->GetStateTimer1().cancel();
}
void
ServerGameStateInit::RegisterAutoStartTimer(boost::shared_ptr<ServerGame> server)
{
server->GetStateTimer2().expires_from_now(
boost::posix_time::seconds(SERVER_AUTOSTART_GAME_DELAY_SEC));
server->GetStateTimer2().async_wait(
boost::bind(
&ServerGameStateInit::TimerAutoStart, this, boost::asio::placeholders::error, server));
}
void
ServerGameStateInit::UnregisterAutoStartTimer(boost::shared_ptr<ServerGame> server)
{
server->GetStateTimer2().cancel();
}
void
ServerGameStateInit::TimerAutoStart(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server)
{
if (!ec && &server->GetState() == this)
{
SendStartEvent(*server, false);
}
} }
void void
@@ -431,9 +464,9 @@ ServerGameStateInit::TimerAdminWarning(const boost::system::error_code &ec, boos
server->GetLobbyThread().GetSender().Send(session.sessionData, packet); server->GetLobbyThread().GetSender().Send(session.sessionData, packet);
} }
// Start timeout timer. // Start timeout timer.
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(SERVER_GAME_ADMIN_WARNING_REMAINING_SEC)); boost::posix_time::seconds(SERVER_GAME_ADMIN_WARNING_REMAINING_SEC));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateInit::TimerAdminTimeout, this, boost::asio::placeholders::error, server)); &ServerGameStateInit::TimerAdminTimeout, this, boost::asio::placeholders::error, server));
} }
@@ -590,9 +623,9 @@ ServerGameStateStartGame::~ServerGameStateStartGame()
void void
ServerGameStateStartGame::Enter(boost::shared_ptr<ServerGame> server) ServerGameStateStartGame::Enter(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(SERVER_START_GAME_TIMEOUT_SEC)); boost::posix_time::seconds(SERVER_START_GAME_TIMEOUT_SEC));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateStartGame::TimerTimeout, this, boost::asio::placeholders::error, server)); &ServerGameStateStartGame::TimerTimeout, this, boost::asio::placeholders::error, server));
} }
@@ -600,7 +633,7 @@ ServerGameStateStartGame::Enter(boost::shared_ptr<ServerGame> server)
void void
ServerGameStateStartGame::Exit(boost::shared_ptr<ServerGame> server) ServerGameStateStartGame::Exit(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer().cancel(); server->GetStateTimer1().cancel();
} }
void void
@@ -704,9 +737,9 @@ ServerGameStateHand::~ServerGameStateHand()
void void
ServerGameStateHand::Enter(boost::shared_ptr<ServerGame> server) ServerGameStateHand::Enter(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::milliseconds(SERVER_LOOP_DELAY_MSEC)); boost::posix_time::milliseconds(SERVER_LOOP_DELAY_MSEC));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateHand::TimerLoop, this, boost::asio::placeholders::error, server)); &ServerGameStateHand::TimerLoop, this, boost::asio::placeholders::error, server));
} }
@@ -714,7 +747,7 @@ ServerGameStateHand::Enter(boost::shared_ptr<ServerGame> server)
void void
ServerGameStateHand::Exit(boost::shared_ptr<ServerGame> server) ServerGameStateHand::Exit(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer().cancel(); server->GetStateTimer1().cancel();
} }
void void
@@ -797,9 +830,9 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
server->SendToAllPlayers(allIn, SessionData::Game); server->SendToAllPlayers(allIn, SessionData::Game);
curGame.getCurrentHand()->setCardsShown(true); curGame.getCurrentHand()->setCardsShown(true);
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(SERVER_SHOW_CARDS_DELAY_SEC)); boost::posix_time::seconds(SERVER_SHOW_CARDS_DELAY_SEC));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateHand::TimerShowCards, this, boost::asio::placeholders::error, server)); &ServerGameStateHand::TimerShowCards, this, boost::asio::placeholders::error, server));
} }
@@ -807,9 +840,9 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
{ {
SendNewRoundCards(*server, curGame, newRound); SendNewRoundCards(*server, curGame, newRound);
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(GetDealCardsDelaySec(*server))); boost::posix_time::seconds(GetDealCardsDelaySec(*server)));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateHand::TimerLoop, this, boost::asio::placeholders::error, server)); &ServerGameStateHand::TimerLoop, this, boost::asio::placeholders::error, server));
} }
@@ -839,9 +872,9 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
// If the player is computer controlled, let the engine act. // If the player is computer controlled, let the engine act.
if (curPlayer->getMyType() == PLAYER_TYPE_COMPUTER) if (curPlayer->getMyType() == PLAYER_TYPE_COMPUTER)
{ {
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(SERVER_COMPUTER_ACTION_DELAY_SEC)); boost::posix_time::seconds(SERVER_COMPUTER_ACTION_DELAY_SEC));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateHand::TimerComputerAction, this, boost::asio::placeholders::error, server)); &ServerGameStateHand::TimerComputerAction, this, boost::asio::placeholders::error, server));
} }
@@ -850,9 +883,9 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
{ {
PerformPlayerAction(*server, curPlayer, PLAYER_ACTION_FOLD, 0); PerformPlayerAction(*server, curPlayer, PLAYER_ACTION_FOLD, 0);
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::milliseconds(SERVER_LOOP_DELAY_MSEC)); boost::posix_time::milliseconds(SERVER_LOOP_DELAY_MSEC));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateHand::TimerLoop, this, boost::asio::placeholders::error, server)); &ServerGameStateHand::TimerLoop, this, boost::asio::placeholders::error, server));
} }
@@ -937,9 +970,9 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
server->InternalEndGame(); server->InternalEndGame();
// View a dialog for a new game - delayed. // View a dialog for a new game - delayed.
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(SERVER_DELAY_NEXT_GAME_SEC)); boost::posix_time::seconds(SERVER_DELAY_NEXT_GAME_SEC));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateHand::TimerNextGame, this, boost::asio::placeholders::error, server, winnerPlayer->getMyUniqueID())); &ServerGameStateHand::TimerNextGame, this, boost::asio::placeholders::error, server, winnerPlayer->getMyUniqueID()));
} }
@@ -959,9 +992,9 @@ ServerGameStateHand::TimerShowCards(const boost::system::error_code &ec, boost::
Game &curGame = server->GetGame(); Game &curGame = server->GetGame();
SendNewRoundCards(*server, curGame, curGame.getCurrentHand()->getCurrentRound()); SendNewRoundCards(*server, curGame, curGame.getCurrentHand()->getCurrentRound());
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(GetDealCardsDelaySec(*server))); boost::posix_time::seconds(GetDealCardsDelaySec(*server)));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateHand::TimerLoop, this, boost::asio::placeholders::error, server)); &ServerGameStateHand::TimerLoop, this, boost::asio::placeholders::error, server));
} }
@@ -1200,8 +1233,8 @@ ServerGameStateWaitPlayerAction::Enter(boost::shared_ptr<ServerGame> server)
int timeoutSec = server->GetGameData().playerActionTimeoutSec + SERVER_PLAYER_TIMEOUT_ADD_DELAY_SEC; int timeoutSec = server->GetGameData().playerActionTimeoutSec + SERVER_PLAYER_TIMEOUT_ADD_DELAY_SEC;
#endif #endif
server->GetStateTimer().expires_from_now(boost::posix_time::seconds(timeoutSec)); server->GetStateTimer1().expires_from_now(boost::posix_time::seconds(timeoutSec));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateWaitPlayerAction::TimerTimeout, this, boost::asio::placeholders::error, server)); &ServerGameStateWaitPlayerAction::TimerTimeout, this, boost::asio::placeholders::error, server));
} }
@@ -1209,7 +1242,7 @@ ServerGameStateWaitPlayerAction::Enter(boost::shared_ptr<ServerGame> server)
void void
ServerGameStateWaitPlayerAction::Exit(boost::shared_ptr<ServerGame> server) ServerGameStateWaitPlayerAction::Exit(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer().cancel(); server->GetStateTimer1().cancel();
} }
void void
@@ -1346,10 +1379,10 @@ ServerGameStateWaitNextHand::Enter(boost::shared_ptr<ServerGame> server)
int timeoutSec = server->GetGameData().delayBetweenHandsSec; int timeoutSec = server->GetGameData().delayBetweenHandsSec;
#endif #endif
server->GetStateTimer().expires_from_now( server->GetStateTimer1().expires_from_now(
boost::posix_time::seconds(timeoutSec)); boost::posix_time::seconds(timeoutSec));
server->GetStateTimer().async_wait( server->GetStateTimer1().async_wait(
boost::bind( boost::bind(
&ServerGameStateWaitNextHand::TimerTimeout, this, boost::asio::placeholders::error, server)); &ServerGameStateWaitNextHand::TimerTimeout, this, boost::asio::placeholders::error, server));
} }
@@ -1357,7 +1390,7 @@ ServerGameStateWaitNextHand::Enter(boost::shared_ptr<ServerGame> server)
void void
ServerGameStateWaitNextHand::Exit(boost::shared_ptr<ServerGame> server) ServerGameStateWaitNextHand::Exit(boost::shared_ptr<ServerGame> server)
{ {
server->GetStateTimer().cancel(); server->GetStateTimer1().cancel();
} }
void void
+4 -2
View File
@@ -139,7 +139,8 @@ protected:
ServerGameState &GetState(); ServerGameState &GetState();
void SetState(ServerGameState &newState); void SetState(ServerGameState &newState);
boost::asio::deadline_timer &GetStateTimer(); boost::asio::deadline_timer &GetStateTimer1();
boost::asio::deadline_timer &GetStateTimer2();
ReceiverHelper &GetReceiver(); ReceiverHelper &GetReceiver();
@@ -188,7 +189,8 @@ private:
unsigned m_gameNum; unsigned m_gameNum;
unsigned m_curPetitionId; unsigned m_curPetitionId;
boost::asio::deadline_timer m_voteKickTimer; boost::asio::deadline_timer m_voteKickTimer;
boost::asio::deadline_timer m_stateTimer; boost::asio::deadline_timer m_stateTimer1;
boost::asio::deadline_timer m_stateTimer2;
friend class ServerLobbyThread; friend class ServerLobbyThread;
friend class AbstractServerGameStateReceiving; friend class AbstractServerGameStateReceiving;
+10
View File
@@ -45,6 +45,7 @@ public:
virtual void Exit(boost::shared_ptr<ServerGame> server) = 0; virtual void Exit(boost::shared_ptr<ServerGame> server) = 0;
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> server) = 0; virtual void NotifyGameAdminChanged(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, SessionWrapper session) = 0;
@@ -79,6 +80,7 @@ public:
virtual ~ServerGameStateInit(); virtual ~ServerGameStateInit();
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 HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session); virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
@@ -87,6 +89,9 @@ protected:
void RegisterAdminTimer(boost::shared_ptr<ServerGame> server); void RegisterAdminTimer(boost::shared_ptr<ServerGame> server);
void UnregisterAdminTimer(boost::shared_ptr<ServerGame> server); void UnregisterAdminTimer(boost::shared_ptr<ServerGame> server);
void RegisterAutoStartTimer(boost::shared_ptr<ServerGame> server);
void UnregisterAutoStartTimer(boost::shared_ptr<ServerGame> server);
void TimerAutoStart(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
void TimerAdminWarning(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server); void TimerAdminWarning(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 TimerAdminTimeout(const boost::system::error_code &ec, boost::shared_ptr<ServerGame> server);
void SendStartEvent(ServerGame &server, bool fillWithComputerPlayers); void SendStartEvent(ServerGame &server, bool fillWithComputerPlayers);
@@ -110,6 +115,7 @@ public:
virtual ~ServerGameStateStartGame(); virtual ~ServerGameStateStartGame();
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 HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session); virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
protected: protected:
@@ -134,6 +140,7 @@ public:
virtual ~ServerGameStateHand(); virtual ~ServerGameStateHand();
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 HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session); virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
protected: protected:
@@ -167,6 +174,7 @@ public:
virtual ~ServerGameStateWaitPlayerAction(); virtual ~ServerGameStateWaitPlayerAction();
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 HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session); virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
protected: protected:
@@ -190,6 +198,7 @@ public:
virtual ~ServerGameStateWaitNextHand(); virtual ~ServerGameStateWaitNextHand();
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 HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session); virtual void HandleNewSession(boost::shared_ptr<ServerGame> server, SessionWrapper session);
protected: protected:
@@ -212,6 +221,7 @@ public:
virtual void Exit(boost::shared_ptr<ServerGame> /*server*/) {} virtual void Exit(boost::shared_ptr<ServerGame> /*server*/) {}
virtual void NotifyGameAdminChanged(boost::shared_ptr<ServerGame> /*server*/) {} virtual void NotifyGameAdminChanged(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*/, SessionWrapper /*session*/) {}