Ejemplo n.º 1
0
        public IActionResult Play(string id)
        {
            Guid   playerId       = Guid.Empty;
            string playerIdString = HttpContext.Request.Cookies["drx1e"];

            if (playerIdString == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            try { Guid.TryParse(playerIdString, out playerId); }
            catch (FormatException) { return(RedirectToAction(nameof(Index))); }

            Quiz quizplayers = _quizService.GetQuizWithPlayersByLink(id);

            QuizPlayer player = quizplayers.QuizPlayers.FirstOrDefault(qp => qp.PlayerId.Equals(playerId));

            if (player == null || player.HasPlayed)
            {
                return(RedirectToAction(nameof(Room), new { id = id }));
            }

            Quiz quiz = _quizService.GetQuizWithQuestions(id);

            PlayQuizVM playQuizVM = new PlayQuizVM
            {
                Questions  = quiz.Questions.ToArray(),
                PlayerName = player.Player.Name
            };

            return(View(playQuizVM));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Play(string id, PlayQuizVM playQuizVM)
        {
            Guid playerId       = Guid.Empty;
            int  correctAnswers = 0;

            string playerIdString = HttpContext.Request.Cookies["drx1e"];

            if (playerIdString == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            try { Guid.TryParse(playerIdString, out playerId); }
            catch (FormatException) { return(RedirectToAction(nameof(Index))); }

            Quiz quiz = _quizService.GetQuizWithQuestions(id);

            Question[] questions = quiz.Questions.ToArray();


            playQuizVM.Questions = quiz.Questions.ToArray();

            string answers = string.Empty;

            for (int i = 0; i < questions.Length; i++)
            {
                Question question = questions[i];

                string optionIndexString = $"selectedAnswer[{i}]";

                string option = Request.Form[optionIndexString];

                if (option != null)
                {
                    answers += option;
                    // if (_questionService.IsRightAnswer(question, option)) correctAnswers++;
                    if (question.CorrectOption.Equals(option))
                    {
                        correctAnswers++;
                    }
                }
                else
                {
                    answers += "null";
                }

                if (i < questions.Length - 1)
                {
                    answers += "-";
                }
            }

            Quiz updatedQuiz = _quizService.SetPlayerScore(id, playerId, correctAnswers);

            QuizPlayer quizPlayer = updatedQuiz.QuizPlayers
                                    .FirstOrDefault(qp => qp.PlayerId.Equals(playerId));

            await _hubContext.Clients.All.SendAsync("playerFinish", $"{quizPlayer.Player.Name}-{correctAnswers}");

            return(RedirectToAction(nameof(Room), new { id = id }));
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Room(string id)
        {
            Guid playerId = Guid.Empty;

            Quiz quiz = _quizService.GetQuizWithPlayersByLink(id);

            if (quiz == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            if (User.Identity.IsAuthenticated && User.IsInRole("Student"))
            {
                switch (quiz.CreatorRole)
                {
                case "Student":
                    Guid studentId = Guid.Parse(User.Claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier).Value);
                    User user      = _userService.FindById(studentId);

                    if (user.Id.Equals(quiz.UserId))
                    {
                        QuizRoomVM roomVM = new QuizRoomVM
                        {
                            Players       = quiz.QuizPlayers,
                            IsQuizCreator = true,
                            Quiz          = quiz,
                            CreatorName   = user.FirstName
                        };

                        return(View(roomVM));
                    }

                    break;
                }
            }

            string playerIdString = HttpContext.Request.Cookies["drx1e"];

            if (playerIdString == null)
            {
                return(RedirectToAction(nameof(Index)));
            }

            try { Guid.TryParse(playerIdString, out playerId); }
            catch (FormatException) { return(RedirectToAction(nameof(Index))); }


            QuizPlayer player = quiz.QuizPlayers.FirstOrDefault(qp => qp.PlayerId.Equals(playerId));

            if (player == null)
            {
                return(RedirectToAction(nameof(Index)));
            }


            QuizRoomVM quizRoomVM = new QuizRoomVM
            {
                PlayerUsername  = player.Player.Name,
                Players         = quiz.QuizPlayers,
                Quiz            = quiz,
                PlayerHasPlayed = player.HasPlayed,
                PlayerScore     = player.Score,
                FinishedPlayers = quiz.QuizPlayers.Where(qp => qp.HasPlayed).ToList()
            };

            await _hubContext.Clients.All.SendAsync("receivemessage", $"{player.Player.Name}-{id}");

            return(View(quizRoomVM));
        }