mirror of
https://github.com/MeiK2333/river.git
synced 2025-11-04 14:49:40 +08:00
Update
This commit is contained in:
parent
5371ff4ed5
commit
211050a434
@ -13,6 +13,7 @@ pub enum Error {
|
|||||||
IOError(io::Error),
|
IOError(io::Error),
|
||||||
StringToCStringError(NulError),
|
StringToCStringError(NulError),
|
||||||
ParseIntError(std::num::ParseIntError),
|
ParseIntError(std::num::ParseIntError),
|
||||||
|
CreateTempDirError(io::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type Result<T> = result::Result<T, Error>;
|
pub type Result<T> = result::Result<T, Error>;
|
||||||
|
|||||||
38
src/main.rs
38
src/main.rs
@ -3,10 +3,13 @@
|
|||||||
extern crate log;
|
extern crate log;
|
||||||
|
|
||||||
use env_logger::Env;
|
use env_logger::Env;
|
||||||
|
use futures::StreamExt;
|
||||||
use futures_core::Stream;
|
use futures_core::Stream;
|
||||||
|
use river::judge_request::Data;
|
||||||
use river::river_server::{River, RiverServer};
|
use river::river_server::{River, RiverServer};
|
||||||
use river::{JudgeRequest, JudgeResponse};
|
use river::{JudgeRequest, JudgeResponse};
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
|
use tempfile::tempdir_in;
|
||||||
use tonic::transport::Server;
|
use tonic::transport::Server;
|
||||||
use tonic::{Request, Response, Status};
|
use tonic::{Request, Response, Status};
|
||||||
|
|
||||||
@ -34,9 +37,42 @@ impl River for RiverService {
|
|||||||
&self,
|
&self,
|
||||||
request: Request<tonic::Streaming<JudgeRequest>>,
|
request: Request<tonic::Streaming<JudgeRequest>>,
|
||||||
) -> Result<Response<Self::JudgeStream>, Status> {
|
) -> Result<Response<Self::JudgeStream>, Status> {
|
||||||
let mut _stream = request.into_inner();
|
let mut stream = request.into_inner();
|
||||||
|
|
||||||
|
// 此处编译很慢
|
||||||
|
// 为啥,是 try_stream! 这个宏导致的吗?
|
||||||
let output = async_stream::try_stream! {
|
let output = async_stream::try_stream! {
|
||||||
|
while let Some(req) = stream.next().await {
|
||||||
|
let req = req?;
|
||||||
|
// TODO
|
||||||
|
let pwd = tempdir_in("/tmp").unwrap();
|
||||||
|
match &req.data {
|
||||||
|
Some(Data::CompileData(data)) => {
|
||||||
|
debug!("compile request");
|
||||||
|
let language = &data.language;
|
||||||
|
let code = &data.code;
|
||||||
|
debug!("language: {}", language);
|
||||||
|
debug!("code: {}", code);
|
||||||
|
break;
|
||||||
|
},
|
||||||
|
Some(Data::JudgeData(data)) => {
|
||||||
|
debug!("judge request");
|
||||||
|
let in_file = &data.in_file;
|
||||||
|
let out_file = &data.out_file;
|
||||||
|
let time_limit = &data.time_limit;
|
||||||
|
let memory_limit = &data.memory_limit;
|
||||||
|
let judge_type = &data.judge_type;
|
||||||
|
debug!("in_file: {}", in_file);
|
||||||
|
debug!("out_file: {}", out_file);
|
||||||
|
debug!("time_limit: {}", time_limit);
|
||||||
|
debug!("memory_limit: {}", memory_limit);
|
||||||
|
debug!("judge_type: {}", judge_type);
|
||||||
|
break;
|
||||||
|
},
|
||||||
|
None => break,
|
||||||
|
_ => break,
|
||||||
|
};
|
||||||
|
}
|
||||||
yield JudgeResponse {
|
yield JudgeResponse {
|
||||||
state: Some(river::judge_response::State::Status(river::JudgeStatus::Pending as i32))
|
state: Some(river::judge_response::State::Status(river::JudgeStatus::Pending as i32))
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user