/*====================================== * CORE : MAINROUTINE *--------------------------------------*/ int main (int argc, char **argv) { {// initialize program arguments char *p1 = SERVER_NAME = argv[0]; char *p2 = p1; while ((p1 = strchr(p2, '/')) != NULL || (p1 = strchr(p2, '\\')) != NULL) { SERVER_NAME = ++p1; p2 = p1; } arg_c = argc; arg_v = argv; } malloc_init();// needed for Show* in display_title() [FlavioJS] #ifdef MINICORE // minimalist Core display_title(); usercheck(); do_init(argc,argv); do_final(); #else// not MINICORE set_server_type(); display_title(); usercheck(); db_init(); signals_init(); timer_init(); socket_init(); plugins_init(); do_init(argc,argv); plugin_event_trigger(EVENT_ATHENA_INIT); {// Main runtime cycle int next; while (runflag != CORE_ST_STOP) { next = do_timer(gettick_nocache()); do_sockets(next); } } plugin_event_trigger(EVENT_ATHENA_FINAL); do_final(); timer_final(); plugins_final(); socket_final(); db_final(); #endif malloc_final(); return 0; }
int main (int argc, char **argv) { int next; // initialise program arguments { char *p = SERVER_NAME = argv[0]; while ((p = strchr(p, '/')) != NULL) SERVER_NAME = ++p; arg_c = argc; arg_v = argv; } set_server_type(); display_title(); usercheck(); malloc_init(); /* 一番最初に実行する必要がある */ db_init(); signals_init(); timer_init(); socket_init(); plugins_init(); do_init(argc,argv); graph_init(); plugin_event_trigger("Athena_Init"); while (runflag) { next = do_timer(gettick_nocache()); do_sendrecv(next); #ifndef TURBO do_parsepacket(); #endif } plugin_event_trigger("Athena_Final"); graph_final(); do_final(); timer_final(); plugins_final(); socket_final(); db_final(); malloc_final(); return 0; }
void plugins_final(void) { Plugin* plugin = plugin_head; Plugin* next_plugin; Plugin_Event_List* evl = event_head; Plugin_Event_List* next_evl; Plugin_Event* ev; Plugin_Event* next_ev; //ShowDebug("plugins_final()\n"); plugin_event_trigger(EVENT_PLUGIN_FINAL); while( plugin ){ next_plugin = plugin->next; plugin_unload(plugin); plugin = next_plugin; } while( evl ){ ev = evl->events; while( ev ){ next_ev = ev->next; aFree(ev); ev = next_ev; } next_evl = evl->next; aFree(evl->name); aFree(evl); evl = next_evl; } aFree(plugin_call_table); return; }
void plugins_init(void) { // Sugested functionality: // add atcommands/script commands (Borf) char* PLUGIN_CONF_FILENAME = "conf/plugin_athena.conf"; //ShowDebug("plugins_init()\n"); register_plugin_func(EVENT_PLUGIN_INIT); register_plugin_func(EVENT_PLUGIN_FINAL); register_plugin_func(EVENT_ATHENA_INIT); register_plugin_func(EVENT_ATHENA_FINAL); // networking EXPORT_SYMBOL(RFIFOSKIP, SYMBOL_RFIFOSKIP); EXPORT_SYMBOL(WFIFOSET, SYMBOL_WFIFOSET); EXPORT_SYMBOL(do_close, SYMBOL_DELETE_SESSION); EXPORT_SYMBOL(session, SYMBOL_SESSION); EXPORT_SYMBOL(&fd_max, SYMBOL_FD_MAX); EXPORT_SYMBOL(addr_, SYMBOL_ADDR); // timers EXPORT_SYMBOL(get_uptime, SYMBOL_GET_UPTIME); EXPORT_SYMBOL(delete_timer, SYMBOL_DELETE_TIMER); EXPORT_SYMBOL(add_timer_func_list, SYMBOL_ADD_TIMER_FUNC_LIST); EXPORT_SYMBOL(add_timer_interval, SYMBOL_ADD_TIMER_INTERVAL); EXPORT_SYMBOL(add_timer, SYMBOL_ADD_TIMER); EXPORT_SYMBOL((void*)get_svn_revision, SYMBOL_GET_SVN_REVISION); EXPORT_SYMBOL(gettick, SYMBOL_GETTICK); // core EXPORT_SYMBOL(parse_console, SYMBOL_PARSE_CONSOLE); EXPORT_SYMBOL(&runflag, SYMBOL_RUNFLAG); EXPORT_SYMBOL(arg_v, SYMBOL_ARG_V); EXPORT_SYMBOL(&arg_c, SYMBOL_ARG_C); EXPORT_SYMBOL(SERVER_NAME, SYMBOL_SERVER_NAME); EXPORT_SYMBOL(&SERVER_TYPE, SYMBOL_SERVER_TYPE); load_priority = 1; plugins_config_read(PLUGIN_CONF_FILENAME); load_priority = 0; if( auto_search ) findfile("plugins", DLL_EXT, plugin_load); plugin_event_trigger(EVENT_PLUGIN_INIT); return; }
/*====================================== * CORE : MAINROUTINE *--------------------------------------*/ int main (int argc, char **argv) { {// Inicializa os argumentos do programa char *p1 = SERVER_NAME = argv[0]; char *p2 = p1; while ((p1 = strchr(p2, '/')) != NULL || (p1 = strchr(p2, '\\')) != NULL) { SERVER_NAME = ++p1; p2 = p1; } arg_c = argc; arg_v = argv; } // Não precisamos chamar o malloc_init se o Memory Manager não está ativo [Keoy] #ifdef USE_MEMMGR malloc_init(); // needed for Show* in display_title() [FlavioJS] #endif #ifdef MINICORE // minimalist Core display_title(); #ifndef _WIN32 usercheck(); #endif do_init(argc,argv); do_final(); #else// not MINICORE set_server_type(); // Define o tipo de servidor (função exclusiva de cada servidor) display_title(); // Mostra o título // Não precisamos verificar se estamos em root se não estamos em um sistema WIN32 [Keoy] #ifndef _WIN32 usercheck(); #endif db_init(); signals_init(); timer_init(); socket_init(); plugins_init(); do_init(argc,argv); // Inicializa as funções do servidor plugin_event_trigger(EVENT_ATHENA_INIT); // Evento inicial dos plugins {// Ciclo principal do servidor int next; // Enquanto a runflag for verdadeira (1) o servidor rodará, do contrário entrará em processo de finalização while (runflag) { next = do_timer(gettick_nocache()); do_sockets(next); } } plugin_event_trigger(EVENT_ATHENA_FINAL); // Evento final dos plugins do_final(); timer_final(); plugins_final(); socket_final(); db_final(); #endif // Não precisamos chamar o malloc_init se o Memory Manager não está ativo [Keoy] #ifdef USE_MEMMGR malloc_final(); #endif return 0; }