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).

This commit is contained in:
lotodore
2009-05-31 13:47:10 +00:00
parent 59358bff0e
commit fab224c8ad
3 changed files with 8 additions and 5 deletions
+4 -3
View File
@@ -630,7 +630,6 @@ ServerGameStateStartGame::InternalProcessPacket(ServerGameThread &server, Sessio
// Everyone is ready. // Everyone is ready.
server.GetSessionManager().ResetAllReadyFlags(); server.GetSessionManager().ResetAllReadyFlags();
DoStart(server); DoStart(server);
server.SetState(SERVER_START_GAME_STATE::Instance());
retVal = MSG_SOCK_INIT_DONE; retVal = MSG_SOCK_INIT_DONE;
} }
} }
@@ -646,7 +645,6 @@ ServerGameStateStartGame::TimerTimeout(ServerGameThread &server)
// TODO report successful start! -> new callback?! // TODO report successful start! -> new callback?!
//retVal = MSG_SOCK_INIT_DONE; //retVal = MSG_SOCK_INIT_DONE;
DoStart(server); DoStart(server);
server.SetState(SERVER_START_GAME_STATE::Instance());
} }
void void
@@ -843,6 +841,10 @@ ServerGameStateHand::TimerLoop(ServerGameThread &server)
else if (!server.GetSessionManager().IsPlayerConnected(curPlayer->getMyName())) else if (!server.GetSessionManager().IsPlayerConnected(curPlayer->getMyName()))
{ {
PerformPlayerAction(server, curPlayer, PLAYER_ACTION_FOLD, 0); 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 else
{ {
@@ -936,7 +938,6 @@ ServerGameStateHand::TimerLoop(ServerGameThread &server)
} }
} }
} }
// TODO if not state changed and not timer set, set new loop timer.
} }
void void
+4 -1
View File
@@ -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) 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_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) m_gameNum(1), m_curPetitionId(1), m_stateTimerId(0)
{ {
LOG_VERBOSE("Game object " << GetId() << " created."); LOG_VERBOSE("Game object " << GetId() << " created.");
@@ -721,7 +721,10 @@ ServerGameThread::GetState()
void void
ServerGameThread::SetState(ServerGameState &newState) ServerGameThread::SetState(ServerGameState &newState)
{ {
if (m_curState)
m_curState->Exit(*this);
m_curState = &newState; m_curState = &newState;
m_curState->Enter(*this);
} }
unsigned unsigned
-1
View File
@@ -31,7 +31,6 @@
#endif #endif
#define SERVER_INITIAL_STATE ServerGameStateInit #define SERVER_INITIAL_STATE ServerGameStateInit
#define SERVER_START_GAME_STATE ServerGameStateStartGame
class Game; class Game;
class PlayerInterface; class PlayerInterface;