From b7b09aed0b27784352094030d1f0e54899776764 Mon Sep 17 00:00:00 2001 From: lotodore Date: Sat, 2 Jun 2007 16:35:41 +0000 Subject: [PATCH] Fixed bug when folding after raising. --- docs/net_protocol.txt | 4 ++-- src/net/common/clientthread.cpp | 6 +++++- src/net/common/serverrecvstate.cpp | 23 ++++++++++++++++------- src/net/serverrecvstate.h | 3 +++ 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/docs/net_protocol.txt b/docs/net_protocol.txt index f7602e86..2499235d 100644 --- a/docs/net_protocol.txt +++ b/docs/net_protocol.txt @@ -175,8 +175,8 @@ Player Action: 0x05 - Raise 0x06 - All in Player Bet: - 0 (ignored) - states fold, check, call, all in - > 0 - states bet, raise + 0 (ignored) - states fold, check, + > 0 - states call, bet, raise, all in Server Notification: Player's Action Done diff --git a/src/net/common/clientthread.cpp b/src/net/common/clientthread.cpp index a319cf20..44ad8e62 100644 --- a/src/net/common/clientthread.cpp +++ b/src/net/common/clientthread.cpp @@ -90,7 +90,11 @@ ClientThread::SendPlayerAction() NetPacketPlayersAction::Data actionData; actionData.gameState = static_cast(GetGame()->getCurrentHand()->getActualRound()); actionData.playerAction = static_cast(GetGame()->getPlayerArray()[0]->getMyAction()); - actionData.playerBet = GetGame()->getPlayerArray()[0]->getMyLastRelativeSet(); + // Only send last bet if not fold/checked. + if (actionData.playerAction != PLAYER_ACTION_FOLD && actionData.playerAction != PLAYER_ACTION_CHECK) + actionData.playerBet = GetGame()->getPlayerArray()[0]->getMyLastRelativeSet(); + else + actionData.playerBet = 0; static_cast(action.get())->SetData(actionData); // The sender is thread-safe, so just dump the packet. GetSender().Send(GetContext().GetSocket(), action); diff --git a/src/net/common/serverrecvstate.cpp b/src/net/common/serverrecvstate.cpp index 3adcacf3..c64194a2 100644 --- a/src/net/common/serverrecvstate.cpp +++ b/src/net/common/serverrecvstate.cpp @@ -670,10 +670,14 @@ ServerRecvStateWaitPlayerAction::InternalProcess(ServerRecvThread &server, Sessi assert(tmpPlayer); // TODO throw exception tmpPlayer->setMyAction(actionData.playerAction); - tmpPlayer->setMySet(actionData.playerBet); + // Only change the player bet if action is not fold/check + if (actionData.playerAction != PLAYER_ACTION_FOLD && actionData.playerAction != PLAYER_ACTION_CHECK) + { + tmpPlayer->setMySet(actionData.playerBet); - if (tmpPlayer->getMySet() > GetHighestSet(curGame)) - SetHighestSet(curGame, tmpPlayer->getMySet()); + if (tmpPlayer->getMySet() > GetHighestSet(curGame)) + SetHighestSet(curGame, tmpPlayer->getMySet()); + } boost::shared_ptr notifyActionDone(new NetPacketPlayersActionDone); NetPacketPlayersActionDone::Data actionDoneData; @@ -766,12 +770,19 @@ ServerRecvStateNextHand::SetTimer(const boost::microsec_timer &timer) } int -ServerRecvStateNextHand::InternalProcess(ServerRecvThread &server, SessionWrapper session, boost::shared_ptr packet) +ServerRecvStateNextHand::Process(ServerRecvThread &server) { + int retVal = ServerRecvStateReceiving::Process(server); + if (m_delayTimer.elapsed().seconds() >= SERVER_NEXT_HAND_DELAY_SEC) server.SetState(ServerRecvStateStartHand::Instance()); - Thread::Msleep(10); + return retVal; +} + +int +ServerRecvStateNextHand::InternalProcess(ServerRecvThread &server, SessionWrapper session, boost::shared_ptr packet) +{ return MSG_SOCK_INTERNAL_PENDING; } @@ -795,8 +806,6 @@ ServerRecvStateFinal::~ServerRecvStateFinal() int ServerRecvStateFinal::InternalProcess(ServerRecvThread &server, SessionWrapper session, boost::shared_ptr packet) { - Thread::Msleep(10); - return MSG_SOCK_INTERNAL_PENDING; } diff --git a/src/net/serverrecvstate.h b/src/net/serverrecvstate.h index 8cd50359..6a495fd8 100644 --- a/src/net/serverrecvstate.h +++ b/src/net/serverrecvstate.h @@ -190,6 +190,9 @@ public: virtual ~ServerRecvStateNextHand(); + // Overwrite default processing + virtual int Process(ServerRecvThread &server); + void SetTimer(const boost::microsec_timer &timer); protected: