public Submission CreateProblemSubmission(int problem_id, SubmissionFormData submission_data) { var problem = context.Problems.Find(problem_id); var judge = new JudgeService(); if (problem == null) { throw new ObjectNotFoundException("Problem with specified id does not exist"); } // Trace.WriteLine(submission_data.ProgrammingLanguageId); var submission = InitializeSubmissionObject(problem, submission_data); context.Submissions.Add(submission); context.SaveChanges(); judge.OnSubmissionStatusChange += (sender, e) => { var result = e.ExecutionResult; submission.Status = context.SubmissionStatus.Find(result.Verdict); submission.RunningTime = result.RunningTime; submission.PeakMemmoryUsage = result.MemmoryUsage; // submission.PeakMemmoryUsage = result.Verdict == Verdict.CompilationError ? 0 : 5; // TODO REPLACE WITH REAL VALUE submission.StandardErrorStream = result.ErrorMsg; context.SaveChanges(); // this event must be emitter *after* invoking context.SaveChanges() OnSubmissionStatusChange?.Invoke(this, e); }; judge.judge(submission_data, problem); return(submission); }