Handle the case if there is no winner in a game.

This commit is contained in:
lotodore
2009-07-13 18:10:11 +00:00
parent 0d9a246fc1
commit 398805a136
+20 -13
View File
@@ -920,11 +920,10 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
{
if (!ec && &server->GetState() == this)
{
Game &curGame = server->GetGame();
// The game has ended. Notify all clients.
boost::shared_ptr<PlayerInterface> winnerPlayer;
PlayerListIterator i = curGame.getActivePlayerList()->begin();
PlayerListIterator end = curGame.getActivePlayerList()->end();
PlayerListIterator i = server->GetGame().getActivePlayerList()->begin();
PlayerListIterator end = server->GetGame().getActivePlayerList()->end();
while (i != end)
{
winnerPlayer = *i;
@@ -933,18 +932,26 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
++i;
}
boost::shared_ptr<NetPacket> endGame(new NetPacketEndOfGame);
NetPacketEndOfGame::Data endGameData;
endGameData.winnerPlayerId = winnerPlayer->getMyUniqueID();
static_cast<NetPacketEndOfGame *>(endGame.get())->SetData(endGameData);
if (winnerPlayer)
{
boost::shared_ptr<NetPacket> endGame(new NetPacketEndOfGame);
NetPacketEndOfGame::Data endGameData;
endGameData.winnerPlayerId = winnerPlayer->getMyUniqueID();
static_cast<NetPacketEndOfGame *>(endGame.get())->SetData(endGameData);
server->SendToAllPlayers(endGame, SessionData::Game);
server->SendToAllPlayers(endGame, SessionData::Game);
// Wait for the start of a new game.
server->ResetComputerPlayerList();
server->ResetGame();
server->GetLobbyThread().NotifyReopeningGame(server->GetId());
server->SetState(ServerGameStateInit::Instance());
// Wait for the start of a new game.
server->ResetComputerPlayerList();
server->ResetGame();
server->GetLobbyThread().NotifyReopeningGame(server->GetId());
server->SetState(ServerGameStateInit::Instance());
}
else
{
LOG_ERROR("Game " << server->GetId() << " - Has no winner!");
server->RemoveAllSessions(); // This is fatal, close this game.
}
}
}