AFK players are now kicked from ranking games after some timeouts if they do not enable autocheck/fold.
This commit is contained in:
@@ -850,7 +850,7 @@ static const RoundData FlopValues[] =
|
|||||||
#define NUM_FLOP_VALUES (sizeof(FlopValues)/sizeof(RoundData))
|
#define NUM_FLOP_VALUES (sizeof(FlopValues)/sizeof(RoundData))
|
||||||
|
|
||||||
LocalPlayer::LocalPlayer(ConfigFile *c, BoardInterface *b, int id, unsigned uniqueId, PlayerType type, std::string name, std::string avatar, int sC, bool aS, int mB)
|
LocalPlayer::LocalPlayer(ConfigFile *c, BoardInterface *b, int id, unsigned uniqueId, PlayerType type, std::string name, std::string avatar, int sC, bool aS, int mB)
|
||||||
: PlayerInterface(), myConfig(c), currentHand(0), currentBoard(b), myCardsValue(0), myID(id), myUniqueID(uniqueId), myType(type), myName(name), myAvatar(avatar), myDude(0), myDude4(0), myCardsValueInt(0), myOdds(-1.0), myCash(sC), mySet(0), myLastRelativeSet(0), myAction(0), myButton(mB), myActiveStatus(aS), myStayOnTableStatus(1), myTurn(0), myRoundStartCash(0), lastMoneyWon(0), sBluff(0), sBluffStatus(0)
|
: PlayerInterface(), myConfig(c), currentHand(0), currentBoard(b), myCardsValue(0), myID(id), myUniqueID(uniqueId), myType(type), myName(name), myAvatar(avatar), myDude(0), myDude4(0), myCardsValueInt(0), myOdds(-1.0), myCash(sC), mySet(0), myLastRelativeSet(0), myAction(0), myButton(mB), myActiveStatus(aS), myStayOnTableStatus(1), myTurn(0), myRoundStartCash(0), lastMoneyWon(0), sBluff(0), sBluffStatus(0), m_actionTimeoutCounter(0)
|
||||||
{
|
{
|
||||||
|
|
||||||
// !!!!!!!!!!!!!!!!!!!!!!!! testing !!!!!!!!!!!!!!!!!!!!!!!!
|
// !!!!!!!!!!!!!!!!!!!!!!!! testing !!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
@@ -4911,6 +4911,24 @@ boost::shared_ptr<SessionData> LocalPlayer::getNetSessionData()
|
|||||||
return myNetSessionData;
|
return myNetSessionData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unsigned
|
||||||
|
LocalPlayer::getActionTimeoutCounter() const
|
||||||
|
{
|
||||||
|
return m_actionTimeoutCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
LocalPlayer::incrementActionTimeoutCounter()
|
||||||
|
{
|
||||||
|
m_actionTimeoutCounter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
LocalPlayer::resetActionTimeoutCounter()
|
||||||
|
{
|
||||||
|
m_actionTimeoutCounter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
bool LocalPlayer::checkIfINeedToShowCards()
|
bool LocalPlayer::checkIfINeedToShowCards()
|
||||||
{
|
{
|
||||||
std::list<unsigned> playerNeedToShowCardsList = currentBoard->getPlayerNeedToShowCards();
|
std::list<unsigned> playerNeedToShowCardsList = currentBoard->getPlayerNeedToShowCards();
|
||||||
|
|||||||
@@ -179,8 +179,11 @@ public:
|
|||||||
void setNetSessionData(boost::shared_ptr<SessionData> session);
|
void setNetSessionData(boost::shared_ptr<SessionData> session);
|
||||||
boost::shared_ptr<SessionData> getNetSessionData();
|
boost::shared_ptr<SessionData> getNetSessionData();
|
||||||
|
|
||||||
bool checkIfINeedToShowCards();
|
unsigned getActionTimeoutCounter() const;
|
||||||
|
void incrementActionTimeoutCounter();
|
||||||
|
void resetActionTimeoutCounter();
|
||||||
|
|
||||||
|
bool checkIfINeedToShowCards();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
@@ -227,6 +230,7 @@ private:
|
|||||||
|
|
||||||
bool myWinnerState;
|
bool myWinnerState;
|
||||||
|
|
||||||
|
unsigned m_actionTimeoutCounter;
|
||||||
boost::shared_ptr<SessionData> myNetSessionData;
|
boost::shared_ptr<SessionData> myNetSessionData;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -71,8 +71,8 @@ public:
|
|||||||
void setMyActiveStatus(bool theValue);
|
void setMyActiveStatus(bool theValue);
|
||||||
bool getMyActiveStatus() const;
|
bool getMyActiveStatus() const;
|
||||||
|
|
||||||
void setMyStayOnTableStatus(bool theValue);
|
void setMyStayOnTableStatus(bool theValue);
|
||||||
bool getMyStayOnTableStatus() const;
|
bool getMyStayOnTableStatus() const;
|
||||||
|
|
||||||
void setMyCards(int* theValue);
|
void setMyCards(int* theValue);
|
||||||
void getMyCards(int* theValue) const;
|
void getMyCards(int* theValue) const;
|
||||||
@@ -134,6 +134,13 @@ public:
|
|||||||
void setNetSessionData(boost::shared_ptr<SessionData> session);
|
void setNetSessionData(boost::shared_ptr<SessionData> session);
|
||||||
boost::shared_ptr<SessionData> getNetSessionData();
|
boost::shared_ptr<SessionData> getNetSessionData();
|
||||||
|
|
||||||
|
// unused as client
|
||||||
|
unsigned getActionTimeoutCounter() const {return 0;}
|
||||||
|
void incrementActionTimeoutCounter() {}
|
||||||
|
void resetActionTimeoutCounter() {}
|
||||||
|
|
||||||
|
bool checkIfINeedToShowCards();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
mutable boost::recursive_mutex m_syncMutex;
|
mutable boost::recursive_mutex m_syncMutex;
|
||||||
|
|
||||||
@@ -181,8 +188,6 @@ private:
|
|||||||
bool myWinnerState;
|
bool myWinnerState;
|
||||||
|
|
||||||
boost::shared_ptr<SessionData> myNetSessionData;
|
boost::shared_ptr<SessionData> myNetSessionData;
|
||||||
|
|
||||||
bool checkIfINeedToShowCards();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -116,7 +116,11 @@ public:
|
|||||||
virtual void setNetSessionData(boost::shared_ptr<SessionData> session) =0;
|
virtual void setNetSessionData(boost::shared_ptr<SessionData> session) =0;
|
||||||
virtual boost::shared_ptr<SessionData> getNetSessionData() =0;
|
virtual boost::shared_ptr<SessionData> getNetSessionData() =0;
|
||||||
|
|
||||||
virtual bool checkIfINeedToShowCards() =0;
|
virtual unsigned getActionTimeoutCounter() const =0;
|
||||||
|
virtual void incrementActionTimeoutCounter() =0;
|
||||||
|
virtual void resetActionTimeoutCounter() =0;
|
||||||
|
|
||||||
|
virtual bool checkIfINeedToShowCards() =0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -749,6 +749,11 @@ AbstractClientStateReceiving::HandlePacket(boost::shared_ptr<ClientThread> clien
|
|||||||
TimeoutWarningMessage_t *tmpTimeout = &tmpPacket->GetMsg()->choice.timeoutWarningMessage;
|
TimeoutWarningMessage_t *tmpTimeout = &tmpPacket->GetMsg()->choice.timeoutWarningMessage;
|
||||||
client->GetCallback().SignalNetClientShowTimeoutDialog((NetTimeoutReason)tmpTimeout->timeoutReason, tmpTimeout->remainingSeconds);
|
client->GetCallback().SignalNetClientShowTimeoutDialog((NetTimeoutReason)tmpTimeout->timeoutReason, tmpTimeout->remainingSeconds);
|
||||||
}
|
}
|
||||||
|
else if (tmpPacket->GetMsg()->present == PokerTHMessage_PR_afkWarningMessage)
|
||||||
|
{
|
||||||
|
AfkWarningMessage_t *tmpAfk = &tmpPacket->GetMsg()->choice.afkWarningMessage;
|
||||||
|
client->GetCallback().SignalNetClientWarningAutoFoldInRankingGame(tmpAfk->remainingTimeouts);
|
||||||
|
}
|
||||||
else if (tmpPacket->GetMsg()->present == PokerTHMessage_PR_chatMessage)
|
else if (tmpPacket->GetMsg()->present == PokerTHMessage_PR_chatMessage)
|
||||||
{
|
{
|
||||||
// Chat message - display it in the GUI.
|
// Chat message - display it in the GUI.
|
||||||
|
|||||||
@@ -68,6 +68,9 @@ using namespace std;
|
|||||||
#define SERVER_VOTE_KICK_TIMEOUT_SEC 30
|
#define SERVER_VOTE_KICK_TIMEOUT_SEC 30
|
||||||
#define SERVER_LOOP_DELAY_MSEC 50
|
#define SERVER_LOOP_DELAY_MSEC 50
|
||||||
|
|
||||||
|
#define SERVER_WARNING_ACTION_TIMEOUT_THRESHOLD 6
|
||||||
|
#define SERVER_KICK_ACTION_TIMEOUT_REMAINING 2
|
||||||
|
|
||||||
// Helper functions
|
// Helper functions
|
||||||
|
|
||||||
static void SendPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInterface> player)
|
static void SendPlayerAction(ServerGame &server, boost::shared_ptr<PlayerInterface> player)
|
||||||
@@ -1345,7 +1348,7 @@ ServerGameStateWaitPlayerAction::TimerTimeout(const boost::system::error_code &e
|
|||||||
Game &curGame = server->GetGame();
|
Game &curGame = server->GetGame();
|
||||||
// Retrieve current player.
|
// Retrieve current player.
|
||||||
boost::shared_ptr<PlayerInterface> curPlayer = curGame.getCurrentPlayer();
|
boost::shared_ptr<PlayerInterface> curPlayer = curGame.getCurrentPlayer();
|
||||||
if (!curPlayer.get())
|
if (!curPlayer)
|
||||||
throw ServerException(__FILE__, __LINE__, ERR_NET_NO_CURRENT_PLAYER, 0);
|
throw ServerException(__FILE__, __LINE__, ERR_NET_NO_CURRENT_PLAYER, 0);
|
||||||
|
|
||||||
// Player did not act fast enough. Act for him.
|
// Player did not act fast enough. Act for him.
|
||||||
@@ -1354,6 +1357,24 @@ ServerGameStateWaitPlayerAction::TimerTimeout(const boost::system::error_code &e
|
|||||||
else
|
else
|
||||||
PerformPlayerAction(*server, curPlayer, PLAYER_ACTION_FOLD, 0);
|
PerformPlayerAction(*server, curPlayer, PLAYER_ACTION_FOLD, 0);
|
||||||
|
|
||||||
|
curPlayer->incrementActionTimeoutCounter();
|
||||||
|
|
||||||
|
if (server->GetGameData().gameType == GAME_TYPE_RANKING
|
||||||
|
&& server->GetGameData().playerActionTimeoutSec >= 10)
|
||||||
|
{
|
||||||
|
if (curPlayer->getActionTimeoutCounter() == SERVER_WARNING_ACTION_TIMEOUT_THRESHOLD)
|
||||||
|
{
|
||||||
|
boost::shared_ptr<NetPacket> warning(new NetPacket(NetPacket::Alloc));
|
||||||
|
warning->GetMsg()->present = PokerTHMessage_PR_afkWarningMessage;
|
||||||
|
AfkWarningMessage_t *netWarning = &warning->GetMsg()->choice.afkWarningMessage;
|
||||||
|
netWarning->remainingTimeouts = SERVER_KICK_ACTION_TIMEOUT_REMAINING;
|
||||||
|
server->GetLobbyThread().GetSender().Send(curPlayer->getNetSessionData(), warning);
|
||||||
|
}
|
||||||
|
else if (curPlayer->getActionTimeoutCounter() > SERVER_WARNING_ACTION_TIMEOUT_THRESHOLD + SERVER_KICK_ACTION_TIMEOUT_REMAINING)
|
||||||
|
{
|
||||||
|
server->InternalKickPlayer(curPlayer->getMyUniqueID());
|
||||||
|
}
|
||||||
|
}
|
||||||
server->SetState(ServerGameStateHand::Instance());
|
server->SetState(ServerGameStateHand::Instance());
|
||||||
}
|
}
|
||||||
catch (const PokerTHException &e)
|
catch (const PokerTHException &e)
|
||||||
|
|||||||
Reference in New Issue
Block a user