1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
#define SERVER_JUDGE_PORT 2573
#define SERVER_EPOLL_MAXEVENT 4096
#define SERVER_EPEV_JUDGECLIENT 0
#define SERVER_EPEV_TPOOL 1
class server_epevdata{
public:
int fd;
int type;
void *data;
server_epevdata(int fd,int type,void *data);
};
class server_conn : public netio{
private:
netio_iofn<server_conn> *recv_dispatch_fn;
netio_iofn<server_conn> *recv_setid_fn;
netio_iofn<server_conn> *recv_submit_fn;
netio_iofn<server_conn> *recv_setpro_fn;
netio_iofn<server_conn> *recv_sendpro_fn;
netio_iofn<server_conn> *done_sendpro_fn;
netio_iofn<server_conn> *recv_setjmod_fn;
netio_iofn<server_conn> *recv_sendjmod_fn;
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_unpackjmod_thfn;
tpool_fn<server_conn> *tp_unpackjmod_cbfn;
char* create_combuf(int code,int size,int &len,void **data);
void recv_dispatch(void *buf,size_t len,void *data);
void recv_setid(void *buf,size_t len,void *data);
void recv_submit(void *buf,size_t len,void *data);
void recv_setpro(void *buf,size_t len,void *data);
void recv_sendpro(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_sendjmod(void *buf,size_t len,void *data);
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_unpackjmod_th(void *data);
void tp_unpackjmod_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_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();
};
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 int server_epfd;
static server_conn *server_mainconn;
static server_conn *server_fileconn;
static server_conn *server_codeconn;
static tpool *server_packtp;
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);
|