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); } }
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); }