void * test_init(rain_ctx_t *ctx,char *args) { test_t * tt = malloc(sizeof(test_t)); tt->ctx = ctx; tt->recvsize = 0; tt->cli = 0; char arg[1024]; rain_debug(tt->ctx,"TestRunning,arguments:%s",args); fflush(stdout); int ret = 0; sprintf(arg,"ip=%s&port=%d&watchdog=%d&mode=%s","127.0.0.1",8100,rain_routineid(ctx),"epoll"); ret = rain_spawn(ctx,"tcpsvr",arg,&(tt->tcpsvr_id)); if(ret == RAIN_ERROR){ free(tt); return NULL; } rain_link(ctx,tt->tcpsvr_id); ret = rain_spawn(ctx,"jsv8","test.js",&(tt->jsv8_test_id)); if(ret == RAIN_ERROR){ free(tt); return NULL; } rain_link(ctx,tt->jsv8_test_id); RAIN_CALLBACK(ctx,_recv,_recv_rsp,_link_exit,_time_out,NULL); rain_timeout(ctx,60.0,NULL); return tt; }
void * tcpsvr_new(struct rain_ctx*ctx,char *args) { tcpsvr_t * svr = malloc(sizeof(tcpsvr_t)); svr->fd = -1; svr->ctx = NULL; svr->args = NULL; int i=0; for(; i<TCPSVR_MAX_CONNECT; i++) { svr->clients[i].binuse = false; } svr->ctx = ctx; char host[64]; int port; rain_routine_t rids; char *tmp = strdup(args); char * token; int flag = WV_POLL_SELECT; char modbuf[32]; // parser for(token = strsep(&tmp,"&"); token!=NULL; token=strsep(&tmp,"&")) { char * parm,*parm2; parm = strsep(&token,"="); parm2 =parm+strlen(parm)+1; if(strcmp(parm,"ip") == 0) { if(parm2) { strncpy(host,parm2,64); } } else if(strcmp(parm,"port") == 0) { port = strtol(parm2,NULL,10); } else if(strcmp(parm,"watchdog") == 0) { rids = strtol(parm2,NULL,10); } else if(strcmp(parm,"mode") == 0) { if(strcmp(parm2,"select") == 0) { flag = WV_POLL_SELECT; } else if(strcmp(parm2,"epoll") == 0) { flag = WV_POLL_EPOLL; } else if(strcmp(parm2,"poll") == 0) { flag = WV_POLL_POLL; } strncpy(modbuf,parm2,sizeof(modbuf)); } } free(tmp); svr->watchdog = rids; if( wod_event_create(&svr->loop,10240,flag) != 0) { free(svr); return NULL; } int ret = tcpsvr_listen(svr,host,port); if(ret == RAIN_ERROR) { wod_event_destroy(svr->loop); free(svr); return NULL; } RAIN_CALLBACK(ctx,_recv,_recv_rps,_link_exit,NULL,_next_tick); svr->pre_loop_time = wod_time_usecond(); rain_next_tick(ctx,_svr_next_tick); rain_link(ctx,svr->watchdog); //rain_debug(svr->ctx,"<TCP-SERVER>: At(%s:%d),watcher:%d,mode:%s",host,port,rids,modbuf); return svr; }