From aa9d6d55868ff9721793f8ffc1dbd8d7c0486b9a Mon Sep 17 00:00:00 2001 From: cfngc4594 Date: Mon, 31 Mar 2025 22:07:02 +0800 Subject: [PATCH] feat(judge): add stdin support with test cases and default timeLimit --- src/app/actions/judge.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/app/actions/judge.ts b/src/app/actions/judge.ts index 9d87b42..ea0a6cc 100644 --- a/src/app/actions/judge.ts +++ b/src/app/actions/judge.ts @@ -64,7 +64,7 @@ function createTarStream(file: string, value: string) { export async function judge( language: EditorLanguage, - value: string + value: string, ): Promise { const session = await auth(); if (!session) redirect("/sign-in"); @@ -230,13 +230,14 @@ async function compile( async function run( container: Docker.Container, fileName: string, - timeLimit?: number, - maxOutput: number = 1 * 1024 * 1024 + timeLimit: number = 1000, + maxOutput: number = 1 * 1024 * 1024, ): Promise { const runExec = await container.exec({ Cmd: [`./${fileName}`], AttachStdout: true, AttachStderr: true, + AttachStdin: true, }); return new Promise((resolve, reject) => { @@ -277,11 +278,14 @@ async function run( }); // Start the exec stream - runExec.start({}, (error, stream) => { + runExec.start({ hijack: true }, (error, stream) => { if (error || !stream) { return reject({ output: "System Error", exitCode: ExitCode.SE }); } + stream.write("[2,7,11,15]\n9\n[3,2,4]\n6\n[3,3]\n6"); + stream.end(); + docker.modem.demuxStream(stream, stdoutStream, stderrStream); // Timeout mechanism