diff --git a/remote_judger/src/providers/loj.ts b/remote_judger/src/providers/loj.ts index bf26884..c93a1ff 100644 --- a/remote_judger/src/providers/loj.ts +++ b/remote_judger/src/providers/loj.ts @@ -1,8 +1,10 @@ import superagent from 'superagent'; import proxy from 'superagent-proxy'; +import { stripVTControlCharacters } from 'util'; import sleep from '../utils/sleep'; import { IBasicProvider, RemoteAccount, USER_AGENT } from '../interface'; import Logger from '../utils/logger'; +import { normalize, VERDICT } from '../verdict'; proxy(superagent); const logger = new Logger('remote/loj'); @@ -261,38 +263,43 @@ export default class LibreojProvider implements IBasicProvider { }); } - await sleep(2000); + await sleep(1000); const { body, error } = await this.post('/submission/getSubmissionDetail') .send({ submissionId: String(id), locale: 'zh_CN' }) .retry(3); if (error) continue; - if (body.progress.progressType !== 'Finished') { - await next({ - status: `${body.progress.progressType}`, - }); + await next({ + status: `${body.progress.progressType}`, + }); + if (body.progress.progressType !== 'Finished') { continue; } - if (body.meta.status === 'CompilationError') { + const status = + VERDICT[ + Object.keys(VERDICT).find(k => + normalize(body.meta.status).includes(k) + ) + ]; + + if (status === 'Compile Error') { await end({ error: true, id, status: 'Compile Error', + message: stripVTControlCharacters(body.progress.compile.message), }); } - if ( - ['SystemError', 'JudgementFailed', 'ConfigurationError'].includes( - body.meta.status - ) - ) { + if (status === 'Judgment Failed') { await end({ error: true, id, status: 'Judgment Failed', + message: 'Error occurred on remote online judge.', }); } diff --git a/remote_judger/src/verdict.ts b/remote_judger/src/verdict.ts index 90527fc..9f30271 100644 --- a/remote_judger/src/verdict.ts +++ b/remote_judger/src/verdict.ts @@ -20,6 +20,20 @@ export const VERDICT = new Proxy>( // Codeforces 'HAPPY_NEW_YEAR!': 'Accepted', + + // LibreOJ + COMPILATIONERROR: 'Compile Error', + COMPILEERROR: 'Compile Error', + FILEERROR: 'File Error', + RUNTIMEERROR: 'Runtime Error', + TIMELIMITEXCEEDED: 'Time Limit Exceeded', + MEMORYLIMITEXCEEDED: 'Memory Limit Exceeded', + OUTPUTLIMITEXCEEDED: 'Output Limit Exceeded', + WRONGANSWER: 'Wrong Answer', + PARTIALLYCORRECT: 'Partially Correct', + JUDGEMENTFAILED: 'Judgment Failed', + SYSTEMERROR: 'Judgment Failed', + CONFIGURATIONERROR: 'Judgment Failed', }, { get(self, key) {