Example #1
0
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;
}
Example #2
0
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;
}