From fab224c8adec052d7d63f807a3fe7afcf323db32 Mon Sep 17 00:00:00 2001 From: lotodore Date: Sun, 31 May 2009 13:47:10 +0000 Subject: [PATCH] Fixing some timer problems. Starting an internet game now works again. There are still some issues: Games are never terminated, and error handling is not implemented (errors will terminate the server). --- src/net/common/servergamestate.cpp | 7 ++++--- src/net/common/servergamethread.cpp | 5 ++++- src/net/servergamestate.h | 1 - 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/net/common/servergamestate.cpp b/src/net/common/servergamestate.cpp index 0dc331c2..294a101e 100644 --- a/src/net/common/servergamestate.cpp +++ b/src/net/common/servergamestate.cpp @@ -630,7 +630,6 @@ ServerGameStateStartGame::InternalProcessPacket(ServerGameThread &server, Sessio // Everyone is ready. server.GetSessionManager().ResetAllReadyFlags(); DoStart(server); - server.SetState(SERVER_START_GAME_STATE::Instance()); retVal = MSG_SOCK_INIT_DONE; } } @@ -646,7 +645,6 @@ ServerGameStateStartGame::TimerTimeout(ServerGameThread &server) // TODO report successful start! -> new callback?! //retVal = MSG_SOCK_INIT_DONE; DoStart(server); - server.SetState(SERVER_START_GAME_STATE::Instance()); } void @@ -843,6 +841,10 @@ ServerGameStateHand::TimerLoop(ServerGameThread &server) else if (!server.GetSessionManager().IsPlayerConnected(curPlayer->getMyName())) { PerformPlayerAction(server, curPlayer, PLAYER_ACTION_FOLD, 0); + server.SetStateTimerId( + server.GetLobbyThread().GetTimerManager().RegisterTimer( + SERVER_LOOP_DELAY_MSEC, + boost::bind(&ServerGameStateHand::TimerLoop, this, boost::ref(server)))); } else { @@ -936,7 +938,6 @@ ServerGameStateHand::TimerLoop(ServerGameThread &server) } } } - // TODO if not state changed and not timer set, set new loop timer. } void diff --git a/src/net/common/servergamethread.cpp b/src/net/common/servergamethread.cpp index 5dc5f934..e7616aa4 100644 --- a/src/net/common/servergamethread.cpp +++ b/src/net/common/servergamethread.cpp @@ -41,7 +41,7 @@ using namespace std; ServerGameThread::ServerGameThread(ServerLobbyThread &lobbyThread, u_int32_t id, const string &name, const string &pwd, const GameData &gameData, unsigned adminPlayerId, GuiInterface &gui, ConfigFile *playerConfig) : m_adminPlayerId(adminPlayerId), m_lobbyThread(lobbyThread), m_gui(gui), - m_gameData(gameData), m_id(id), m_name(name), m_password(pwd), m_playerConfig(playerConfig), + m_gameData(gameData), m_curState(NULL), m_id(id), m_name(name), m_password(pwd), m_playerConfig(playerConfig), m_gameNum(1), m_curPetitionId(1), m_stateTimerId(0) { LOG_VERBOSE("Game object " << GetId() << " created."); @@ -721,7 +721,10 @@ ServerGameThread::GetState() void ServerGameThread::SetState(ServerGameState &newState) { + if (m_curState) + m_curState->Exit(*this); m_curState = &newState; + m_curState->Enter(*this); } unsigned diff --git a/src/net/servergamestate.h b/src/net/servergamestate.h index 1676533c..6d156164 100644 --- a/src/net/servergamestate.h +++ b/src/net/servergamestate.h @@ -31,7 +31,6 @@ #endif #define SERVER_INITIAL_STATE ServerGameStateInit -#define SERVER_START_GAME_STATE ServerGameStateStartGame class Game; class PlayerInterface;