Ejemplo n.º 1
0
 public void DeleteGameAndNotifyMyOpponent(int gameId, string sessionKey)
 {
     try{
     Game game;
     User opponent;
     game = GameServise.GetGameById(gameId);
     opponent = GameServise.GetAnotherOpponentInGame(gameId, sessionKey);
     GameServise.DeleteGame(sessionKey, gameId);
     Clients.All.nothifyAllClientForOpenGames();
     if (opponent == null)
     {
         return;
     }
     GameState gameState = new GameState()
     {
         GameId = gameId,
         Title = game.Title,
         Opponent = opponent.Nickname,
     };
     if (game.GameStatus == GameStatusType.InProgress)
     {
         gameState.Winner = opponent.Nickname;
     }
     Clients.Client(opponent.ConnectionId).deletedGame(gameState);
       }
     catch (ServerErrorException ex)
     {
         Clients.Caller.serverErrorException(ex.Message);
     }
 }
Ejemplo n.º 2
0
        public Game MakeGuess(GuessModel guessModel, out GameState gameState)
        {
            if(guessModel==null)
            {
                throw new ArgumentNullException("GuessModel is null");
            }
            gameState = new GameState();
            ValidateSessionKey(guessModel.SessionKey);
            User user = GetUserBySessionKey(guessModel.SessionKey);
            Game game = GetGameById(guessModel.GameId);
            if (game.GameStatus != GameStatusType.InProgress)
            {
                throw new ServerErrorException("Game is not in progress", "INV_OP_GAME_STAT");
            }
            ValidateUserInGame(game, user);
            //check userInTurn
            if (game.UserInTurn != user.Id)
            {
                throw new ServerErrorException("Not your turn", "INV_OP_TURN");
            }
            CheckPosition(guessModel.Position);
            PlaceMarker(game, user, guessModel.Position);
              gameState.gameOver= CheckGameOver(game);

                bool isWinner = false;
                int[] arrayOfMarkedPositions = game.Guesses.Where(g => g.User.Id == user.Id).Select(p => p.Position).ToArray();
                isWinner = CheckWinner(arrayOfMarkedPositions);
                if (isWinner)
                {
                    gameState.gameOver = true;
                    game.Winner = user;
                    gameState.Winner = user.Nickname;
                }
                if (gameState.gameOver)
                {

                    game.GameStatus = GameStatusType.Finished;
                    gameState.GameId = (int)game.Id;
                    gameState.Title = game.Title;
                }
                else
                {
                    var otherUser = (game.RedUser == user) ? game.BlueUser : game.RedUser;
                    game.UserInTurn = otherUser.Id;
                }

            this.Data.Games.Update(game);
            this.Data.SaveChanges();
            return game;
        }
Ejemplo n.º 3
0
 public GameState GetGameState(int gameId, string sessionKey)
 {
     //TODO: Optimization method
     ValidateSessionKey(sessionKey);
     User user = GetUserBySessionKey(sessionKey);
     Game game = GetGameById(gameId);
     ValidateUserInGame(game, user);
     GameState gameState = new GameState();
     if (game.RedUser == user)
     {
         gameState.Symbol = "O";
     }
     else
     {
         gameState.Symbol = "Y";
     }
     gameState.GameId = gameId;
     gameState.Title = game.Title;
     gameState.State = game.GameStatus;
     if (game.Winner != null)
     {
         gameState.Winner = game.Winner.Nickname;
     }
     gameState.Opponent = GetAnotherOpponentInGame(gameId, sessionKey).Nickname;
     gameState.O = game.Guesses.Where(g => g.User == game.RedUser).Select(p => p.Position).ToArray();
     gameState.X = game.Guesses.Where(g => g.User == game.BlueUser).Select(p => p.Position).ToArray();
     return gameState;
 }
Ejemplo n.º 4
0
        public void LeaveGameAndRestartState(int gameId, string sessionKey)
        {
            try{
            Game game;
            User user;
            User opponent;
            string gameStatus;

            user = UserServise.GetUserBySessionKey(sessionKey);
            game = GameServise.GetGameById(gameId);
            gameStatus = game.GameStatus;
            opponent = GameServise.GetAnotherOpponentInGame(gameId, sessionKey);
            GameServise.RestartGameState(sessionKey, gameId, GameStatusType.Open);
            GameServise.LeaveGame(gameId, sessionKey);

            GameState gameState = new GameState()
            {
                GameId = gameId,
                Title = game.Title,
                Opponent = user.Nickname,
            };
            if (gameStatus == GameStatusType.InProgress)
            {
                gameState.Winner = opponent.Nickname;
            }
            Clients.Client(opponent.ConnectionId).leftGame(gameState);
            Clients.All.nothifyAllClientForOpenGames();
              }
            catch (ServerErrorException ex)
            {
                Clients.Caller.serverErrorException(ex.Message);
            }
        }