public void CreateGameTest()
        {
            //Arrange
            GameController        gameController = new GameController();
            IGameDBIF             gameDB         = new GameDB();
            IGameTableDBIF        gameTableDB    = new GameTableDB();
            List <GameTableModel> gameTables     = (List <GameTableModel>)gameTableDB.GetAll();
            GameTableModel        gameTable      = null;
            bool found = false;
            Game game  = new Game();

            //Act
            if (gameTables.Count > 0)
            {
                for (int i = 0; i < gameTables.Count && !found; i++)
                {
                    if (gameController.GetByTableId(gameTables[i].Id) == null)
                    {
                        gameTable = gameTables[i];
                        found     = true;
                    }
                }
                game.gameTable = GameTableConverter.ConvertFromGameTableModelToGameTable(gameTable);
                gameController.CreateGame(game);
            }
            GameModel gameModel = gameController.GetByTableId(gameTable.Id);

            //Assert
            Assert.IsNotNull(gameModel);
            //Cleanup
            gameDB.Delete(gameModel);
        }
示例#2
0
        public void InsertTest()
        {
            //Arrange
            gameTableDB = new GameTableDB();
            bool found = false;
            var  table = new GameTableModel("TestTable");

            table.DeckId = 2;
            //Act
            gameTableDB.Insert(table);
            List <GameTableModel> gameTables = gameTableDB.GetAll().ToList();

            for (int i = 0; i < gameTables.Count && !found; i++)
            {
                if (gameTables[i].TableName == table.TableName)
                {
                    table.Id = gameTables[i].Id;
                }
            }
            var tableT = gameTableDB.GetById(table.Id);

            //Assert
            Assert.AreEqual(table.TableName, tableT.TableName);
            //Cleanup
            gameTableDB.Delete(table);
        }
        public void DeleteTest()
        {
            //Arrange
            GameTableServiceAccess gameTableServiceAccess = new GameTableServiceAccess();
            CGUserModel            userModel = new CGUserModel {
                Id       = "Test",
                Email    = "*****@*****.**",
                UserName = "******"
            };
            GameTableModel tableModel = null;

            gameTableServiceAccess.CreateGameTable(userModel, "TestTable");
            List <GameTableModel> tables = gameTableServiceAccess.GetAll();

            foreach (var table in tables)
            {
                if (table.TableName == "TestTable")
                {
                    tableModel = table;
                }
            }
            bool res = false;

            //Act
            res = gameTableServiceAccess.Delete(tableModel.Id);


            //Assert
            Assert.IsTrue(res);
        }
示例#4
0
 public void Delete(GameTableModel table)
 {
     using (SqlConnection connection = new SqlConnection(conString)) {
         connection.Open();
         var sql = "DELETE FROM GameTable WHERE id = @id;";
         connection.Execute(sql, table);
     }
 }
示例#5
0
 public void Insert(GameTableModel gameTable)
 {
     using (SqlConnection connection = new SqlConnection(conString)) {
         connection.Open();
         var sql = "INSERT INTO GameTable (tableName, seats, deckId) VALUES (@TableName, @seats, @DeckId)";
         connection.Execute(sql, gameTable);
     }
 }
示例#6
0
        public void UpdateGameTableSeats(GameTableModel table, int seats)
        {
            var sql = "UPDATE GameTable SET seats = seats - @seats WHERE id = @id;";

            using (SqlConnection connection = new SqlConnection(conString)) {
                connection.Execute(sql, new { id = table.Id, seats = seats });
            }
        }
示例#7
0
        public int GetGameTableSeats(GameTableModel table)
        {
            var sql = "SELECT seats FROM GameTable WHERE id = @id;";

            using (SqlConnection connection = new SqlConnection(conString)) {
                return(connection.Query <int>(sql, table).SingleOrDefault());
            }
        }
示例#8
0
 public void Update(GameTableModel table)
 {
     using (SqlConnection connection = new SqlConnection(conString)) {
         connection.Open();
         var sql = "UPDATE GameTable SET tableName = @tableName, seats = @seats  WHERE id = @id;";
         connection.Execute(sql, table);
     }
 }
示例#9
0
 public GameTableModel CreateGameTable(CGUserModel userModel, string tableName)
 {
     using (GameTableManagementServiceClient proxy = new GameTableManagementServiceClient()) {
         GameTableModel tableModel = null;
         CGUser         user       = GameTableModelConverter.ConvertFromClientUserToServiceUser(userModel);
         tableModel = GameTableModelConverter.ConvertFromServiceGameTableToClientGameTable(proxy.CreateGameTable(user, tableName));
         return(tableModel);
     }
 }
        public void UpdateTableSeats(CGUserModel user, int amount)
        {
            IGameTableDBIF gameTableDB = new GameTableDB();
            GameTableModel gameTable   = gameTableDB.GetById(user.TableID);

            if (gameTable != null)
            {
                gameTableDB.UpdateGameTableSeats(gameTable, amount);
            }
        }
        public static GameTableModel ConvertFromGameTableToGameTableModel(GameTable gameTable)
        {
            GameTableModel gameTableModel = new GameTableModel()
            {
                DeckId    = gameTable.Deck.Id,
                Id        = gameTable.Id,
                seats     = gameTable.seats,
                TableName = gameTable.TableName
            };

            return(gameTableModel);
        }
示例#12
0
        public static Game ConvertFromGameModelToGame(GameModel gameModel)
        {
            IGameTableDBIF gameTableDB    = new GameTableDB();
            GameTableModel gameTableModel = gameTableDB.GetById(gameModel.GameTableId);
            Game           game           = new Game()
            {
                Id        = gameModel.Id,
                gameTable = GameTableConverter.ConvertFromGameTableModelToGameTable(gameTableModel)
            };

            return(game);
        }
        /* This method is called when a user want to join a GameTable.
         * It checks wether or notthe table is already full and if it is the user cannot join the table.
         * if a user is successfull in joining a table, a seat is subtracted from the seat count,
         * such that the it can keep track of how many users have joined the table
         */
        public GameTable JoinGameTable(CGUser user, GameTable chosenTable)
        {
            if (user == null || chosenTable == null)
            {
                throw new ArgumentNullException();
            }
            else
            {
                GameTable      databaseTable = null;
                GameTableModel modelTable    = null;
                CGUserModel    userModel     = CGUserConverter.ConvertFromCGUserToCGUserModel(user);
                //Checking if the user is already sitting at the table and returning it without modifying if so.
                for (int i = 0; i < chosenTable.Users.Count; i++)
                {
                    if (userModel.UserName == chosenTable.Users[i].UserName)
                    {
                        return(chosenTable);
                    }
                }
                TransactionOptions transOptions = new TransactionOptions();
                transOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
                using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, transOptions)) {
                    //Checking if the user is sitting at another table.
                    if (userModel.TableID != 0 && userModel.TableID != chosenTable.Id)
                    {
                        modelTable = gameTableDB.GetById(userModel.TableID);
                    }
                    //Getting the table from the database for later comparison.
                    databaseTable = GameTableConverter.ConvertFromGameTableModelToGameTable(gameTableDB.GetById(chosenTable.Id));
                    //Optimistically handling concurrency by checking if the seats available at the chosen table
                    //are the same as the seats available in the database, if not we throw an exception.
                    if (chosenTable.seats == databaseTable.seats && databaseTable.seats > 0)
                    {
                        userManagement.UpdateUserTableId(user, databaseTable.Id);
                        databaseTable.Users.Add(user);
                        UpdateGameTableSeats(databaseTable, 1);
                        //If the user was sitting at another table we free up the seat.
                        if (modelTable != null)
                        {
                            gameTableDB.UpdateGameTableSeats(modelTable, -1);
                        }
                    }
                    else
                    {
                        throw new Exception("Table busy");
                    }
                    Thread.Sleep(2000);
                    scope.Complete();
                }

                return(databaseTable);
            }
        }
示例#14
0
        public void GetbyIdTest()
        {
            gameTableDB = new GameTableDB();
            GameTableModel        table = null, table2 = null;
            List <GameTableModel> gameTables = gameTableDB.GetAll().ToList();

            if (gameTables.Count > 0)
            {
                table = gameTables[0];
            }
            table2 = gameTableDB.GetById(table.Id);
            Assert.AreEqual(table2.Id, table.Id);
        }
示例#15
0
        public void GetGameTableSeatsTest()
        {
            List <GameTableModel> gameTables = gameTableDB.GetAll().ToList();
            GameTableModel        table      = null;

            if (gameTables.Count > 0)
            {
                table = gameTables[0];
            }

            int seats = gameTableDB.GetGameTableSeats(table);

            Assert.IsTrue(0 <= seats && seats <= 4);
        }
        public static GameTable ConvertFromGameTableModelToGameTable(GameTableModel tableModel)
        {
            CGUserDB  cGUserDB  = new CGUserDB();
            DeckDB    deckDB    = new DeckDB();
            GameTable gameTable = new GameTable()
            {
                Id        = tableModel.Id,
                seats     = tableModel.seats,
                TableName = tableModel.TableName,
                Users     = CGUserConverter.ConvertFromListOfCGUserModelToListOfCGUser(cGUserDB.GetUserByTableId(tableModel.Id)),
                Deck      = DeckConverter.ConvertFromDeckModelToDeck(deckDB.GetById(tableModel.DeckId))
            };

            return(gameTable);
        }
        public void GetByIdTest()
        {
            //Arrange
            GameTableServiceAccess gameTableServiceAccess = new GameTableServiceAccess();
            GameTableModel         gameTable = null, gameTable2 = null;
            List <GameTableModel>  tables = gameTableServiceAccess.GetAll();

            if (tables.Count > 0)
            {
                gameTable = tables[0];
            }
            //Act
            gameTable2 = gameTableServiceAccess.GetById(gameTable.Id);

            //Assert
            Assert.AreEqual(gameTable.TableName, gameTable2.TableName);
        }
        private void GameTableListBox_SelectedIndexChanged_1(object sender, EventArgs e)
        {
            labelDelete.Text = "";
            string gameTableText = GameTableListBox.Text;
            string id            = gameTableText.Substring(0, 4);
            int    tableId       = Int32.Parse(id);

            GameTableIdTextBox.Text = id;
            GameTableModel gt = gameTableController.GetById(tableId);

            if (gt != null)
            {
                //GameTableIdTextBox.Text = "" + gt.Id;
                GameTableNameTextBox.Text = gt.TableName;
                var users = gt.Users;
                UpdatePlayersListBox(users);
            }
        }
 public GameTable CreateGameTable(CGUser user, string tableName)
 {
     if (user == null || tableName == null)
     {
         throw new ArgumentNullException();
     }
     else
     {
         GameTableModel tableModel = new GameTableModel()
         {
             TableName = tableName,
             DeckId    = 2,
             seats     = 4
         };
         gameTableDB.Insert(tableModel);
         GameTable table = GameTableConverter.ConvertFromGameTableModelToGameTable(gameTableDB.GetGameTableByTableName(tableName));
         return(JoinGameTable(user, table));
     }
 }
示例#20
0
        /// <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);
                }
            }
        }
示例#21
0
        public void DeleteTest()
        {
            gameTableDB = new GameTableDB();
            List <GameTableModel> gameTables = gameTableDB.GetAll().ToList();
            bool           found             = false;
            GameTableModel table             = new GameTableModel {
                DeckId    = 2,
                TableName = "TestTable"
            };

            for (int i = 0; i < gameTables.Count && !found; i++)
            {
                if (gameTables[i].TableName == table.TableName)
                {
                    table.Id = gameTables[i].Id;
                }
            }
            var table1 = gameTableDB.GetById(table.Id);

            gameTableDB.Delete(table);
            table = gameTableDB.GetById(table.Id);
            Assert.IsNull(table);
        }
        public void GetUserByTableIdTest()
        {
            //Arrange
            cgUserDB = new CGUserDB();
            GameTableDB gameTableDB = new GameTableDB();
            var         table       = new GameTableModel("TestTable");

            table.DeckId = 2;
            table.seats  = 4;
            //Act
            gameTableDB.Insert(table);
            table = gameTableDB.GetGameTableByTableName("TestTable");
            GameTable gameTable = GameTableConverter.ConvertFromGameTableModelToGameTable(table);

            gameTable.Users.Add(CGUserConverter.convertFromCGUserModelToCGUser(cgUserDB.GetById("Test")));
            CGUserModel testUser = cgUserDB.GetById("Test");

            cgUserDB.UpdateUserTableId(testUser, table.Id);
            List <CGUserModel> foundUser = cgUserDB.GetUserByTableId(table.Id);

            Assert.AreEqual(testUser.UserName, foundUser[0].UserName);
            gameTableDB.Delete(table);
        }
示例#23
0
        public void UpdateTest()
        {
            //Arrange
            gameTableDB = new GameTableDB();
            List <GameTableModel> gameTables = gameTableDB.GetAll().ToList();
            GameTableModel        table      = null;

            if (gameTables.Count > 0)
            {
                table = gameTables[0];
            }
            var name = table.TableName;

            //Act
            table.TableName = "GameTableUpdate";
            gameTableDB.Update(table);
            var table2 = gameTableDB.GetGameTableByTableName("GameTableUpdate");

            //Assert
            Assert.AreNotEqual(name, table2.TableName);
            //Cleanup
            table.TableName = name;
            gameTableDB.Update(table);
        }
示例#24
0
        private void InitializeStage()
        {
            Console.WriteLine("InitializeStage()");

            StageGameProcess = new StageProcess(this);
            StageGameProcess.Initialize();

            StageGameProcess.OnStageChangeEvent += (stage) =>
            {
                Console.WriteLine("OnStageChangeEvent()");
                Thread.Sleep(100);
                List <CardModel> cards = new List <CardModel>();
                switch (stage)
                {
                case Enums.Stage.Flop:
                    this.SendDealerMessage("Rozkładam flopa.");
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    break;

                case Enums.Stage.Turn:
                    this.SendDealerMessage("Rozkładam turn.");
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    break;

                case Enums.Stage.River:
                    this.SendDealerMessage("Rozkładam river.");
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    break;
                }

                Console.WriteLine("Rozdanie kart na stole = " + stage.ToString());

                //Zapisuje zebrane karty do pamieci
                GameTableModel.TableCardList = GameTableModel.TableCardList.Concat(cards).ToList();

                //Przekazujemy karty publice
                CardTableAction cardAction = new CardTableAction()
                {
                    CreatedAt = DateTime.Now,
                    Cards     = cards,
                    Stage     = GameTableModel.Stage
                };

                GameTableModel.ActionHistory.Add(cardAction);
                Thread.Sleep(1500);
            };
            StageGameProcess.OnStageProcessFinishEvent += () =>
            {
                Console.WriteLine("OnStageProcessFinishEvent");
                if (GameTableModel.PlayerHavingPlayStatus().Count == 1)
                {
                    //Wygrywa jeden gracz
                    var playerWinner = GameTableModel.PlayerHavingPlayStatus().FirstOrDefault();
                    playerWinner.Stack += GameTableModel.TablePot;
                    var message = "Gracz " + playerWinner.User.Username + " wygrywa główną pulę " + CurrencyFormat.Get(GameTableModel.Currency, GameTableModel.TablePot) + " ponieważ reszta graczy spasowała karty.";
                    Console.WriteLine(message);

                    this.SendDealerMessage(message);

                    GameTableModel.ShowSystemMessage("Wygrywa " + playerWinner.User.Username, message);
                    Thread.Sleep(2000);
                    GameTableModel.HideSystemMessage();
                }
                else
                {
                    //Showdown
                    StageShowdown stageShowdown = new StageShowdown(this);
                    stageShowdown.OnShowdownWinnerEvent += (evaluatorItem) =>
                    {
                        Console.WriteLine("points: " + evaluatorItem.Points + " (kicker points: " + evaluatorItem.KickerPoints + ")");
                    };
                    stageShowdown.ShowdownStart();
                    stageShowdown.ShowdownPotDistribution();
                }

                Thread.Sleep(100);
                GameTableModel.ShowSystemMessage("Zakończenie rozdania", "Nowe rozdanie zostanie rozpoczęte za 4 sekundy");
                Console.WriteLine("Zakończenie gry na stole " + this.GameTableModel.Name);
                Thread.Sleep(3600);
                GameTableModel.HideSystemMessage();

                BaseFinished();

                if (OnGameFinishedEvent != null)
                {
                    OnGameFinishedEvent(this);
                }

                IsFinished = true;
            };
        }
示例#25
0
        /// <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);
                        }
                    }
                }
            }
                );
        }