예제 #1
0
        public async Task <IActionResult> OnPostAsync([FromForm] string source)
        {
            Task = await db.Tasks.FindAsync(TaskId);

            if (Task == null)
            {
                return(NotFound());
            }

            var authorId = (uint)HttpContext.Session.GetInt32("username");

            var filename = $"{Task.Id}_{authorId}_{Language.ToString()}";
            var path     = Path.Combine(env.ContentRootPath, "storage", "sources", filename);
            var i        = 1;

            while (System.IO.File.Exists($"{path}_{i}{LanguageExtension}"))
            {
                i++;
            }
            filename += $"_{i}{LanguageExtension}";
            path     += $"_{i}{LanguageExtension}";

            var submission = new Models.Submission
            {
                Task     = Task,
                AuthorId = authorId,
                Sequence = (uint)i,
                Working  = true,
                Error    = "",
                Language = Language,
                Filename = filename,
            };

            using (var fs = new FileStream(path, FileMode.CreateNew, FileAccess.Write))
                using (var sw = new StreamWriter(fs, new UTF8Encoding(false)))
                {
                    await sw.WriteAsync(source);
                }
            submission.Size = (uint)new FileInfo(path).Length;

            db.Submissions.Add(submission);
            await db.SaveChangesAsync();

            queue.QueueBackgroundWorkItem(submission);
            return(RedirectToPage("/Submissions/Index", new
            {
                taskId = TaskId,
            }));
        }
예제 #2
0
        public async Task <ActionResult> OnPostAsync(uint submissionId)
        {
            var submission = await db.Submissions.FindAsync(submissionId);

            if (submission == null)
            {
                return(NotFound());
            }

            submission.Status  = Models.Submission.StatusCode.SuccessOrInitialization;
            submission.Score   = 0;
            submission.Working = true;
            await db.SaveChangesAsync();

            queue.QueueBackgroundWorkItem(submission);
            return(RedirectToPage("/Submissions/Read", new
            {
                submissionId,
            }));
        }