string getUsedTime(string s) { int pos=s.find("</td>"); pos++;pos=s.find("</td>",pos); pos++;pos=s.find("</td>",pos); pos++;pos=s.find("</td>",pos); int st=pos-1; while (s[st]=='\t') st--; pos=st; st++; while (s[pos]!='\t') pos--; pos++; string t=s.substr(pos,st-pos); if (t=="-") return "0"; double r; sscanf(t.c_str(),"%lf",&r); return covert((int)(r*1000+0.01)); }
void judge(string pid,string lang,string runid,string src) { /* minjie*/ db_client.insert("toj.Status", BSON("run_ID" << temp.runid << "result" << "Queuing" << "speed" << 50 << "submit_time" << temp.submit_time << "pid"<< temp.pid <<"lang"<<lang<<"username"<<temp.user<<"code_len"<< covert(src.length()))); db_client.insert("toj.Code", BSON("run_ID" << temp.runid << "code" << src)); if (src.length()<51) { toBottFile(runid,"0","0","Compile Error",""); return; } if (!login()) { writelog("Login error!\n"); toBottFile(runid,"0","0","Judge Error",""); //minjie //puts("Login error"); return; } writelog("Logined\n"); lang=corrlang[lang]; if (!submit(pid,lang,src)) { writelog("Submit error!\n"); toBottFile(runid,"0","0","Judge Error",""); return; } writelog("Submitted\n"); string result,ce_info,tu,mu; if (!getStatus(pid,lang,result,ce_info,tu,mu)) { writelog("Get Error!\n"); toBottFile(runid,"0","0","Judge Error",""); return; }; toBottFile(runid,tu,mu,result,ce_info); }
int main(int argc, char *argv[]) { int port_number; if (argc!=3) { printf("Illegal call!\nPlease follow the format below!\n%s <IP address> <port>\n",argv[0]); exit(1); } init(); curl_global_init(CURL_GLOBAL_ALL); if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { writelog("socket() error!\n"); exit(1); } bzero(&server,sizeof(server)); port_number=atoi(argv[2]); //port_number=5566; server.sin_family=AF_INET; server.sin_port=htons(port_number); server.sin_addr.s_addr=inet_addr(argv[1]); //server.sin_addr.s_addr=inet_addr("127.0.0.1"); if (connect(sockfd,(struct sockaddr*)&server,sizeof(server))==-1) { writelog("connect() error!\n"); exit(1); } writelog("Connected!\n"); send_register_info(); //return 0; /*getchar(); printf("After\n");*/ char templog[3000]={0}; FILE *target_file; while (1) { target_file=fopen("temp.bott","w"); usleep(5000); got_things=false; while ((num=recv(sockfd,buffer,MAX_DATA_SIZE,MSG_DONTWAIT))>0) { got_things=true; fputs(buffer,target_file); } fclose(target_file); if (num==0) reconnect(); //printf("%d\n",num); //writelog("test"); if (got_things) { writelog("Received a command.\n\n"); convert(); //void judge(string pid,string lang,string runid) judge(temp.vid,covert(temp.lang),covert(temp.runid),temp.src); sprintf(templog,"Sending result of runid:%d\n",temp.runid); writelog(templog); int source=open(tfilename,O_RDONLY); memset(buffer,0,sizeof(buffer)); while((num=read(source,buffer,sizeof(buffer)))>0) { write(sockfd,buffer,num); //printf("%s\n",buffer); } close(source); // write(sockfd,"__BOTT_FILE_OVER_LABLE__",24); writelog("Sent.\n\n"); } } return 0; }
myconvert(char* fromCode, char* toCode, char* fpath, char* tpath) { char convertAfterBuf[MAXLEN]; char convertBeforeBuf[MAXLEN]; memset(convertBeforeBuf, 0, MAXLEN); memset(convertAfterBuf, 0, MAXLEN); //打开要读的文件 FILE *fpRead = fopen(fpath, "a+"); if (NULL == fpRead) { printf("===> open file: %s is Failed!\n", fpath); return -1; } while(1) { memset(convertBeforeBuf, 0, MAXLEN); memset(convertAfterBuf, 0, MAXLEN); //设置读文件句柄偏移量,紧接上次读的位置 int iRet = fseek(fpRead, 0, SEEK_CUR); if (0 != iRet) { printf("===> fseek is Failed!\n"); return -1; } //读文件 iRet = ReadFile(fpRead, (MAXLEN-1), convertBeforeBuf); if (0 != iRet) { printf("===> ReadFile is Failed!\n"); return -1; } printf("===> len: %d\n", strlen(convertBeforeBuf)); printf("===> convertBeforeBuf: \n%s\n\n", convertBeforeBuf); //编码格式转换 iRet = covert(toCode, fromCode, convertBeforeBuf, strlen(convertBeforeBuf), convertAfterBuf, MAXLEN); if (0 != iRet) { printf("===> convert is Failed!\n"); return -1; } //写文件 iRet = WriteFile(tpath, "a+", strlen(convertAfterBuf), convertAfterBuf); if (0 != iRet) { printf("===> WriteFile is Failed!\n"); return -1; } printf("===> convertAfterBuf: \n%s\n\n", convertAfterBuf); //判断是否已到文件尾 if ((MAXLEN-1) > strlen(convertBeforeBuf)) { printf("===> Congratulations!Read File Over!\n"); break; } } fclose(fpRead); return 0; }