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
+10 -3
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,6 +932,8 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
++i;
}
if (winnerPlayer)
{
boost::shared_ptr<NetPacket> endGame(new NetPacketEndOfGame);
NetPacketEndOfGame::Data endGameData;
endGameData.winnerPlayerId = winnerPlayer->getMyUniqueID();
@@ -946,6 +947,12 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
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.
}
}
}
int