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; }
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); }
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; }
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; }
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; }
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; }
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; }
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"); }
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; }