Send timeout warning when autofold is active.

This commit is contained in:
lotodore
2011-12-18 20:34:04 +00:00
parent cd00a67d1f
commit 05d4b67a50
+29 -11
View File
@@ -183,17 +183,6 @@ static void PerformPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInte
} }
SendPlayerAction(server, player); SendPlayerAction(server, player);
// Check timeout.
int actionTimeout = server.GetGameData().playerActionTimeoutSec;
if (actionTimeout) {
if (player->getTimeSecSinceLastRemoteAction() >= actionTimeout * SERVER_GAME_AUTOFOLD_TIMEOUT_FACTOR) {
player->setIsSessionActive(false);
if (player->getTimeSecSinceLastRemoteAction() >= actionTimeout * SERVER_GAME_FORCED_TIMEOUT_FACTOR) {
server.KickPlayer(player->getMyUniqueID());
}
}
}
} }
static void static void
@@ -365,6 +354,13 @@ AbstractServerGameStateReceiving::ProcessPacket(boost::shared_ptr<ServerGame> se
netReportAck->reportResult = reportResult_avatarReportInvalid; netReportAck->reportResult = reportResult_avatarReportInvalid;
server->GetLobbyThread().GetSender().Send(session, packet); server->GetLobbyThread().GetSender().Send(session, packet);
} }
} else if (packet->GetMsg()->present == PokerTHMessage_PR_resetTimeoutMessage) {
// Reactivate session.
if (server->IsRunning()) {
boost::shared_ptr<PlayerInterface> tmpPlayer = server->GetGame().getPlayerByUniqueId(session->GetPlayerData()->GetUniqueId());
if (tmpPlayer) {
tmpPlayer->setIsSessionActive(true);
}
} else { } else {
// Packet processing in subclass. // Packet processing in subclass.
InternalProcessPacket(server, session, packet); InternalProcessPacket(server, session, packet);
@@ -954,6 +950,28 @@ ServerGameStateHand::EngineLoop(boost::shared_ptr<ServerGame> server)
&ServerGameStateHand::TimerComputerAction, this, boost::asio::placeholders::error, server)); &ServerGameStateHand::TimerComputerAction, this, boost::asio::placeholders::error, server));
} }
else { else {
// Check timeout.
int actionTimeout = server->GetGameData().playerActionTimeoutSec;
if (actionTimeout) {
if (curPlayer->getTimeSecSinceLastRemoteAction() >= actionTimeout * SERVER_GAME_AUTOFOLD_TIMEOUT_FACTOR) {
if (curPlayer->isSessionActive()) {
curPlayer->setIsSessionActive(false);
boost::shared_ptr<SessionData> session = server->GetSessionManager().GetSessionByUniquePlayerId(server->GetAdminPlayerId());
if (session) {
boost::shared_ptr<NetPacket> packet(new NetPacket(NetPacket::Alloc));
packet->GetMsg()->present = PokerTHMessage_PR_timeoutWarningMessage;
TimeoutWarningMessage_t *netWarning = &packet->GetMsg()->choice.timeoutWarningMessage;
netWarning->timeoutReason = NETWORK_TIMEOUT_GENERIC;
netWarning->remainingSeconds = actionTimeout * SERVER_GAME_FORCED_TIMEOUT_FACTOR - curPlayer->getTimeSecSinceLastRemoteAction();
server->GetLobbyThread().GetSender().Send(session, packet);
}
}
if (curPlayer->getTimeSecSinceLastRemoteAction() >= actionTimeout * SERVER_GAME_FORCED_TIMEOUT_FACTOR) {
server->KickPlayer(curPlayer->getMyUniqueID());
}
}
}
// If the player we are waiting for left, continue without him. // If the player we are waiting for left, continue without him.
if (!server->GetSessionManager().IsPlayerConnected(curPlayer->getMyUniqueID()) if (!server->GetSessionManager().IsPlayerConnected(curPlayer->getMyUniqueID())
|| !curPlayer->isSessionActive()) { || !curPlayer->isSessionActive()) {