Exemple #1
0
        public async Task CheckSolution(string source, int language)
        {
            var duel   = GetCurrentDuel();
            var player = duel.Players.First(p => p.Email.Equals(Context.User.FindFirstValue(ClaimTypes.Email)));

            var compileResult = await _solutionLogic.CheckSolution(duel.Task.Id, source, language);

            _solutionLogic.SaveDuelSolution(duel.Id, source, player.Email, language,
                                            compileResult.Compiled && compileResult.ResultCorrect);
            if (compileResult.Compiled && compileResult.ResultCorrect)
            {
                await Clients.Group(duel.GroupName).SendAsync("DuelHasWinner", player);

                await Clients.Caller.SendAsync("scoreAdded");

                await Groups.RemoveFromGroupAsync(duel.Players[0].ConnectionId, duel.GroupName);

                await Groups.RemoveFromGroupAsync(duel.Players[1].ConnectionId, duel.GroupName);

                _duelRepository.SetWinner(duel, player);
                UserHandler.ActiveDuels.Remove(duel);
            }
            else
            {
                await Clients.Caller.SendAsync("solutionChecked", compileResult);
            }
        }
Exemple #2
0
        public async Task <CompileDto> Solve(int taskId, string source, int language)
        {
            if (IsCognizantChallengeOver())
            {
                throw new Exception("Challenge is over!");
            }
            var userEmail     = User.FindFirst(ClaimTypes.Email).Value;
            var compileResult = await _solutionLogic.CheckSolution(taskId, source, language);

            if (compileResult.Compiled && compileResult.ResultCorrect)
            {
                await _solutionLogic.SaveSolution(taskId, source, userEmail, language);
            }

            return(compileResult);
        }