Update proto

This commit is contained in:
MeiK 2021-02-05 19:48:23 +08:00
parent ea413f0bf3
commit a379b61bc7
4 changed files with 27 additions and 7 deletions

View File

@ -7,12 +7,17 @@ service River {
rpc Ls(LsRequest) returns (LsResponse) {} rpc Ls(LsRequest) returns (LsResponse) {}
} }
message LsCase {
string in = 1;
string out = 2;
}
message LsRequest { message LsRequest {
string dir = 1; int32 pid = 1;
} }
message LsResponse { message LsResponse {
repeated string files = 1; repeated LsCase cases = 1;
} }
message Empty { message Empty {

1
runtime/data/1000/2.in Normal file
View File

@ -0,0 +1 @@
-1 -2

1
runtime/data/1000/2.out Normal file
View File

@ -0,0 +1 @@
-3

View File

@ -9,7 +9,7 @@ use river::judge_request::Data;
use river::river_server::{River, RiverServer}; use river::river_server::{River, RiverServer};
use river::{ use river::{
Empty, JudgeRequest, JudgeResponse, JudgeResultEnum, LanguageConfigResponse, LanguageItem, Empty, JudgeRequest, JudgeResponse, JudgeResultEnum, LanguageConfigResponse, LanguageItem,
LsRequest, LsResponse, LsRequest, LsResponse, LsCase
}; };
use std::path::Path; use std::path::Path;
use std::pin::Pin; use std::pin::Pin;
@ -132,9 +132,9 @@ impl River for RiverService {
// TODO: 将获取文件的接口剥离出来,归入评测文件管理系统中 // TODO: 将获取文件的接口剥离出来,归入评测文件管理系统中
// TODO: 最终将会删除这个接口 // TODO: 最终将会删除这个接口
// TODO: 目前有安全隐患,可以获取到任意目录文件 // TODO: 目前有安全隐患,可以获取到任意目录文件
let dir = request.into_inner().dir; let pid = request.into_inner().pid;
let mut response = LsResponse { files: vec![] }; let mut response = LsResponse { cases: vec![] };
let directory_stream = match read_dir(Path::new("runtime/data").join(dir)).await { let directory_stream = match read_dir(Path::new("runtime/data").join(pid.to_string())).await {
Ok(val) => val, Ok(val) => val,
Err(_) => return Ok(Response::new(response)), Err(_) => return Ok(Response::new(response)),
}; };
@ -144,7 +144,20 @@ impl River for RiverService {
}) })
.collect() .collect()
.await; .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)) Ok(Response::new(response))
} }
} }