Example #1
0
        protected override List <HandAction> AdjustHandActions(List <HandAction> actions)
        {
            actions = RaiseAdjuster.AdjustRaiseSizesAndCalls(actions);
            actions = UncalledBet.Fix(actions);

            return(actions);
        }
Example #2
0
        public List <HandAction> ParseHandActions(string handText, out List <WinningsAction> winners)
        {
            try
            {
                var handactions = ParseHandActions(GetCategories(handText).Action, out winners);

                if (RequiresAdjustedRaiseSizes)
                {
                    handactions = RaiseAdjuster.AdjustRaiseSizes(handactions);
                }
                if (RequiresAllInDetection)
                {
                    var playerList = ParsePlayers(Lines.Seat);
                    handactions = AllInActionHelper.IdentifyAllInActions(playerList, handactions);
                }
                if (RequiresAllInUpdates)
                {
                    handactions = AllInActionHelper.UpdateAllInActions(handactions);
                }
                if (RequiresUncalledBetWinAdjustment)
                {
                    winners = UncalledBet.FixUncalledBetWins(handactions, winners);
                }

                return(handactions);
            }
            catch (Exception ex)
            {
                throw new HandActionException(handText, "ParseHandActions: Error:" + ex.Message + " Stack:" + ex.StackTrace);
            }
        }
Example #3
0
        void TestUncalledbetWinsAdjustment(string expectedPlayer, decimal expectedWinAmount, List <HandAction> handActions, List <WinningsAction> winners)
        {
            var fixedWinners = UncalledBet.FixUncalledBetWins(UncalledBet.Fix(handActions), winners);
            var lastAction   = fixedWinners.Last();

            Assert.AreEqual(expectedPlayer, lastAction.PlayerName);
            Assert.AreEqual(expectedWinAmount, lastAction.Amount);
        }
Example #4
0
        private void ProcessUncalledBet(UncalledBet uncalledBet, HandHistory handHistory)
        {
            var player = handHistory.Players.FirstOrDefault(x => x.SeatNumber == uncalledBet.SeatId);

            if (player == null)
            {
                throw new HandBuilderException($"Failed to find player for uncalled bet action on seat {uncalledBet.SeatId}.");
            }

            var action = new HandAction(player.PlayerName,
                                        HandActionType.UNCALLED_BET,
                                        uncalledBet.Amount,
                                        handHistory.CommunityCards.Street);

            handHistory.HandActions.Add(action);
        }
Example #5
0
        void TestUncalledbet(string expectedPlayer, decimal?expectedAmount, HandHistory hand)
        {
            var actions = UncalledBet.Fix(hand.HandActions);

            var lastAction = actions.FirstOrDefault(p => p.HandActionType == HandActionType.UNCALLED_BET);

            if (expectedAmount == null)
            {
                Assert.AreEqual(null, lastAction);
            }
            else
            {
                Assert.AreEqual(expectedPlayer, lastAction.PlayerName);
                Assert.AreEqual(expectedAmount, lastAction.Amount);
            }
        }
        public List <HandAction> ParseHandActions(string handText, out List <WinningsAction> winners)
        {
            try
            {
                string[]          handLines   = SplitHandsLines(handText);
                GameType          gameType    = ParseGameType(handLines);
                List <HandAction> handActions = ParseHandActions(handLines, gameType, out winners);

                if (RequiresActionSorting)
                {
                    handActions = OrderHandActions(handActions);
                }
                if (RequiresAdjustedRaiseSizes)
                {
                    handActions = RaiseAdjuster.AdjustRaiseSizes(handActions);
                }
                if (RequiresAllInDetection)
                {
                    var playerList = ParsePlayers(handLines);

                    handActions = AllInActionHelper.IdentifyAllInActions(playerList, handActions);
                }

                if (RequiresAllInUpdates)
                {
                    handActions = AllInActionHelper.UpdateAllInActions(handActions);
                }

                if (RequiresUncalledBetWinAdjustment)
                {
                    winners = UncalledBet.FixUncalledBetWins(handActions, winners);
                }

                return(handActions);
            }
            catch (Exception ex)
            {
                throw new HandActionException(handText, "ParseHandActions: Error:" + ex.Message + " Stack:" + ex.StackTrace);
            }
        }
Example #7
0
        public void UncalledBetTest_UncalledBetWinsFix_Special()
        {
            var HandActions = new List <HandAction>
            {
                new HandAction("P1", HandActionType.BET, 10m, Street.Flop),
                new HandAction("P2", HandActionType.RAISE, 40m, Street.Flop),
                new HandAction("P3", HandActionType.RAISE, 100m, Street.Flop, true),
                new HandAction("P1", HandActionType.RAISE, 250m, Street.Flop, true),
                new HandAction("P2", HandActionType.CALL, 30m, Street.Flop, true),
                new HandAction("P3", HandActionType.UNCALLED_BET, 150m, Street.Flop),
                new HandAction("P1", HandActionType.FOLD, 0m, Street.Flop),
            };

            var winners = new List <WinningsAction>()
            {
                new WinningsAction("P2", WinningsActionType.WINS, 210m, 0),
                new WinningsAction("P3", WinningsActionType.WINS, 220m, 0),
            };

            var fixedWinners = UncalledBet.FixUncalledBetWins(HandActions.ToList(), winners);

            var expected = new List <HandAction>
            {
                new HandAction("P1", HandActionType.BET, 10m, Street.Flop),
                new HandAction("P2", HandActionType.RAISE, 40m, Street.Flop),
                new HandAction("P3", HandActionType.RAISE, 100m, Street.Flop, true),
                new HandAction("P1", HandActionType.RAISE, 250m, Street.Flop, true),
                new HandAction("P2", HandActionType.CALL, 30m, Street.Flop, true),
                new HandAction("P3", HandActionType.UNCALLED_BET, 150m, Street.Flop),
                new HandAction("P1", HandActionType.FOLD, 0m, Street.Flop),
            };

            var expectedWinners = new List <WinningsAction>()
            {
                new WinningsAction("P2", WinningsActionType.WINS, 210m, 0),
                new WinningsAction("P3", WinningsActionType.WINS, 70m, 0),
            };

            Assert.AreEqual(expectedWinners, fixedWinners);
        }
Example #8
0
        public HandHistory ParseFullHandHistory(string handText, bool rethrowExceptions = false)
        {
            GetCategories(handText);

            try
            {
                bool isCancelled;
                if (IsValidOrCancelledHand(Lines, out isCancelled) == false)
                {
                    throw new InvalidHandException(handText);
                }

                //Set members outside of the constructor for easier performance analysis
                HandHistory handHistory = new HandHistory();

                handHistory.FullHandHistoryText = handText;
                handHistory.DateOfHandUtc       = ParseDateUtc(Lines.Header);
                handHistory.GameDescription     = ParseGameDescriptor(Lines.Header);
                handHistory.HandId               = ParseHandId(Lines.Header);
                handHistory.TableName            = ParseTableName(Lines.Header);
                handHistory.DealerButtonPosition = ParseDealerPosition(Lines.Header);
                handHistory.CommunityCards       = ParseCommunityCards(Lines.Summary);
                handHistory.Cancelled            = isCancelled;
                handHistory.Players              = ParsePlayers(Lines.Seat);
                handHistory.NumPlayersSeated     = handHistory.Players.Count;

                string heroName = ParseHeroName(Lines.Other);
                handHistory.Hero = handHistory.Players.FirstOrDefault(p => p.PlayerName == heroName);

                if (handHistory.Cancelled)
                {
                    return(handHistory);
                }

                if (handHistory.Players.Count(p => p.IsSittingOut == false) <= 1)
                {
                    throw new PlayersException(handText, "Only found " + handHistory.Players.Count + " players with actions.");
                }

                //    if (SupportRunItTwice)
                //    {
                //        handHistory.RunItTwiceData = ParseRunItTwice(handLines);
                //    }

                List <WinningsAction> winners;
                handHistory.HandActions = ParseHandActions(Lines.Action, out winners);
                handHistory.Winners     = winners;

                if (RequiresAdjustedRaiseSizes)
                {
                    handHistory.HandActions = RaiseAdjuster.AdjustRaiseSizes(handHistory.HandActions);
                }
                if (RequiresAllInDetection)
                {
                    var playerList = ParsePlayers(Lines.Seat);
                    handHistory.HandActions = AllInActionHelper.IdentifyAllInActions(playerList, handHistory.HandActions);
                }

                if (RequiresAllInUpdates)
                {
                    handHistory.HandActions = AllInActionHelper.UpdateAllInActions(handHistory.HandActions);
                }

                if (RequiresUncalledBetFix)
                {
                    handHistory.HandActions = UncalledBet.Fix(handHistory.HandActions);
                }

                if (RequiresUncalledBetWinAdjustment)
                {
                    winners = UncalledBet.FixUncalledBetWins(handHistory.HandActions, winners);
                }

                //Pot calculation mus be done after uncalledBetFix
                if (RequiresTotalPotCalculation)
                {
                    handHistory.TotalPot = PotCalculator.CalculateTotalPot(handHistory);
                    handHistory.Rake     = PotCalculator.CalculateRake(handHistory);
                }

                HandAction anteAction = handHistory.HandActions.FirstOrDefault(a => a.HandActionType == HandActionType.ANTE);
                if (anteAction != null && handHistory.GameDescription.PokerFormat.Equals(PokerFormat.CashGame))
                {
                    handHistory.GameDescription.Limit.IsAnteTable = true;
                    handHistory.GameDescription.Limit.Ante        = Math.Abs(anteAction.Amount);
                }

                ParseExtraHandInformation(Lines, handHistory);

                if (handHistory.Players.All(p => p.SeatNumber != handHistory.DealerButtonPosition))
                {
                    throw new InvalidHandException(handText, "Dealer not found");
                }

                FinalizeHand(handHistory);

                SetActionNumbers(handHistory);

                Lines.Clear();
                return(handHistory);
            }
            catch (Exception ex)
            {
                if (rethrowExceptions)
                {
                    throw;
                }

                logger.Warn("Couldn't parse hand {0} with error {1} and trace {2}", handText, ex.Message, ex.StackTrace);
                return(null);
            }
        }