コード例 #1
0
 private async Task <bool> SendSubmissionResultsToQueue(XQueueClient client, XQueueExerciseSubmission submission)
 {
     return(await FuncUtils.TrySeveralTimesAsync(
                () => TrySendSubmissionResultsToQueue(client, submission),
                5,
                () => Task.Delay(TimeSpan.FromMilliseconds(1))));
 }
コード例 #2
0
ファイル: XQueueRepo.cs プロジェクト: crassirostris/Ulearn
 public async Task MarkXQueueSubmissionThatResultIsSent(XQueueExerciseSubmission submission)
 {
     submission.IsResultSent = true;
     await db.SaveChangesAsync();
 }
コード例 #3
0
ファイル: RunnerController.cs プロジェクト: PhonkX/uLearn
        private async Task <bool> TrySendSubmissionResultsToQueue(XQueueClient client, XQueueExerciseSubmission submission)
        {
            var checking = submission.Submission.AutomaticChecking;

            var courseManager = WebCourseManager.Instance;
            var slide         = courseManager.FindCourse(checking.CourseId)?.FindSlideById(checking.SlideId) as ExerciseSlide;

            if (slide == null)
            {
                log.Warn($"Can't find exercise slide {checking.SlideId} in course {checking.CourseId}. Exit");
                return(false);
            }

            var score = (double)checking.Score / slide.Scoring.PassedTestsScore;

            if (score > 1)
            {
                score = 1;
            }

            var message = checking.IsCompilationError ? checking.CompilationError.Text : checking.Output.Text;

            return(await client.PutResult(new XQueueResult
            {
                header = submission.XQueueHeader,
                Body = new XQueueResultBody
                {
                    IsCorrect = checking.IsRightAnswer,
                    Message = message,
                    Score = score,
                }
            }).ConfigureAwait(false));
        }
コード例 #4
0
        private async Task <bool> TrySendSubmissionResultsToQueue(XQueueClient client, XQueueExerciseSubmission submission)
        {
            var checking = submission.Submission.AutomaticChecking;

            var slide = (await courseManager.FindCourseAsync(checking.CourseId))?.FindSlideById(checking.SlideId, true) as ExerciseSlide;

            if (slide == null)
            {
                log.Warn($"Can't find exercise slide {checking.SlideId} in course {checking.CourseId}. Exit");
                return(false);
            }

            var score = checking.IsRightAnswer ? 1 : 0;

            var message = checking.IsCompilationError ? checking.CompilationError.Text : checking.Output.Text;

            return(await client.PutResult(new XQueueResult
            {
                header = submission.XQueueHeader,
                Body = new XQueueResultBody
                {
                    IsCorrect = checking.IsRightAnswer,
                    Message = message,
                    Score = score,
                }
            }));
        }