Example #1
0
        /// <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>
        /// 从给定的提交句柄创建 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>
        /// 从给定的用户提交句柄创建 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);
        }
Example #5
0
        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));
        }
Example #6
0
        // 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));
            }
        }
Example #7
0
        /// <summary>
        /// 从给定的提交句柄对象创建 SubmissionDataProvider 类的新实例。
        /// </summary>
        /// <param name="handle">提交句柄对象。</param>
        /// <param name="isReadonly">一个值,该值指示创建的对象是否为只读。</param>
        /// <returns>创建的 SubmissionDataProvider 类对象。</returns>
        /// <exception cref="ArgumentNullException"/>
        /// <exception cref="SubmissionNotExistException"/>
        public static SubmissionDataProvider Create(SubmissionHandle handle, bool isReadonly)
        {
            if (handle == null)
            {
                throw new ArgumentNullException(nameof(handle));
            }

            SubmissionDataContext context = new SubmissionDataContextFactory().CreateContext();
            SubmissionEntity      entity  = context.QuerySubmissionEntityById(handle.SubmissionId);

            if (entity == null)
            {
                context.Dispose();
                throw new SubmissionNotExistException(handle);
            }

            return(new SubmissionDataProvider(context, entity, isReadonly));
        }
Example #8
0
        // 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));
        }
Example #9
0
        public ActionResult QueryStatus()
        {
            // 检查参数。
            if (string.IsNullOrEmpty(Request.QueryString["id"]))
            {
                return(new ContentResult());
            }

            int submissionId;

            if (!int.TryParse(Request.QueryString["id"], out submissionId))
            {
                return(new ContentResult());
            }

            SubmissionHandle handle = new SubmissionHandle(submissionId);

            return(this.NewtonsoftJson(SubmissionVerdictRequestModel.FromSubmissionHandle(handle)));
        }
Example #10
0
 /// <summary>
 /// 使用给定的用户提交句柄和异常消息创建 SubmissionNotExistException 类的新实例。
 /// </summary>
 /// <param name="handle">用户提交句柄。</param>
 /// <param name="message">异常消息。</param>
 public SubmissionNotExistException(SubmissionHandle handle, string message) : base(handle, message)
 {
 }
Example #11
0
 /// <summary>
 /// 使用给定的用户提交句柄创建 SubmissionNotExistException 类的新实例。
 /// </summary>
 /// <param name="handle">用户提交句柄。</param>
 public SubmissionNotExistException(SubmissionHandle handle) : base(handle, "用户提交未找到。")
 {
 }