static void *service_main(void *ud){ msgdisp_t disp = (msgdisp_t)ud; while(!stop){ msg_loop(disp,50); } return NULL; }
static void *service_toserver(void *ud){ msgdisp_t disp = (msgdisp_t)ud; int32_t err = 0; disp->listen(disp,2,to_server_ip,to_server_port,&err); while(!stop){ msg_loop(disp,50); } return NULL; }
static void *service_main(void *ud){ battleservice_t service = (battleservice_t)ud; tls_create(MSGDISCP_TLS,(void*)service->msgdisp,NULL); tls_create(BATTLESERVICE_TLS,(void*)service,NULL); while(!service->stop){ msg_loop(service->msgdisp,50); } return NULL; }
static void *service_toclient(void *ud){ msgdisp_t disp = (msgdisp_t)ud; int32_t err = 0; //用户的连接比较频繁,用一个单独的poller来处理监听 disp->listen(disp,1,to_client_ip,to_client_port,&err); while(!stop){ msg_loop(disp,50); } return NULL; }
static void *service_main(void *ud){ printf("echo service port:%d\n",port); msgdisp_t disp = (msgdisp_t)ud; int32_t err = 0; disp->listen(disp,0,ip,port++,&err); while(!stop){ msg_loop(disp,500); } printf("service_main finish\n"); return NULL; }
int main(int argc, char *argv[]) { SDL_Event event; init_sdl(); app_init(argc, argv); while(SDL_PollEvent(&event)); /* Removes startup parasite events */ keyboard_init(handle_keyup, handle_keydown); msg_loop(); assert(0); /* Never reached */ return EXIT_FAILURE; }
int main(int argc,char *argv[]) { char *p_config_name = DEVICECONFIG; if(argc > 1) { p_config_name = argv[1]; } if(access(p_config_name,F_OK|R_OK) != 0) { perror("config file not exist or Limited access!\n"); exit(-1); } device_list = create_list(sizeof(DEVCONTEXT),nameCompare); if(device_list && load_config(p_config_name,device_list) >= 0 && msg_init() > 0) { //pthread_create_detached(dev_msg_loop,NULL); msg_loop(); } msg_release(); perror("config file is invalid!\n"); return 0; }
int main (int argc, char **argv) { setprogname (argv[0]); if (argc != 4 || !convertint (argv[1], &shmfd) || !convertint (argv[2], &rfd) || !convertint (argv[3], &rwfd)) usage (); #ifdef MAINTAINER if (getenv ("AIOD_PAUSE")) { struct sigaction sa; bzero (&sa, sizeof (sa)); sa.sa_handler = nop; #ifdef SA_RESETHAND sa.sa_flags = SA_RESETHAND; #endif /* SA_RESETHAND */ sigaction (SIGCONT, &sa, NULL); warn ("pid %d, pausing\n", int (getpid ())); timeval tv; tv.tv_sec = 60; tv.tv_usec = 0; select (0, NULL, NULL, NULL, &tv); } #endif /* MAINTAINER */ umask (0); ptr<shmbuf> b = shmbuf::alloc (shmfd); if (!b) fatal ("could not map shared memory buffer\n"); srv = New aiosrv (rwfd, b); (void) sigemptyset (&sigio_mask); sigaddset (&sigio_mask, SIGIO); sigprocmask (SIG_BLOCK, &sigio_mask, NULL); struct sigaction sa; bzero (&sa, sizeof (sa)); sa.sa_handler = sigio_handler; if (sigaction (SIGIO, &sa, NULL) < 0) fatal ("sigaction: %m\n"); /* Since the client code might not necessarily tolerate the death of * an aiod process, put ourselves in a new process group. That way * if the parent process catches terminal signals like SIGINT, the * aiods will not die. This allows the parent still to issue aio * requests while handling the signal. Additionally, if sigio_set * uses SIOCSPGRP, starting a new process group avoids hitting other * processes with our SIGIO signals. */ setpgid (0, 0); if (sigio_set (rwfd) < 0) fatal ("could not enable SIGIO\n"); msg_loop (); return 1; }
int main(){ lua_State *L = luaL_newstate(); luaL_openlibs(L); if (luaL_dofile(L,"gateconfig.lua")) { const char * error = lua_tostring(L, -1); lua_pop(L,1); printf("%s\n",error); return 0; } luaObject_t gatecfg = GETGLOBAL_OBJECT(L,"gateserver"); agentcount = GET_OBJ_FIELD(gatecfg,"agentservice_count",int,lua_tonumber); release_luaObj(gatecfg); luaObject_t toclicfg = GETGLOBAL_OBJECT(L,"toclient"); string_t cliip = new_string(GET_OBJ_FIELD(toclicfg,"ip",const char *,lua_tostring)); int cliport = GET_OBJ_FIELD(toclicfg,"port",int,lua_tonumber); release_luaObj(toclicfg); luaObject_t togamecfg = GETGLOBAL_OBJECT(L,"togame"); g_gameip = new_string(GET_OBJ_FIELD(togamecfg,"ip",const char *,lua_tostring)); g_gameport = GET_OBJ_FIELD(togamecfg,"port",int,lua_tonumber); release_luaObj(togamecfg); luaObject_t torediscfg = GETGLOBAL_OBJECT(L,"toredis"); g_redisip = new_string(GET_OBJ_FIELD(torediscfg,"ip",const char *,lua_tostring)); g_redisport = GET_OBJ_FIELD(torediscfg,"port",int,lua_tonumber); release_luaObj(torediscfg); lua_close(L); InitNetSystem(); //两个poller,一个用于accept,一个用于数据传输 asynnet_t asynet = asynnet_new(1); if(start_verifyservice() != 0){ SYS_LOG(LOG_ERROR,"start verifyservice failed\n"); return 0; } /*if(start_togame_service(asynet) != 0){ SYS_LOG(LOG_ERROR,"start togame service failed\n"); return 0; }*/ uint8_t i; for(i = 0; i < agentcount; ++i){ g_agents[i] = new_agentservice(i,asynet); } msgdisp_t listener = new_msgdisp(asynet,1,CB_CONNECT(agent_connect)); //开启对客户端的监听 int32_t err = 0; listener->listen(listener,0,to_cstr(cliip),cliport,&err); if(err != 0) { SYS_LOG(LOG_ERROR,"start listen failed:%d\n",err); return 0; } setup_signal_handler(); while(!stop){ msg_loop(listener,500); } //stop_togame_service(); stop_verifyservice(); for(i = 0; i < agentcount; ++i){ stop_agentservice(g_agents[i]); } return 0; }