Esempio n. 1
0
        private static async Task MainAsync(VirtualJudgeMetadata metadata, VirtualJudgeAccount account)
        {
            var token = await GetOnlineJudgeLoginToken(account);

            await GetCredantial(token);

            var csrf = await GetCsrfToken(metadata.ProblemId);

            var statusId = await SendToJudge(metadata, csrf);

            if (statusId.Item1 == -1)
            {
                WriteResultFile(new VirtualJudgeResult
                {
                    Hint   = statusId.Item2,
                    Result = "CompileError"
                });
            }
            else
            {
                var result = await PollResult(statusId.Item1);

                WriteResultFile(result);
            }
        }
Esempio n. 2
0
        private static async Task <(int, string)> SendToJudge(VirtualJudgeMetadata metadata, string csrf)
        {
            var problemPageUri = ProblemEndpoint.Replace("{PROBLEMID}", metadata.ProblemId);
            var content        = new FormUrlEncodedContent(new Dictionary <string, string>
            {
                { "id", metadata.ProblemId },
                { "code", metadata.Code },
                { "format", ParseLanguage(metadata.Language) },
                { "csrfmiddlewaretoken", csrf }
            });
            var req = new HttpRequestMessage(HttpMethod.Post, JudgeEndpoint)
            {
                Content = content,
            };

            // the following headers are just for redundant in case of future changes
            // it's not necessary, for now
            req.Headers.TryAddWithoutValidation("Referer", BaseUrl + problemPageUri + "/");
            req.Headers.TryAddWithoutValidation("X-Requested-With", "XMLHttpRequest");
            req.Headers.TryAddWithoutValidation("Host", "codevs.cn");
            req.Headers.TryAddWithoutValidation("Origin", BaseUrl);

send:
            try
            {
                using (var response = await _client.SendAsync(req))
                {
                    var text = await response.Content.ReadAsStringAsync();

                    var json = JsonConvert.DeserializeObject <dynamic>(text);
                    if (json.success == false)
                    {
                        return(-1, json.message);
                    }
                    else
                    {
                        return(json.id, null);
                    }
                }
            }
            catch (Exception ex)
            {
                await Task.Delay(1000);

                goto send;
            }
        }