示例#1
0
        public bool AbortGame(int gameId)
        {
            using (var db = new HeartsEntities())
            {
                var game = db.Games.FirstOrDefault(x => x.GameId == gameId);
                if (game.Status == (int)GameStatus.Ended)
                {
                    throw new CustomException("Game has ended.");
                }

                if (game == null)
                {
                    logger.Warn("GameId: {0} - not found.", game.GameId);
                    throw new CustomException("Invalid game.");
                }

                var playerids = db.Users.Where(x => x.ActiveGameId == gameId);
                foreach (var player in playerids)
                {
                    player.ActiveGameId = null;
                }

                game.Status = (int)GameStatus.Aborted;
                logger.Info("GameId: {0} - aborted.", game.GameId);
                db.SaveChanges();
                return(true);
            }
        }
示例#2
0
        public bool UpdateActiveGame(int userId, int?gameId)
        {
            using (var db = new HeartsEntities())
            {
                var user = db.Users.FirstOrDefault(x =>
                                                   x.UserId.Equals(userId));

                if (gameId != null)
                {
                    var game = db.Games.FirstOrDefault(x =>
                                                       x.GameId == gameId);
                    if (game == null)
                    {
                        throw new CustomException("Invalid Game.");
                    }
                }

                if (user == null)
                {
                    logger.Info("User name: {0} - Not found.", userId);
                    throw new CustomException("Invalid User");
                }

                user.ActiveGameId = gameId;
                db.SaveChanges();
                return(true);
            }
        }
示例#3
0
 public void Add(AuditTrail audit)
 {
     using (var db = new HeartsEntities())
     {
         db.AuditTrails.Add(audit);
         db.SaveChanges();
     }
 }
示例#4
0
        public string UpdateScores(Game newGame)
        {
            using (var db = new HeartsEntities())
            {
                var game = db.Games.FirstOrDefault(x => x.GameId == newGame.GameId);
                if (game == null)
                {
                    logger.Info("GameId: {0} - invalid game.", game.GameId);
                    throw new CustomException("Invalid Game.");
                }

                game.Status       = newGame.Status;
                game.Player1Score = newGame.Player1Score;
                game.Player2Score = newGame.Player2Score;
                game.Player3Score = newGame.Player3Score;
                game.Player4Score = newGame.Player4Score;

                UserDAL udal    = new UserDAL();
                var     player1 = db.Users.FirstOrDefault(x => x.UserId == game.Player1);
                player1.Points = game.Player1Score;

                var player2 = db.Users.FirstOrDefault(x => x.UserId == game.Player2);
                player2.Points = game.Player2Score;

                var player3 = db.Users.FirstOrDefault(x => x.UserId == game.Player3);
                player3.Points = game.Player3Score;

                var player4 = db.Users.FirstOrDefault(x => x.UserId == game.Player4);
                player4.Points = game.Player4Score;

                int    min    = player1.Points;
                string winner = player1.Username;
                if (min < player2.Points)
                {
                    min    = player2.Points;
                    winner = player2.Username;
                }
                if (min < player3.Points)
                {
                    min    = player3.Points;
                    winner = player3.Username;
                }
                if (min < player4.Points)
                {
                    min    = player4.Points;
                    winner = player4.Username;
                }

                var winnerUser = db.Users.FirstOrDefault(x => x.Username.Equals(winner));
                winnerUser.Wins++;
                db.SaveChanges();

                return(winner);
            }
        }
示例#5
0
        public Game AddPlayer(int playerid, int gameId)
        {
            using (var db = new HeartsEntities())
            {
                var g = db.Games.FirstOrDefault(x => x.GameId == gameId);
                if (g.Status == (int)GameStatus.Aborted || g.Status == (int)GameStatus.Ended)
                {
                    logger.Warn("GameId: {0} - doesn't exist anymore..", gameId);
                    throw new CustomException("Game doesn't exist anymore.");
                }
                if (g.Player1 == null)
                {
                    g.Player1          = playerid;
                    g.Player1StartTime = DateTime.Now;
                }
                else if (g.Player2 == null)
                {
                    g.Player2          = playerid;
                    g.Player2StartTime = DateTime.Now;
                }
                else if (g.Player3 == null)
                {
                    g.Player3          = playerid;
                    g.Player3StartTime = DateTime.Now;
                }
                else if (g.Player4 == null)
                {
                    g.Player4          = playerid;
                    g.Player4StartTime = DateTime.Now;
                    g.StartTime        = DateTime.Now;
                }
                ;

                if (g.Player1 != null && g.Player2 != null && g.Player3 != null && g.Player4 != null)
                {
                    g.Status = (int)GameStatus.Started;
                }

                if (g == null)
                {
                    logger.Warn("GameId: {0} - not found.", g.GameId);
                    throw new CustomException("Invalid Game.");
                }
                if (db.Users.FirstOrDefault(x => x.UserId == g.Player2 || x.UserId == g.Player3 || x.UserId == g.Player4) == null)
                {
                    throw new CustomException("Invalid user.");
                }
                db.SaveChanges();
                return(g);
            }
        }
示例#6
0
        public int AddGame(int player1)
        {
            using (var db = new HeartsEntities())
            {
                var user = db.Users.FirstOrDefault(x => x.UserId == player1);
                if (user == null)
                {
                    throw new CustomException("Invalid user.");
                }
                if (db.Games.FirstOrDefault(x =>
                                            (
                                                x.Player1 == player1 ||
                                                x.Player2 == player1 ||
                                                x.Player3 == player1 ||
                                                x.Player4 == player1
                                            )
                                            &&
                                            (
                                                x.Status == (int)GameStatus.Started || x.Status == (int)GameStatus.Waiting)
                                            ) != null)
                {
                    throw new CustomException("User is already part of an another game. You can play only one game at a time.");
                }

                Game game = new Game {
                    Player1 = player1, Status = (int)GameStatus.Waiting, StartTime = DateTime.Now, Player1StartTime = DateTime.Now
                };

                db.Games.Add(game);
                db.SaveChanges();

                user.ActiveGameId = game.GameId;
                logger.Info("GamedId: {0} - added.", game.GameId);
                db.SaveChanges();

                return(game.GameId);
            }
        }
示例#7
0
        public User AddUser(User user)
        {
            using (var db = new HeartsEntities())
            {
                if (db.Users.FirstOrDefault(x => x.Username.Equals(user.Username)) != null)
                {
                    throw new CustomException("User name already taken.");
                }
                if (db.Users.FirstOrDefault(x => x.EmailId.Equals(user.EmailId)) != null)
                {
                    throw new CustomException("Email Id already exists.");
                }

                db.Users.Add(user);
                db.SaveChanges();
                logger.Info("UserId: {0} - Registered.", user.UserId);
                return(user);
            }
        }
示例#8
0
        public void UpdateGameAfterInit(Game initGame)
        {
            using (var db = new HeartsEntities())
            {
                var game = db.Games.FirstOrDefault(x => x.GameId == initGame.GameId);
                if (game == null)
                {
                    logger.Info("GameId: {0} - invalid game.", game.GameId);
                    throw new CustomException("Invalid Game.");
                }
                game.Turn       = initGame.Turn;
                game.Status     = initGame.Status;
                game.PassOrPlay = initGame.PassOrPlay;
                game.GameRound  = initGame.GameRound;

                game.Player1Hand = initGame.Player1Hand;
                game.Player2Hand = initGame.Player2Hand;
                game.Player3Hand = initGame.Player3Hand;
                game.Player4Hand = initGame.Player4Hand;

                db.SaveChanges();
            }
        }
示例#9
0
 public Move AddMove(Move move)
 {
     using (var db = new HeartsEntities())
     {
         if (db.Games.FirstOrDefault(x => x.GameId == move.GameId) == null)
         {
             throw new Exception("Game not found.");
         }
         if (db.Users.FirstOrDefault(x => x.UserId == move.PlayerId) == null)
         {
             throw new Exception("User not found.");
         }
         if (db.Games.FirstOrDefault(
                 x => x.GameId == move.GameId && (
                     x.Player1 != move.PlayerId || x.Player2 != move.PlayerId ||
                     x.Player3 != move.PlayerId || x.Player4 != move.PlayerId)) == null)
         {
             throw new Exception("User not in game.");
         }
         db.Moves.Add(move);
         db.SaveChanges();
         return(move);
     }
 }
示例#10
0
        public void UpdateGameAfterMove(Game update_game, int userId)
        {
            using (var db = new HeartsEntities())
            {
                var game = db.Games.FirstOrDefault(x => x.GameId == update_game.GameId);
                if (game == null)
                {
                    throw new CustomException("Invalid Game.");
                }

                game.Turn         = update_game.Turn;
                game.LeadingSuit  = update_game.LeadingSuit;
                game.HeartsPlayed = update_game.HeartsPlayed;
                game.SpadesPlayed = update_game.SpadesPlayed;

                game.Player1Hand = update_game.Player1Hand;
                game.Player2Hand = update_game.Player2Hand;
                game.Player3Hand = update_game.Player3Hand;
                game.Player4Hand = update_game.Player4Hand;

                if (game.PassOrPlay == 2)
                {
                    game.Player1Stash = update_game.Player1Stash;
                    game.Player2Stash = update_game.Player2Stash;
                    game.Player3Stash = update_game.Player3Stash;
                    game.Player4Stash = update_game.Player4Stash;

                    game.Player1Score = update_game.Player1Score;
                    game.Player2Score = update_game.Player2Score;
                    game.Player3Score = update_game.Player3Score;
                    game.Player4Score = update_game.Player4Score;

                    game.Player1Card = update_game.Player1Card;
                    game.Player2Card = update_game.Player2Card;
                    game.Player3Card = update_game.Player3Card;
                    game.Player4Card = update_game.Player4Card;
                }

                else if (game.PassOrPlay == 1)
                {
                    if (userId == game.Player1)
                    {
                        game.Player1Trash = update_game.Player1Trash;
                    }
                    if (userId == game.Player2)
                    {
                        game.Player2Trash = update_game.Player2Trash;
                    }
                    if (userId == game.Player3)
                    {
                        game.Player3Trash = update_game.Player3Trash;
                    }
                    if (userId == game.Player4)
                    {
                        game.Player4Trash = update_game.Player4Trash;
                    }

                    if (game.Player1Trash != null && game.Player2Trash != null && game.Player3Trash != null && game.Player4Trash != null)
                    {
                        if (game.Player1Trash.Length > 1 && game.Player2Trash.Length > 1 && game.Player3Trash.Length > 1 && game.Player4Trash.Length > 1)
                        {
                            // Passing the trash
                            if (game.GameRound.Value == 1)
                            {
                                game.Player1Hand += game.Player4Trash;
                                game.Player2Hand += game.Player1Trash;
                                game.Player3Hand += game.Player2Trash;
                                game.Player4Hand += game.Player3Trash;
                            }
                            else if (game.GameRound.Value == 2)
                            {
                                game.Player4Hand += game.Player1Trash;
                                game.Player3Hand += game.Player4Trash;
                                game.Player2Hand += game.Player3Trash;
                                game.Player1Hand += game.Player2Trash;
                            }
                            else if (game.GameRound.Value == 3)
                            {
                                game.Player1Hand += game.Player3Trash;
                                game.Player3Hand += game.Player1Trash;
                                game.Player2Hand += game.Player4Trash;
                                game.Player4Hand += game.Player2Trash;
                            }
                            game.Player1Trash = null;
                            game.Player2Trash = null;
                            game.Player3Trash = null;
                            game.Player4Trash = null;

                            game.PassOrPlay = 2;
                        }
                    }
                }

                db.SaveChanges();
            }
        }