예제 #1
0
        public async Task <QuizQuestion> NextQuestionInList()
        {
            RaiseIfNotLoggedIn();
            RaiseIfTimeOut();
            var previousQuestionList = sessionUtils.GetString(HttpContext, QuizPreviousQuestionList);
            var list = previousQuestionList == null
                ? new List <string>()
                : JsonConvert.DeserializeObject <List <string> >(previousQuestionList);
            var question = await quizService.GetRandomQuestionBaseOnPreviousQuestionList(list);

            list.Add(question.Id);
            sessionUtils.SetString(HttpContext, QuizPreviousQuestionList, JsonConvert.SerializeObject(list));
            sessionUtils.SetString(HttpContext, CurrQuestionId, question.Id);
            return(question);
        }
예제 #2
0
        public async Task <OjResult> SubmitCode([FromBody] OjSubmission submission)
        {
            async Task <OjResult> execute(UserInfo userInfo)
            {
                const string ojStatus = "oj_status";
                const string pending  = "pending";
                const string over     = "over";
                var          status   = sessionUtils.GetString(HttpContext, ojStatus);

                switch (status)
                {
                case "pending":
                    return(new OjResult {
                        Pending = true, Pass = false, Failed = false
                    });

                case null:
                case "over":
                    //"over" or null means this submit should be a new request
                    var t = ojService.PendResult(userInfo.Id, submission.OjQuestionId, submission.Code);
                    sessionUtils.SetString(HttpContext, ojStatus, pending);
                    var res = await t;
                    if (res.Pass)
                    {
                        await ojService.SaveSuccess(userInfo.Id, submission.OjQuestionId);
                    }
                    sessionUtils.SetString(HttpContext, ojStatus, over);
                    return(res);

                default:
                    throw new NonUserException("How could this happen ???");
                }
            }

            var userInfo = sessionUtils.GetCachedUserInfo(HttpContext);

            if (userInfo == null)
            {
                throw new UserException("用户未登录!");
            }

            var ojResult = await execute(userInfo);

            if (ojResult.Pending)
            {
                return(ojResult);
            }

            if (ojResult.Pass)
            {
                await ojService.AddSubmitRecord(userInfo.Id, submission.OjQuestionId, submission.Code, "Pass All Test Cases");
            }
            else if (ojResult.Failed)
            {
                await ojService.AddSubmitRecord(userInfo.Id, submission.OjQuestionId, submission.Code, "Compilation Failed");
            }
            else if (!ojResult.Failed)
            {
                await ojService.AddSubmitRecord(userInfo.Id, submission.OjQuestionId, submission.Code, "Can't Pass All Test Cases");
            }

            return(ojResult);
        }