diff options
Diffstat (limited to 'toj/center/src/center_judge.h')
-rwxr-xr-x[-rw-r--r--] | toj/center/src/center_judge.h | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/toj/center/src/center_judge.h b/toj/center/src/center_judge.h index 74b2daf..99a3cf9 100644..100755 --- a/toj/center/src/center_judge.h +++ b/toj/center/src/center_judge.h @@ -12,7 +12,7 @@ public: judge_conn *conn_main; std::list<judge_conn*> conn_list; std::list<judge_info*>::iterator judge_it; - std::map<int,center_pro_info*> pro_map; + std::map<int,int> pro_map; std::map<std::string,center_jmod_info*> jmod_map; judge_info(); @@ -21,6 +21,7 @@ public: int setinfo(int avail); int submit(judge_submit_info *submit_info); int result(int subid,char *res_data); + int updatepro(std::vector<std::pair<int,int> > &pro_list); }; class judge_conn : public netio{ @@ -31,6 +32,7 @@ private: netio_iofn<judge_conn> *recv_result_fn; netio_iofn<judge_conn> *recv_setpro_fn; netio_iofn<judge_conn> *recv_reqpro_fn; + netio_iofn<judge_conn> *done_sendpro_fn; netio_iofn<judge_conn> *recv_setjmod_fn; netio_iofn<judge_conn> *recv_reqjmod_fn; netio_iofn<judge_conn> *recv_reqcode_fn; @@ -42,6 +44,7 @@ private: void recv_result(void *buf,size_t len,void *data); void recv_setpro(void *buf,size_t len,void *data); void recv_reqpro(void *buf,size_t len,void *data); + void done_sendpro(void *buf,size_t len,void *data); void recv_setjmod(void *buf,size_t len,void *data); void recv_reqjmod(void *buf,size_t len,void *data); void recv_reqcode(void *buf,size_t len,void *data); @@ -54,7 +57,7 @@ public: ~judge_conn(); int send_setid(int judgeid); int send_submit(judge_submit_info* submit_info); - int send_setpro(int *proid,int *cacheid,int type,int count); + 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); virtual int readidle(); }; @@ -64,23 +67,23 @@ public: int subid; int proid; int lang; - char set_data[JUDGE_SET_DATAMAX]; + char *set_data; size_t set_len; judge_submit_info(int subid,int proid,int lang,char *setdata,size_t setlen){ this->subid = subid; this->proid = proid; this->lang = lang; - if(setlen > JUDGE_SET_DATAMAX){ - memcpy(this->set_data,setdata,JUDGE_SET_DATAMAX); - }else{ - memcpy(this->set_data,setdata,setlen); - } + this->set_data = new char[setlen]; + memcpy(this->set_data,setdata,setlen); this->set_len = setlen; } + ~judge_submit_info(){ + delete this->set_data; + } }; -static int judge_submit_waitqueue(); +static int judge_run_waitqueue(); static std::map<int,judge_info*> judge_idmap; static std::list<judge_info*> judge_runlist; @@ -90,17 +93,12 @@ int center_judge_init(); void* center_judge_addconn(int fd); int center_judge_dispatch(int evflag,void *data); int center_judge_submit(int subid,int proid,int lang,char *setdata,size_t setlen); +int center_judge_updatepro(std::vector<std::pair<int,int> > &pro_list); extern int center_manage_result(int subid,char *res_data); +extern center_pro_info* center_manage_getprobyid(int proid); +extern int center_manage_getpro(center_pro_info *pro_info); +extern int center_manage_putpro(center_pro_info *pro_info); extern std::map<std::string,center_jmod_info*> center_manage_jmodmap; extern std::map<int,center_pro_info*> center_manage_promap; - - - -/*#define JUDGE_DB_MAXSCOREMAX 1024 -static int tmp_init(); -static int tmp_update(int submitid,int count,void *data); -static int server_updatedb(PGconn *sqlc,int submitid,int result_count,struct judgx_line_result *result); - -static PGconn *tmp_sqlc;*/ |