예제 #1
0
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;
}
예제 #2
0
파일: ecobserver.c 프로젝트: entc/entc-adb
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 );  
  }
}