/// <summary> /// 从给定的提交句柄创建 SubmissionVerdictRequestModel 类的新实例。 /// </summary> /// <param name="handle">提交句柄。</param> /// <returns>从给定的提交句柄创建的 SubmissionVerdictRequestModel 类的新实例。</returns> /// <exception cref="ArgumentNullException"/> public static SubmissionVerdictRequestModel FromSubmissionHandle(SubmissionHandle handle) { if (handle == null) { throw new ArgumentNullException(nameof(handle)); } SubmissionVerdictRequestModel model = new SubmissionVerdictRequestModel(); using (SubmissionDataProvider data = SubmissionDataProvider.Create(handle, true)) { model.SubmissionId = data.SubmissionId; model.ExecutionTime = data.ExecutionTime; model.ExecutionMemory = data.ExecutionMemory; model.VerdictMessage = data.VerdictMessage; if (data.VerdictStatus == SubmissionVerdictStatus.Completed) { model.Verdict = SubmissionVerdictConvert.ConvertToString(data.Verdict); } else { model.Verdict = SubmissionVerdictStatusConvert.ConvertToString(data.VerdictStatus); } } return(model); }
/// <summary> /// 从给定的用户提交句柄创建 SubmissionHandle 类的新实例。 /// </summary> /// <param name="handle">用户提交句柄。</param> /// <returns>从给定用户提交句柄创建的 SubmissionHandle 类的新实例。</returns> /// <exception cref="ArgumentNullException"/> public static SubmissionBriefModel FromSubmissionHandle(SubmissionHandle handle) { if (handle == null) { throw new ArgumentNullException(nameof(handle)); } SubmissionBriefModel model = new SubmissionBriefModel(); using (SubmissionDataProvider data = SubmissionDataProvider.Create(handle, true)) { model.SubmissionId = data.SubmissionId; model.ProblemId = data.ProblemId; model.Username = data.Username; model.TeamId = data.TeamId; model.ExecutionTime = data.ExecutionTime; model.ExecutionMemory = data.ExecutionMemory; model.Language = data.Language; model.VerdictStatus = data.VerdictStatus; model.Verdict = data.Verdict; model.CreationTime = data.CreationTimeStamp; } return(model); }
/// <summary> /// 从给定的用户提交句柄创建 SubmissionDetailModel 类的新实例。 /// </summary> /// <param name="handle">用户提交句柄。</param> /// <returns>从给定的句柄创建的 SubmissionDetailModel 类的新实例。</returns> /// <exception cref="ArgumentNullException"/> public static SubmissionDetailModel FromSubmissionHandle(SubmissionHandle handle) { if (handle == null) { throw new ArgumentNullException(nameof(handle)); } SubmissionDetailModel model = new SubmissionDetailModel(); using (SubmissionDataProvider submissionData = SubmissionDataProvider.Create(handle, true)) { model.SubmissionId = submissionData.SubmissionId; model.ProblemId = submissionData.ProblemId; model.ContestId = submissionData.ContestId; model.Username = submissionData.Username; model.TeamId = submissionData.TeamId; model.CreationTime = submissionData.CreationTimeStamp; model.Language = submissionData.Language; model.ExecutionTime = submissionData.ExecutionTime; model.ExecutionMemory = submissionData.ExecutionMemory; model.VerdictStatus = submissionData.VerdictStatus; model.Verdict = submissionData.Verdict; model.VerdictMessage = submissionData.VerdictMessage; using (ProblemDataProvider problemData = ProblemDataProvider.Create(new ProblemHandle(submissionData.ProblemId), true)) { model.ProblemTitle = problemData.Title; } } return(model); }
/// <summary> /// 从给定的用户提交句柄创建 SubmissionFetchHandle 类的新实例。 /// </summary> /// <param name="handle">用户提交句柄。</param> /// <returns>相应的 SubmissionFetchModel 数据模型对象。</returns> /// <exception cref="ArgumentNullException"/> public static SubmissionFetchResponseModel FromSubmissionHandle(SubmissionHandle handle) { if (handle == null) { throw new ArgumentNullException(nameof(handle)); } SubmissionFetchResponseModel model = new SubmissionFetchResponseModel(); using (SubmissionDataProvider submissionData = SubmissionDataProvider.Create(handle, true)) { model.SubmissionId = submissionData.SubmissionId; model.ProblemId = submissionData.ProblemId; model.Language = (int)submissionData.Language; model.Code = submissionData.Code; using (ProblemDataProvider problemData = ProblemDataProvider.Create(new ProblemHandle(submissionData.ProblemId), true)) { model.TimeLimit = problemData.TimeLimit; model.MemoryLimit = problemData.MemoryLimit; model.UseSpecialJudge = problemData.IsSpecialJudge ? BooleanTrue : BooleanFalse; } } return(model); }
public ActionResult UpdateSubmission() { SubmissionUpdateRequestModel requestPack = null; using (StreamReader reader = new StreamReader(Request.GetBufferedInputStream())) { try { requestPack = JsonConvert.DeserializeObject <SubmissionUpdateRequestModel>(reader.ReadToEnd()); } catch { return(this.NewtonsoftJson(SubmissionUpdateRespondModel.Failed)); } } // 对客户端进行身份验证。 if (requestPack == null || string.IsNullOrEmpty(requestPack.Password) || !VerdictAuthorization.CheckAuthorization(VerdictAuthorization.GetHashBytes(requestPack.Password))) { // 身份验证失败。 return(this.NewtonsoftJson(SubmissionUpdateRespondModel.Failed)); } // 执行更新操作。 if (!SubmissionManager.Default.IsSubmissionExist(requestPack.SubmissionId)) { return(this.NewtonsoftJson(SubmissionUpdateRespondModel.Failed)); } SubmissionHandle handle = new SubmissionHandle(requestPack.SubmissionId); using (SubmissionDataProvider data = SubmissionDataProvider.Create(handle, false)) { if (data.VerdictStatus == SubmissionVerdictStatus.Completed) { // 当前用户提交已经处于处理完毕状态。不执行任何操作。 return(this.NewtonsoftJson(SubmissionUpdateRespondModel.Succeed)); } data.ExecutionTime = requestPack.ExecutionTime; data.ExecutionMemory = requestPack.ExecutionMemory; data.Verdict = (SubmissionVerdict)requestPack.Verdict; data.VerdictMessage = requestPack.VerdictMessage; data.VerdictStatus = SubmissionVerdictStatus.Completed; } return(this.NewtonsoftJson(SubmissionUpdateRespondModel.Succeed)); }
// GET: /Internal/FetchSubmissions public ActionResult FetchSubmissions() { SubmissionFetchRequestModel requestPack = null; using (StreamReader reader = new StreamReader(Request.GetBufferedInputStream())) { try { requestPack = JsonConvert.DeserializeObject <SubmissionFetchRequestModel>(reader.ReadToEnd()); } catch { return(this.NewtonsoftJson(SubmissionFetchResponseModel.Empty)); } } // 对客户端进行身份验证。 if (requestPack == null || string.IsNullOrEmpty(requestPack.Password) || !VerdictAuthorization.CheckAuthorization(VerdictAuthorization.GetHashBytes(requestPack.Password))) { // 客户端身份验证失败。 return(this.NewtonsoftJson(SubmissionFetchResponseModel.Empty)); } SubmissionHandle submission = SubmissionManager.Default.GetPendingListFront(); if (submission == null) { return(this.NewtonsoftJson(SubmissionFetchResponseModel.Empty)); } else { SubmissionFetchResponseModel responsePack = SubmissionFetchResponseModel.FromSubmissionHandle(submission); // 更新数据库信息。 using (SubmissionDataProvider data = SubmissionDataProvider.Create(submission, false)) { data.VerdictStatus = SubmissionVerdictStatus.Submitted; data.VerdictTimeStamp = DateTime.Now; } return(this.NewtonsoftJson(responsePack)); } }
// GET: /Status/ShowSubmission?id={SubmissionID} public ActionResult ShowSubmission() { // 检查查询参数。 if (string.IsNullOrEmpty(Request.QueryString["id"])) { return(Redirect("~/Status")); } int submissionId; if (!int.TryParse(Request.QueryString["id"], out submissionId)) { return(Redirect("~/Status")); } SubmissionHandle submissionHandle = SubmissionManager.Default.QuerySubmissionById(submissionId); if (submissionHandle == null) { // 给定的用户提交不存在。 return(Redirect("~/Status")); } // 验证操作权限。 using (SubmissionDataProvider submissionData = SubmissionDataProvider.Create(submissionHandle, true)) { if (submissionData.ContestId != -1) { ContestHandle contestHandle = new ContestHandle(submissionData.ContestId); using (ContestDataProvider contestData = ContestDataProvider.Create(contestHandle, true)) { if (contestData.Status != ContestStatus.Ended && string.Compare(submissionData.Username, UserSession.GetUsername(Session)) != 0) { return(Redirect(Request.UrlReferrer.ToString())); } } } } SubmissionDetailModel model = SubmissionDetailModel.FromSubmissionHandle(submissionHandle); return(View(model)); }