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) if (!ec && &server->GetState() == this)
{ {
Game &curGame = server->GetGame();
// The game has ended. Notify all clients. // The game has ended. Notify all clients.
boost::shared_ptr<PlayerInterface> winnerPlayer; boost::shared_ptr<PlayerInterface> winnerPlayer;
PlayerListIterator i = curGame.getActivePlayerList()->begin(); PlayerListIterator i = server->GetGame().getActivePlayerList()->begin();
PlayerListIterator end = curGame.getActivePlayerList()->end(); PlayerListIterator end = server->GetGame().getActivePlayerList()->end();
while (i != end) while (i != end)
{ {
winnerPlayer = *i; winnerPlayer = *i;
@@ -933,18 +932,26 @@ ServerGameStateHand::TimerNextGame(const boost::system::error_code &ec, boost::s
++i; ++i;
} }
boost::shared_ptr<NetPacket> endGame(new NetPacketEndOfGame); if (winnerPlayer)
NetPacketEndOfGame::Data endGameData; {
endGameData.winnerPlayerId = winnerPlayer->getMyUniqueID(); boost::shared_ptr<NetPacket> endGame(new NetPacketEndOfGame);
static_cast<NetPacketEndOfGame *>(endGame.get())->SetData(endGameData); 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. // Wait for the start of a new game.
server->ResetComputerPlayerList(); server->ResetComputerPlayerList();
server->ResetGame(); server->ResetGame();
server->GetLobbyThread().NotifyReopeningGame(server->GetId()); server->GetLobbyThread().NotifyReopeningGame(server->GetId());
server->SetState(ServerGameStateInit::Instance()); server->SetState(ServerGameStateInit::Instance());
}
else
{
LOG_ERROR("Game " << server->GetId() << " - Has no winner!");
server->RemoveAllSessions(); // This is fatal, close this game.
}
} }
} }