diff --git a/proto/river.proto b/proto/river.proto index 5b6fe72..5a85acd 100644 --- a/proto/river.proto +++ b/proto/river.proto @@ -7,12 +7,17 @@ service River { rpc Ls(LsRequest) returns (LsResponse) {} } +message LsCase { + string in = 1; + string out = 2; +} + message LsRequest { - string dir = 1; + int32 pid = 1; } message LsResponse { - repeated string files = 1; + repeated LsCase cases = 1; } message Empty { diff --git a/runtime/data/1000/2.in b/runtime/data/1000/2.in new file mode 100644 index 0000000..6fa0970 --- /dev/null +++ b/runtime/data/1000/2.in @@ -0,0 +1 @@ +-1 -2 \ No newline at end of file diff --git a/runtime/data/1000/2.out b/runtime/data/1000/2.out new file mode 100644 index 0000000..7d105a7 --- /dev/null +++ b/runtime/data/1000/2.out @@ -0,0 +1 @@ +-3 \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index deda3ba..ebc2737 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,7 +9,7 @@ use river::judge_request::Data; use river::river_server::{River, RiverServer}; use river::{ Empty, JudgeRequest, JudgeResponse, JudgeResultEnum, LanguageConfigResponse, LanguageItem, - LsRequest, LsResponse, + LsRequest, LsResponse, LsCase }; use std::path::Path; use std::pin::Pin; @@ -132,9 +132,9 @@ impl River for RiverService { // TODO: 将获取文件的接口剥离出来,归入评测文件管理系统中 // TODO: 最终将会删除这个接口 // TODO: 目前有安全隐患,可以获取到任意目录文件 - let dir = request.into_inner().dir; - let mut response = LsResponse { files: vec![] }; - let directory_stream = match read_dir(Path::new("runtime/data").join(dir)).await { + let pid = request.into_inner().pid; + let mut response = LsResponse { cases: vec![] }; + let directory_stream = match read_dir(Path::new("runtime/data").join(pid.to_string())).await { Ok(val) => val, Err(_) => return Ok(Response::new(response)), }; @@ -144,7 +144,20 @@ impl River for RiverService { }) .collect() .await; - response.files = files; + let mut iter = 1; + loop { + let in_file = format!("{}.in", iter); + let out_file = format!("{}.out", iter); + if files.contains(&in_file) && files.contains((&out_file)) { + response.cases.push(LsCase{ + r#in: in_file, + out: out_file + }); + iter += 1; + } else { + break; + } + } Ok(Response::new(response)) } }