Exemple #1
0
        public Game RetrieveGame(string name, bool retrieveAssociations)
        {
            using (var db = new ConquestionDBContext())
            {
                if (retrieveAssociations != true)
                {
                    Game chosenGame = db.Games.AsNoTracking()
                                      .Where(x => x.Name.Equals(name))
                                      .FirstOrDefault();

                    return(chosenGame);
                }
                else
                {
                    Game chosenGame = db.Games.AsNoTracking()
                                      .Include("Players")
                                      .Include("QuestionSet.Questions.Answers")
                                      .Include("Rounds.Question.Answers")
                                      .Include("Rounds.PlayerAnswers")
                                      .Where(x => x.Name.Equals(name))
                                      .FirstOrDefault();


                    return(chosenGame);
                }
            }
        }
Exemple #2
0
        public void AddPlayer(Game game, Player player)
        {
            using (var db = new ConquestionDBContext())
            {
                var gameEntity   = db.Games.Include("Players").Where(g => g.Name.Equals(game.Name)).FirstOrDefault();
                var playerEntity = db.Players.Where(p => p.Name.Equals(player.Name)).FirstOrDefault();
                if (gameEntity != null)

                {
                    if (gameEntity.Players == null)
                    {
                        gameEntity.Players = new List <Player>();
                    }
                    if (!gameEntity.Players.Contains(playerEntity))
                    {
                        gameEntity.Players.Add(playerEntity);
                        db.Entry(gameEntity).State = System.Data.Entity.EntityState.Modified;
                        db.SaveChanges();
                    }
                }
                else
                {
                    throw new Exception();
                }
            }
        }
Exemple #3
0
        public bool StartGame(Game game, Player player)
        {
            using (var db = new ConquestionDBContext())
            {
                var gameEntity   = db.Games.Include("Players").Where(g => g.Id == game.Id).FirstOrDefault();
                var playerEntity = db.Players.Where(p => p.Name.Equals(player.Name)).FirstOrDefault();

                if (playerEntity.Name.Equals(gameEntity.Players[0].Name) && gameEntity.GameStatus.Equals(Game.GameStatusEnum.starting))
                {
                    gameEntity.GameStatus = Game.GameStatusEnum.ongoing;
                    gameEntity.Rounds     = new List <Round>();
                    Round firstRound = new Round {
                        RoundNo = 1, QuestionStartTime = DateTime.Now
                    };
                    var randQuestion   = roundCtr.RetrieveRandomQuestion(gameEntity);
                    var questionEntity = db.Questions.Include("Answers").Where(r => r.Id == randQuestion.Id).FirstOrDefault();
                    firstRound.Question = questionEntity;
                    gameEntity.Rounds.Add(firstRound);
                    db.Entry(gameEntity).State = System.Data.Entity.EntityState.Modified;
                    db.SaveChanges();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
 public Player RetrievePlayer(string name)
 {
     using (ConquestionDBContext db = new ConquestionDBContext())
     {
         return(db.Players.Where(p => p.Name.Equals(name)).FirstOrDefault());
     }
 }
Exemple #5
0
        public Game CreateGame(Game game, String questionSet, int noOfRounds)
        {
            using (var db = new ConquestionDBContext())
            {
                if (!ActiveGamesNames().Contains(game.Name))
                {
                    game.GameStatus  = Game.GameStatusEnum.starting;
                    game.QuestionSet = db.QuestionSets.Include("Questions").Include("Questions.Answers").Where(q => q.Title == questionSet).FirstOrDefault();
                    game.NoOfRounds  = noOfRounds;
                    db.Games.Add(game);
                    db.SaveChanges();

                    var askedQuestionEntity = db.AskedQuestions.Where(q => q.GameId == game.Id).ToList();
                    var allQuestionsEntity  = db.Questions.Include("Answers").Where(q => q.QuestionSetId == game.QuestionSet.Id).ToList();
                    if (askedQuestionEntity.Count == 0)
                    {
                        foreach (Question q in allQuestionsEntity)
                        {
                            db.AskedQuestions.Add(new AskedQuestion {
                                GameId = game.Id, QuestionId = q.Id, HasBeenAsked = false
                            });
                            db.SaveChanges();
                        }
                    }



                    return(game);
                }
                else
                {
                    throw new Exception("Game name is already taken, please select an unique name.");
                }
            }
        }
Exemple #6
0
 //Definitely Keep
 public QuestionSet RetrieveQuestionSet(int id)
 {
     using (var db = new ConquestionDBContext())
     {
         var questionSet = db.QuestionSets.Include("Questions.Answers").Where(x => x.Id == id).FirstOrDefault();
         return(questionSet);
     }
 }
Exemple #7
0
 public QuestionSet RetrieveQuestionSetByTitle(string title)
 {
     using (var db = new ConquestionDBContext())
     {
         var questionSet = db.QuestionSets.Include("Questions.Answers").Where(x => x.Title.Equals(title)).FirstOrDefault();
         return(questionSet);
     }
 }
Exemple #8
0
 public void DeleteQuestionSet(QuestionSet questionSet)
 {
     using (var db = new ConquestionDBContext())
     {
         db.QuestionSets.Remove(questionSet);
         db.SaveChanges();
     }
 }
 public bool ValidateAnswer(Answer answer)
 {
     using (var db = new ConquestionDBContext())
     {
         bool success = db.Answers.AsNoTracking().Where(a => a.Id == answer.Id).FirstOrDefault().IsValid;
         return(success);
     }
 }
 public Player RetrieveRoundWinner(Round round)
 {
     using (var db = new ConquestionDBContext())
     {
         var rEntity = db.Rounds.Include("RoundWinner").Where(r => r.Id == round.Id).FirstOrDefault();
         return(rEntity.RoundWinner);
     }
 }
Exemple #11
0
 //Definitely Keep
 public List <QuestionSet> RetrieveAllQuestionSets()
 {
     using (var db = new ConquestionDBContext())
     {
         var questionSet = db.QuestionSets.Include("Questions.Answers").ToList();
         return(questionSet);
     }
 }
 public Player CreatePlayer(Player player)
 {
     using (var db = new ConquestionDBContext())
     {
         db.Players.Add(player);
         db.SaveChanges();
         return(player);
     }
 }
Exemple #13
0
 //Definitely Keep
 public QuestionSet CreateQuestionSet(QuestionSet questionSet)
 {
     using (var db = new ConquestionDBContext())
     {
         db.QuestionSets.Add(questionSet);
         db.SaveChanges();
         return(questionSet);
     }
 }
        public void CreateRound(Game game)
        {
            using (ConquestionDBContext db = new ConquestionDBContext())
            {
                using (var transaction = db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
                {
                    // Should be ok
                    try
                    {
                        var gameEntity = db.Games.Include("Players").Include("QuestionSet.Questions.Answers").Include("Rounds.Question.Answers")
                                         .Where(x => x.Id.Equals(game.Id))
                                         .FirstOrDefault();

                        if (gameEntity.Rounds.Count < gameEntity.NoOfRounds)
                        {
                            //Check if rounds list has been initialised
                            if (gameEntity.Rounds == null)
                            {
                                gameEntity.Rounds = new List <Round>();
                            }

                            // if there are rounds get the count and set the round number to the count + 1
                            int?noOfRounds = gameEntity.Rounds.Count();
                            var newRound   = new Round();

                            if (noOfRounds == null || noOfRounds == 0)
                            {
                                newRound.RoundNo = 1;
                            }
                            else
                            {
                                newRound.RoundNo = (int)noOfRounds + 1;
                            }

                            newRound.QuestionStartTime = DateTime.Now;
                            var question       = RetrieveRandomQuestion(gameEntity);
                            var questionEntity = db.Questions.Include("Answers").Where(q => q.Id == question.Id).FirstOrDefault();
                            newRound.Question = questionEntity;
                            gameEntity.Rounds.Add(newRound);

                            db.Entry(gameEntity).State = System.Data.Entity.EntityState.Modified;
                            db.SaveChanges();
                        }
                        else
                        {
                        }
                        transaction.Commit();
                    }
                    catch (Exception)
                    {
                        //Explicity dont rollback here because we expect deadlock situations which will be solved by SQL server auto rollbacking no need to here.
                        // transaction.Rollback();
                    }
                }
            }
        }
Exemple #15
0
        public List <Game> RetrieveActiveGames()
        {
            using (var db = new ConquestionDBContext())
            {
                List <Game> activeGames = new List <Game>();
                activeGames = db.Games.Where(g => g.GameStatus == Game.GameStatusEnum.starting).ToList();

                return(activeGames);
            }
        }
Exemple #16
0
 public List <string> ActiveGamesNames()
 {
     using (var db = new ConquestionDBContext())
     {
         List <Game> activeGames = new List <Game>();
         activeGames = db.Games.Where(g => g.GameStatus == Game.GameStatusEnum.starting).ToList();
         List <string> activeGamesNames = new List <string>();
         foreach (Game g in activeGames)
         {
             activeGamesNames.Add(g.Name);
         }
         return(activeGamesNames);
     }
 }
 //To see if everyone has answered in this round
 public bool CheckIfAllPlayersAnswered(Game game, Round round)
 {
     using (var db = new ConquestionDBContext())
     {
         bool allPlayersAnswered = false;
         int  noOfPlayers        = game.Players.Count;
         var  raEntity           = db.Rounds.Include("PlayerAnswers").Where(ra => ra.Id == round.Id).FirstOrDefault();
         int? noOfAnswers        = raEntity.PlayerAnswers?.Count;
         if (noOfPlayers == noOfAnswers)
         {
             allPlayersAnswered = true;
         }
         return(allPlayersAnswered);
     }
 }
        public Question RetrieveRandomQuestion(Game game)
        {
            using (var db = new ConquestionDBContext())
            {
                var           unaskedQuestion = db.AskedQuestions.AsNoTracking().Include("Question").Include("Question.Answers").Where(q => q.GameId == game.Id && q.HasBeenAsked == false).ToList();
                AskedQuestion question        = new AskedQuestion();
                unaskedQuestion.Shuffle();
                question = unaskedQuestion[0];

                var askedQuestionEntity = db.AskedQuestions.Where(q => q.GameId == game.Id && q.QuestionId == question.QuestionId).FirstOrDefault();
                askedQuestionEntity.HasBeenAsked    = true;
                db.Entry(askedQuestionEntity).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();
                return(question.Question);
            }
        }
        public bool CheckPlayerAnswers(Game game, Round round)
        {
            using (var db = new ConquestionDBContext())
            {
                bool ready = false;

                var gameEntity = db.Games.Include("Players").Where(g => g.Name.Equals(game.Name)).FirstOrDefault();

                var roundActionEntity = db.Rounds.Include("PlayerAnswers").Where(p => p.Id == (round.Id)).FirstOrDefault();

                while (gameEntity.Players.Count != roundActionEntity.PlayerAnswers.Count)
                {
                    Console.WriteLine("waiting");
                }
                ready = true;
                return(ready);
            }
        }
Exemple #20
0
        //not sure we need these
        public void AddAnswersToAQuestion(Question question, List <Answer> answerList)
        {
            using (var db = new ConquestionDBContext())
            {
                if (question.Answers == null)
                {
                    question.Answers = new List <Answer>();
                }

                foreach (Answer a in answerList)
                {
                    question.Answers.Add(a);
                }

                db.Entry(question).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();
            }
        }
Exemple #21
0
        //Not sure we need these
        public void AddQuestionsToQuestionSet(QuestionSet questionSet, List <Question> questionlist)
        {
            using (var db = new ConquestionDBContext())
            {
                if (questionSet.Questions == null)
                {
                    questionSet.Questions = new List <Question>();
                }

                foreach (Question q in questionlist)
                {
                    questionSet.Questions.Add(q);
                }

                db.Entry(questionSet).State = System.Data.Entity.EntityState.Modified;
                db.SaveChanges();
            }
        }
Exemple #22
0
        public Player DetermineGameWinner(Game game)
        {
            using (var db = new ConquestionDBContext())
            {
                var roundsEntity = db.Games.Include("Rounds").Include("Players").Where(g => g.Id == game.Id).FirstOrDefault().Rounds.ToList();

                try
                {
                    var winner = roundsEntity.Where(r => r.RoundWinner != null).GroupBy(r => r.RoundWinner).OrderByDescending(r => r.Count()).ToList()
                                 .First().Key;
                    return(winner);
                }
                catch (InvalidOperationException)
                {
                    return(null);
                }
            }
        }
Exemple #23
0
        public bool LeaveGame(Game game, Player player)
        {
            using (var db = new ConquestionDBContext())
            {
                var gameEntity   = db.Games.Include("Players").Where(g => g.Id == game.Id).FirstOrDefault();
                var playerEntity = db.Players.Where(p => p.Name.Equals(player.Name)).FirstOrDefault();

                if (gameEntity != null && playerEntity != null)
                {
                    gameEntity.Players.Remove(playerEntity);
                    db.Entry(gameEntity).State = System.Data.Entity.EntityState.Modified;
                    db.SaveChanges();
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
        }
Exemple #24
0
 public bool CheckIfGameIsFinished(Game game)
 {
     using (var db = new ConquestionDBContext())
     {
         bool finished       = false;
         Game gameEntity     = db.Games.Include("Rounds").Include("Players").AsNoTracking().Where(g => g.Id == game.Id).FirstOrDefault();
         int  elapsedSeconds = (int)(DateTime.Now - gameEntity.Rounds.Last().QuestionStartTime).TotalSeconds;
         if (gameEntity.Rounds.Count() == gameEntity.NoOfRounds)
         {
             if (roundCtr.CheckIfAllPlayersAnswered(gameEntity, gameEntity.Rounds.Last()) || elapsedSeconds == 30)
             {
                 gameEntity.GameStatus      = Game.GameStatusEnum.finished;
                 db.Entry(gameEntity).State = System.Data.Entity.EntityState.Modified;
                 db.SaveChanges();
                 finished = true;
             }
         }
         return(finished);
     }
 }
Exemple #25
0
 public void AddQuestionSet(Game game, QuestionSet questionSet)
 {
     using (var db = new ConquestionDBContext())
     {
         var gameEntity        = db.Games.Where(g => g.Name.Equals(game.Name)).FirstOrDefault();
         var questionSetEntity = db.QuestionSets.Where(q => q.Title.Equals(questionSet.Title)).FirstOrDefault();
         if (gameEntity != null && questionSetEntity != null)
         {
             if (gameEntity.QuestionSet == null || gameEntity.QuestionSet.Title.Equals(""))
             {
                 gameEntity.QuestionSet     = questionSetEntity;
                 db.Entry(gameEntity).State = System.Data.Entity.EntityState.Modified;
                 db.SaveChanges();
             }
         }
         else
         {
             throw new Exception();
         }
     }
 }
        public void SubmitAnswer(Round round, PlayerAnswer playerAnswer)
        {
            using (var db = new ConquestionDBContext())
            {
                //This is important to compare to the question start time to see if the player answered in time.
                playerAnswer.PlayerAnswerTime = DateTime.Now;
                var playerEntity = db.Players.Where(p => p.Name.Equals(playerAnswer.Player.Name)).FirstOrDefault();
                playerAnswer.Player = playerEntity;
                var answerEntity = db.Answers.Where(a => a.Id == playerAnswer.AnswerGiven.Id).FirstOrDefault();
                playerAnswer.AnswerGiven = answerEntity;
                Round rEntity = db.Rounds.Include("PlayerAnswers.Player").Include("RoundWinner").Where(r => r.Id == round.Id).FirstOrDefault();

                // Check is the list has been initialised, if not intialise it
                if (rEntity.PlayerAnswers == null)
                {
                    rEntity.PlayerAnswers = new List <PlayerAnswer>();
                }

                //Checking if the player answers in time and that they haven't already submitted an answer
                int  elapsedSeconds      = (int)(playerAnswer.PlayerAnswerTime - rEntity.QuestionStartTime).TotalSeconds;
                bool playerHasntAnswered = true;
                if (rEntity.PlayerAnswers.Where(pa => pa.Player.Id == playerAnswer.Player.Id).FirstOrDefault() != null)
                {
                    playerHasntAnswered = false;
                }

                //Saves the player's answer to the database
                if (elapsedSeconds <= 35 && playerHasntAnswered)
                {
                    rEntity.PlayerAnswers.Add(playerAnswer);
                    if (ValidateAnswer(playerAnswer.AnswerGiven) && rEntity.RoundWinner == null)
                    {
                        rEntity.RoundWinner = playerAnswer.Player;
                    }
                    db.Entry(rEntity).State = System.Data.Entity.EntityState.Modified;
                    db.SaveChanges();
                }
            }
        }
Exemple #27
0
        public int DetermineNoOfCorrectAnswers(Game game, Player player)
        {
            using (var db = new ConquestionDBContext())
            {
                int noOfCorrectAnswers = 0;
                int correctAnswers     = 0;

                var playerAnwsersEntity = db.PlayerAnswers.Include("Round.Game").Include("Player").Include("AnswerGiven").ToList();

                correctAnswers = 0;
                foreach (PlayerAnswer pA in playerAnwsersEntity)
                {
                    if (pA.Player.Id == player.Id && pA.AnswerGiven.IsValid == true && pA.Round.Game.Id == game.Id)
                    {
                        correctAnswers++;
                    }
                }
                noOfCorrectAnswers = correctAnswers;

                return(noOfCorrectAnswers);
            }
        }
Exemple #28
0
 public bool JoinGame(Game game, Player player)
 {
     using (var db = new ConquestionDBContext())
     {
         bool success      = false;
         var  playerEntity = db.Players.Where(p => p.Name.Equals(player.Name)).FirstOrDefault();
         using (var transaction = db.Database.BeginTransaction(System.Data.IsolationLevel.Serializable))
         {
             try
             {
                 var gameEntity = db.Games.Include("Players").Where(g => g.Id == game.Id).FirstOrDefault();
                 if (gameEntity != null && playerEntity != null)
                 {
                     if (gameEntity.Players.Count < 4)
                     {
                         gameEntity.Players.Add(playerEntity);
                         db.Entry(gameEntity).State = System.Data.Entity.EntityState.Modified;
                         db.SaveChanges();
                         //System.Threading.Thread.Sleep(5000);
                         transaction.Commit();
                         success = true;
                     }
                     else if (gameEntity.Players.Contains(playerEntity))
                     {
                         success = true;
                     }
                 }
             }
             catch (Exception)
             {
                 transaction.Rollback();
             }
         }
         return(success);
     }
 }
Exemple #29
0
 // Returns a list of players so we can display their names on the map screen and determine what map nodes they own
 public List <Player> RetrieveAllPlayersByGameId(Game game)
 {
     using (var db = new ConquestionDBContext())
     {
         List <Player> foundPlayers = new List <Player>();
         var           gameEntity   = db.Games.Include("Players").Where(g => g.Id == game.Id).FirstOrDefault();
         if (gameEntity != null)
         {
             if (gameEntity.Players != null)
             {
                 foundPlayers = gameEntity.Players;
             }
             else
             {
                 throw new Exception();
             }
         }
         else
         {
             throw new Exception();
         }
         return(foundPlayers);
     }
 }