diff options
Diffstat (limited to 'toj/center/src/judge_server.h')
-rwxr-xr-x[-rw-r--r--] | toj/center/src/judge_server.h | 62 |
1 files changed, 21 insertions, 41 deletions
diff --git a/toj/center/src/judge_server.h b/toj/center/src/judge_server.h index d904d9d..fadde93 100644..100755 --- a/toj/center/src/judge_server.h +++ b/toj/center/src/judge_server.h @@ -25,14 +25,8 @@ private: netio_iofn<server_conn> *done_sendjmod_fn; netio_iofn<server_conn> *recv_sendcode_fn; netio_iofn<server_conn> *done_sendcode_fn; - tpool_fn<server_conn> *tp_unpackpro_thfn; - tpool_fn<server_conn> *tp_unpackpro_cbfn; tpool_fn<server_conn> *tp_unpackjmod_thfn; tpool_fn<server_conn> *tp_unpackjmod_cbfn; - tpool_fn<server_conn> *tp_unpackcode_thfn; - tpool_fn<server_conn> *tp_unpackcode_cbfn; - tpool_fn<server_conn> *tp_judge_thfn; - tpool_fn<server_conn> *tp_judge_cbfn; char* create_combuf(int code,int size,int &len,void **data); void recv_dispatch(void *buf,size_t len,void *data); @@ -46,62 +40,48 @@ private: void done_sendjmod(void *buf,size_t len,void *data); void recv_sendcode(void *buf,size_t len,void *data); void done_sendcode(void *buf,size_t len,void *data); - void tp_unpackpro_th(void *data); - void tp_unpackpro_cb(void *data); void tp_unpackjmod_th(void *data); void tp_unpackjmod_cb(void *data); - void tp_unpackcode_th(void *data); - void tp_unpackcode_cb(void *data); - void tp_judge_th(void *data); - void tp_judge_cb(void *data); public: server_conn(int fd); int send_setid(); int send_setinfo(); int send_result(int subid,char *res_data,size_t res_len); - int send_setpro(int *proid,int *cacheid,int type,int count); + int send_reqpro(int proid,int cacheid); + int send_setpro(std::vector<std::pair<int,int> > &pro_list,int type); int send_setjmod(char **jmod_name,int *cacheid,int type,int count); + int send_reqcode(int subid); virtual int readidle(); }; -class server_judgeth_info{ -public: - bool use_flag; - int thid; - char run_path[PATH_MAX + 1]; - center_com_submit *sub; - char res_data[JUDGE_RES_DATAMAX]; - size_t res_len; - - server_judgeth_info(int thid){ - this->use_flag = false; - this->thid = thid; - snprintf(this->run_path,sizeof(this->run_path),"tmp/run/%d",thid); - mkdir(this->run_path,0775); - this->sub = NULL; - this->res_len = 0; - } -}; - -static int server_queuejudge(center_com_submit *sub,tpool_protofn *th_fn,tpool_protofn *cb_fn); -static int server_judge(int subid,char *pro_path,char *code_path,char *run_path,int lang,char *set_data,char *res_data,size_t &res_len); -static int server_cleardir_callback(const char *path,const struct stat *st,int flag,struct FTW *ftw_buf); -static int server_cleardir(char *path); static int server_addepev(int fd,unsigned int flag,int type,void *data); static int server_delepev(server_epevdata *epevdata); static server_conn* server_connect(); static int server_id; static int server_avail; -static std::multimap<int,center_com_submit*> server_submap; static int server_epfd; static server_conn *server_mainconn; static server_conn *server_fileconn; static server_conn *server_codeconn; static tpool *server_packtp; -static server_judgeth_info *server_judgepool[8]; -static tpool *server_judgetp; -extern int pack_pack(char *pack_path,char *dir_path); -extern int pack_unpack(char *pack_path,char *dir_path); +int judge_server_addtpool(tpool *tpinfo); +int judge_server_setpro(std::vector<std::pair<int,int> > &pro_list); +int judge_server_reqcode(int subid); +int judge_server_result(int subid,char *res_data,int res_len); + +extern int tool_pack(char *pack_path,char *dir_path); +extern int tool_unpack(char *pack_path,char *dir_path); +extern int tool_cleardir(char *path); + +extern int judge_manage_init(); +extern judge_pro_info* judge_manage_getprobyid(int proid); +extern int judge_manage_getpro(judge_pro_info *pro_info); +extern int judge_manage_putpro(judge_pro_info *pro_info); +extern int judge_manage_updatepro(int proid,int cacheid,bool check_flag,judge_pro_info **update_pro_info); +extern int judge_manage_done_updatepro(judge_pro_info *pro_info); +extern int judge_manage_submit(int subid,int proid,int lang,char *set_data); +extern int judge_manage_done_code(int subid); + |