/// <summary> /// Wysyła informacje dla gracza jakie karty on posiada /// </summary> public void SendPlayerCards(PlayerModel player) { //Pobieramy _client dla user var _player = GameTableModel.GetPlayer(player.User); if (_player.Cards != null) { CardShowupAction cardActionPlayer = new CardShowupAction() { Cards = _player.Cards, Stage = GameTableModel.Stage, CreatedAt = DateTime.Now, Player = _player }; //Wysylamy wiadomosc tylko do niego if (player.User.IsOnline()) { player.User.GetClient().OnGameActionTrigger(GameTableModel, cardActionPlayer); } } }
/// <summary> /// Inicjalizuje handlery dla list i elementów modelu stołu etc. /// </summary> private void AfterInitialize() { GameTableModel.ActionHistory.CollectionChanged += new NotifyCollectionChangedEventHandler( (object sender, NotifyCollectionChangedEventArgs e) => { if (e.NewItems != null) { foreach (Object item in e.NewItems) { if (item is BetAction) { var betAction = (BetAction)item; //Odejmujemy od salda gracza PlayerModel _player = GameTableModel.PlayersList.FirstOrDefault(p => p.User.ID == betAction.Player.User.ID); if (this.GameTableModel.Currency == Enums.CurrencyType.VIRTUAL) { betAction.Bet = Math.Round(betAction.Bet, 0); } else { betAction.Bet = Math.Round(betAction.Bet, 2); } //Sprawdzenie stacka usera, max. kwota == player.stack if (betAction.Bet > _player.Stack) { betAction.Bet = _player.Stack; } //Dodajemy do póli stołu GameTableModel.TablePot += betAction.Bet; //Odejmujemy saldo _player.Stack -= betAction.Bet; if (betAction.Action == Enums.ActionPokerType.Fold) { if (_player.Status.HasFlag(PlayerModel.PlayerStatus.INGAME)) { _player.Status &= ~PlayerModel.PlayerStatus.INGAME; } _player.Status |= PlayerModel.PlayerStatus.FOLDED; //Aktualizujemy mozliwosc akcji (powrot do gry) this.SendAvailableAction(_player.User); } Console.WriteLine("Gracz " + betAction.Player.User.Username + " wykonał " + betAction.Action.ToString() + " kwota " + betAction.Bet); } else if (item is CardTableAction) { var actionEntry = (CardTableAction)item; Console.WriteLine("Nowe karty na stole (" + actionEntry.Cards.Count() + ")"); } else if (item is CardShowupAction) { var actionEntry = (CardShowupAction)item; Console.WriteLine("Gracz " + actionEntry.Player.User.Username + " pokazuje karty"); } else if (item is CardHideupAction) { var actionEntry = (CardHideupAction)item; Console.WriteLine("Gracz " + actionEntry.Player.User.Username + " chowa karty"); } else if (item is CardBacksideAction) { //Wysyłamy do wszystkich przy stole //if (_client != null) // _client.ClientProxy.OnPlayerShowcards(Game.GameTableModel, player, playerCards); var actionEntry = (CardBacksideAction)item; Console.WriteLine("Gracz " + actionEntry.Player.User.Username + " otrzymuje karty"); } else if (item is TablePotAction) { var actionEntry = (TablePotAction)item; PlayerModel _player = GameTableModel.PlayersList.FirstOrDefault(p => p.User.ID == actionEntry.Player.User.ID); _player.Stack += actionEntry.Pot; Console.WriteLine("Gracz otrzymuje kwote: " + actionEntry.Pot); } //Wysyłamy podjęcie akcji przez użytkownika do obserwatorów foreach (UserModel user in GameTableModel.WatchingList.ToList()) { //Pobieramy _client dla user var _c = user.GetClient(); //Wysylamy wiadomosc do wszystkich o danej akcji if (_c != null) { _c.OnGameActionTrigger(GameTableModel, (BaseAction)item); } } } } } ); GameTableModel.PlayersList.CollectionChanged += new NotifyCollectionChangedEventHandler( (object sender, NotifyCollectionChangedEventArgs e) => { Console.WriteLine("PlayersList.CollectionChanged"); foreach (UserModel user in GameTableModel.GetWatchingExceptPlayers()) { this.SendAvailableAction(user); } //Wysłanie informacji o nowym graczu if (e.NewItems != null) { foreach (Object item in e.NewItems) { var player = item as PlayerModel; Task.Factory.StartNew(() => { foreach (UserModel user in GameTableModel.WatchingList) { user.GetClient().OnGamePlayerSitdown(GameTableModel, player); } }); } } } ); GameTableModel.WatchingList.CollectionChanged += new NotifyCollectionChangedEventHandler( (object sender, NotifyCollectionChangedEventArgs e) => { Console.WriteLine("WatchingList.CollectionChanged"); if (e.NewItems != null) { foreach (Object item in e.NewItems) { //Wysłanie obecnego stanu gry dla użytkownika czyli stołu wraz z danymi kart i listy graczy this.DoSendTableHitory(item as UserModel); //Wysyła możliwą akcję this.SendAvailableAction(item as UserModel); //Wysyła karty o ile gracz jest w grze var player = GameTableModel.GetPlayer(item as UserModel); if (player != null) { this.SendPlayerCards(player); } } } } ); }