int module_start (Q5Module* self) { int i; uint32_t gameEngineSrvNo; ENetAddress address; if (enet_initialize () != 0) { eclogger_msg (LL_ERROR, properties.name, "server", "could not initialize enet"); return FALSE; } enet_address_set_host (&address, self->host); address.port = self->port; self->server = enet_host_create (&address, 32, 2, 0, 0); if (!self->server) { enet_deinitialize(); eclogger_msg (LL_ERROR, properties.name, "server", "can't start enet server"); return FALSE; } eclogger_fmt (LL_DEBUG, properties.name, "server", "listen '%s' on port '%u'", self->host, self->port); self->threads = eclist_new (); self->done = FALSE; for (i = 0; i < 1; i++) { EcThread thread = ecthread_new (); eclist_append(self->threads, thread); ecthread_start(thread, module_thread_run, self); } gameEngineSrvNo = q5core_getModuleId (self->core, "GAME_E"); if (gameEngineSrvNo == 0) { eclogger_fmt (LL_WARN, properties.name, "server", "no game engine available"); } self->entities = gse_create (self->server, gameEngineSrvNo, "Lobo's geiler server"); gse_addRealm (self->entities, "the shire"); ecmessages_add (self->instance->msgid, Q5_DATA_GET, module_callback_get, self); return TRUE; }
void ecf_observer_onDelete(void* ptr) { /* variables */ struct EcSecFopen secopen; int counter = 0; EcFileObserver self = ptr; eclogger_msg (LL_DEBUG, "ENTC", "observer", "Received onDelete event" ); ecfh_close( &(self->fhandle) ); while (!ecsec_fopen(&secopen, self->filename, O_RDONLY, self->confdir)) { /* fixme export this into an extra thread */ #ifdef _WIN32 Sleep(1); #else sleep(1); #endif counter++; if( counter > 5 ) { return; } } self->fhandle = secopen.fhandle; #ifdef __APPLE_CC__ /* reestablish the kevent handler */ ece_files_register(self->events, ecfh_fileno(self->fhandle), EVFILT_VNODE, NOTE_WRITE, self->fct, self->ptr, ecf_observer_onDelete, self); #elif __linux__ ece_files_register(self->events, self->filename, self->fct, self->ptr, ecf_observer_onDelete, self); #else ece_files_register (self->events, self->filename, self->fct, self->ptr, ecf_observer_onDelete, self); #endif if( self->fct ) { self->fct( self->ptr ); } }