Esempio n. 1
0
battleservice_t new_battleservice()
{
	lua_State *L = luaL_newstate();
	luaL_openlibs(L);
	if (luaL_dofile(L,"battlemgr.lua")) {
		const char * error = lua_tostring(L, -1);
		lua_pop(L,1);
		printf("%s\n",error);
		exit(0);
	}
	register_battle_cfunction(L);
	battleservice_t bservice = calloc(1,sizeof(*bservice));
	if(0 != CALL_LUA_FUNC(L,"CreateBattleMgr",1))
	{
		const char * error = lua_tostring(L, -1);
		lua_pop(L,1);
		printf("%s\n",error);
		exit(0);
	}
	bservice->battlemgr = create_luaObj(L,-1);
	bservice->msgdisp = new_msgdisp(NULL,NULL,NULL, NULL,battle_processpacket,NULL);
	bservice->thd = create_thread(THREAD_JOINABLE);
    thread_start_run(bservice->thd,service_main,(void*)bservice);
	return bservice;
}
Esempio n. 2
0
void  thread_run(thread_routine r,void *arg)
{
	struct thread_arg *_thread_arg = malloc(sizeof(*_thread_arg));
	_thread_arg->custom_routine = r;
	_thread_arg->custom_arg = arg;
	_thread_arg->_thread = create_thread(0);//not joinable
	thread_start_run(_thread_arg->_thread,routine,_thread_arg);
}
Esempio n. 3
0
int main(int argc,char **argv)
{
    //msgque_flush_time = 5;
    setup_signal_handler();
    InitNetSystem();

    //共用网络层,两个线程各运行一个echo服务
    wpacket_allocator = new_obj_allocator(sizeof(struct wpacket),8192);
    rpacket_allocator = new_obj_allocator(sizeof(struct rpacket),8192);
    asynnet_t asynet = asynnet_new(2);
    msgdisp_t  disp1 = new_msgdisp(asynet,5,
                                   CB_CONNECT(asynconnect),
                                   CB_CONNECTED(asynconnected),
                                   CB_DISCNT(asyndisconnected),
                                   CB_PROCESSPACKET(asynprocesspacket),
                                   CB_CONNECTFAILED(asynconnectfailed));

    /*msgdisp_t  disp2 = new_msgdisp(asynet,
                                  asynconnect,
                                  asynconnected,
                                  asyndisconnected,
                                  asynprocesspacket,
                                  asynconnectfailed);
    */
    thread_t service1 = create_thread(THREAD_JOINABLE);
    //thread_t service2 = create_thread(THREAD_JOINABLE);

    ip = argv[1];
    port = atoi(argv[2]);

    thread_start_run(service1,service_main,(void*)disp1);
    //sleepms(1000);
    //thread_start_run(service2,service_main,(void*)disp2);

    uint32_t tick,now;
    tick = now = GetSystemMs();
    while(!stop){
        sleepms(1000);
        now = GetSystemMs();
        //if(now - tick > 1000)
        {
            uint32_t elapse = now-tick;
            recvsize = (recvsize/elapse)/1000;
            printf("client_count:%d,recvsize:%d,recvcount:%d\n",client_count,recvsize,recvcount);
            tick = now;
            packet_send_count = 0;
            recvcount = 0;
            recvsize = 0;
        }
    }

    thread_join(service1);
    //thread_join(service2);

    CleanNetSystem();
    return 0;
}
Esempio n. 4
0
int main(int argc,char **argv)
{
    setup_signal_handler();
    InitNetSystem();

    asynnet_t asynet = asynnet_new(3);//3个poller,1个用于监听,1个用于处理客户端连接,1个用于处理服务器连接

    msgdisp_t  disp_to_server = new_msgdisp(asynet,3,
                                            CB_CONNECT(to_server_connect),
                                            CB_CONNECTED(to_server_connected),
                                            CB_PROCESSPACKET(to_server_process));

    msgdisp_t  disp_to_client = new_msgdisp(asynet,2,
                                            CB_CONNECT(to_client_connect),
                                            CB_ASYNPROCESSPACKET(to_client_process));

    thread_t service1 = create_thread(THREAD_JOINABLE);
    thread_t service2 = create_thread(THREAD_JOINABLE);

    to_client_ip = argv[1];
    to_client_port = atoi(argv[2]);


    to_server_ip = argv[3];
    to_server_port = atoi(argv[4]);

    thread_start_run(service1,service_toserver,(void*)disp_to_server);
    sleepms(1000);
    thread_start_run(service2,service_toclient,(void*)disp_to_client);

    while(!stop){
        sleepms(100);
    }

    thread_join(service1);
    thread_join(service2);

    CleanNetSystem();
    return 0;
}
Esempio n. 5
0
int main(int argc,char **argv)
{
    setup_signal_handler();
    msgdisp_t disp1 = new_msgdisp(NULL,0);

    thread_t service1 = create_thread(THREAD_JOINABLE);

    msgdisp_t disp2 = new_msgdisp(NULL,0);

    thread_t service2 = create_thread(THREAD_JOINABLE);    
    asydb = new_asyndb();
    asydb->connectdb(asydb,"127.0.0.1",6379);
    asydb->connectdb(asydb,"127.0.0.1",6379);
    //发出第一个请求uu
    char req[256];
    snprintf(req,256,"set key%d %d",g,g);
    
    asydb->request(asydb,new_dbrequest(db_set,req,db_setcallback,disp1,disp1));
    thread_start_run(service1,service_main,(void*)disp1);

    asydb->request(asydb,new_dbrequest(db_set,req,db_setcallback,disp2,disp2));
    thread_start_run(service2,service_main,(void*)disp2);    
    
    uint32_t tick,now;
    tick = now = GetSystemMs();
    while(!stop){
        sleepms(100);
        now = GetSystemMs();
        if(now - tick > 1000)
        {
            printf("count:%d\n",count);
            tick = now;
            count = 0;
        }
    }
    thread_join(service1);
    thread_join(service2);
    return 0;
}
Esempio n. 6
0
agentservice_t new_agentservice(uint8_t agentid,asynnet_t asynet){
	agentservice_t service = calloc(1,sizeof(*service));
	service->agentid = agentid;
	service->_idmgr = new_idmgr(1,MAX_ANGETPLAYER);
	service->msgdisp = new_msgdisp(asynet,
                             	   NULL,
                                   agent_connected,
                                   agent_disconnected,
                                   agent_processpacket,
                                   NULL);
	service->thd = create_thread(THREAD_JOINABLE); 
	thread_start_run(service->thd,service_main,(void*)service);
	return service;
}
Esempio n. 7
0
int main()
{
	
	mq1 = rque_int32_new(65536/2);
	
	thread_t t4 = create_thread(0);
	thread_start_run(t4,Routine4,NULL);

	thread_t t1 = create_thread(0);
	thread_start_run(t1,Routine1,NULL);
	uint32_t tick = GetSystemMs();
	for(;;){
		uint32_t now = GetSystemMs();
		if(now - tick > 1000)
		{
			printf("recv:%d\n",(uint32_t)((count*1000)/(now-tick)));
			tick = now;
			count = 0;
		}
		sleepms(1);
	}
	getchar();
	return 0;
}
Esempio n. 8
0
static void log_once_routine(){
	//pthread_key_create(&g_log_key,NULL);
	llist_init(&g_log_file_list);
	sys_log = calloc(1,sizeof(*sys_log));
	sys_log->filename = new_string(SYSLOG_NAME);
	g_mtx_log_file_list = mutex_create();
	mutex_lock(g_mtx_log_file_list);
	LLIST_PUSH_BACK(&g_log_file_list,sys_log);
	mutex_unlock(g_mtx_log_file_list);
	pending_log = new_msgque(64,default_item_destroyer);
	g_log_thd = create_thread(THREAD_JOINABLE);
	thread_start_run(g_log_thd,log_routine,NULL);
	atexit(on_process_end);
	LOG(sys_log,LOG_INFO,"log open success");
}
Esempio n. 9
0
asynnet_t asynnet_new(uint8_t  pollercount)
{
	if(pollercount == 0)return NULL;
	if(pollercount > MAX_NETPOLLER)
		pollercount = MAX_NETPOLLER;
    asynnet_t asynet = calloc(1,sizeof(*asynet));
    if(!asynet) return NULL;
    asynet->poller_count = pollercount;
	//创建线程池
	int32_t i = 0;
	for(; i < pollercount;++i)
	{
        asynet->netpollers[i].poller_thd = create_thread(THREAD_JOINABLE);
        asynet->netpollers[i].mq_in = new_msgque(32,mq_item_destroyer);
        asynet->netpollers[i].netpoller = new_service();
        thread_start_run(asynet->netpollers[i].poller_thd,mainloop,(void*)&asynet->netpollers[i]);
	}
    return asynet;
}