private void AddBidEvent(BidInfo bid)
 {
     CurrentBidding.AddBid(bid);
     Players[bid.Position].Bid      = bid.Bid;
     Players[bid.Position].AllIn    = bid.IsAllIn();
     Players[bid.Position].Fold     = bid.IsFold();
     JoinedPlayers[bid.UserId].Cash = bid.NewCashValue;
     if (bid.Bid > MaxBid)
     {
         MaxBid = bid.Bid;
     }
 }
        public long GetMinBet()
        {
            var maxBet = CurrentBidding.CurrentStage.GetMaxBet();

            if (maxBet == 0) //not Pre-Flop only
            {
                return(BigBlind);
            }
            if (MaxRaisedValue == 0 && CurrentBidding.IsStage(BiddingStagesEnum.PreFlop))
            {
                return(maxBet + SmallBlind);
            }
            return(maxBet + MaxRaisedValue);
        }
        public GameTableState()
        {
            On((TableCreated e) =>
            {
                TableId       = e.Id;
                SmallBlind    = e.SmallBlind;
                BuyIn         = e.BuyIn;
                Dealer        = null;
                JoinedPlayers = new Dictionary <string, TablePlayer>();
                Players       = new Dictionary <int, GamePlayer>();
            });
            On((GameFinished e) =>
            {
                GameId         = null;
                MaxBid         = 0;
                CurrentBidding = null;

                foreach (var winner in e.Winners)
                {
                    JoinedPlayers[winner.UserId].Cash += winner.Amount;
                }
            });

            On((GameCreated e) =>
            {
                GameId = e.GameId;
                Pack   = new Pack(e.Cards);
                Deck   = new List <Card>();
                SitPlayers(e.Players);
                CurrentBidding = new BiddingInfo(e.Players.Count);
                MaxRaisedValue = 0;
            });
            On((DealerAssigned e) =>
            {
                Dealer = e.Dealer.Position;
            });
            On((PlayerJoined e) => JoinedPlayers.Add(e.UserId, new TablePlayer()
            {
                Cash     = e.Cash,
                Position = e.Position,
                UserId   = e.UserId,
            }));
            On((CardsDealed e) =>
            {
                foreach (var playerCard in e.Cards)
                {
                    Pack.Remove(playerCard.Card);
                    Players[playerCard.Position].Cards.Add(playerCard.Card);
                }
            });
            On((BidMade e) => AddBidEvent(e.Bid));
            On((BiddingFinished e) =>
            {
                MaxRaisedValue = 0;
            });
            On((NextPlayerTurned e) =>
            {
                CurrentPlayer  = e.Player.Position;
                MaxRaisedValue = e.MaxRaisedValue;
            });
            On((DeckDealed e) =>
            {
                foreach (var card in e.Cards)
                {
                    Pack.Remove(card);
                    Deck.Add(card);
                }
                CurrentBidding.NextStage();
            });
        }