From 6d591aef37a42962ba0a91ec3850511b985b073b Mon Sep 17 00:00:00 2001 From: undefined Date: Mon, 24 Apr 2023 00:20:28 +0800 Subject: [PATCH] judge: add getFile() --- packages/hydrojudge/src/judge/default.ts | 4 +--- packages/hydrojudge/src/sandbox.ts | 4 ++++ packages/hydrojudge/src/sandbox/client.ts | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/hydrojudge/src/judge/default.ts b/packages/hydrojudge/src/judge/default.ts index 35b9698e..228db3d4 100644 --- a/packages/hydrojudge/src/judge/default.ts +++ b/packages/hydrojudge/src/judge/default.ts @@ -53,9 +53,7 @@ function judgeCase(c: NormalizedCase) { if (code < 32) message = signals[code]; else message = { message: 'Your program returned {0}.', params: [code] }; } - await Promise.all( - Object.values(res.fileIds).map((id) => del(id)), - ).catch(() => { /* Ignore file doesn't exist */ }); + await Promise.allSettled(Object.values(res.fileIds).map((id) => del(id))); if (runner && ctx.rerun && c.time <= 5000 && status === STATUS.STATUS_TIME_LIMIT_EXCEEDED) { ctx.rerun--; return await runner(ctx, ctxSubtask); diff --git a/packages/hydrojudge/src/sandbox.ts b/packages/hydrojudge/src/sandbox.ts index d59c4c3c..afe3b20c 100644 --- a/packages/hydrojudge/src/sandbox.ts +++ b/packages/hydrojudge/src/sandbox.ts @@ -179,6 +179,10 @@ export async function del(fileId: string) { await client.deleteFile(fileId); } +export async function get(fileId: string) { + return await client.getFile(fileId); +} + export async function run(execute: string, params?: Parameter): Promise { let result: SandboxResult; try { diff --git a/packages/hydrojudge/src/sandbox/client.ts b/packages/hydrojudge/src/sandbox/client.ts index a3461804..d7f7b5f0 100644 --- a/packages/hydrojudge/src/sandbox/client.ts +++ b/packages/hydrojudge/src/sandbox/client.ts @@ -9,7 +9,7 @@ const client = new Proxy({ return superagent.post(`${url}/run`).send(req).then((res) => res.body); }, getFile(fileId: string): Promise { - return superagent.get(`${url}/file/${fileId}`).then((res) => res.body); + return superagent.get(`${url}/file/${fileId}`).responseType('arraybuffer').then((res) => res.body); }, deleteFile(fileId: string): Promise { return superagent.delete(`${url}/file/${fileId}`).then((res) => res.body);