示例#1
0
int emulator_read(int device, char *data, int length, int timeout) {
	size_t size = 0;
	if (length == PACKET_RSP_HEADER_SIZE) {
		struct response_packet_t *response = (struct response_packet_t*) data;
		response->prefix = PACKET_PREFIX;
		response->data_length = sizeof(uint16_t);
		response->id = id;
		response->response_code = RSP_OK;
		response->data_length = getlenght(var);
	} else {
		size_t size = getlenght(var);
		if (device == handle_engine) {
			engine_read(var, data, size);
		}
		if (device == handle_senshub) {
			senshub_read(var, data, size);
		}
		if (device == handle_ble) {
			ble_device_read(var, data, size);
		}
	}
	return size;
}
示例#2
0
void
engine_loop ()
{
  int maxfd;
  fd_set rfdset;
  fd_set wfdset;
  struct timeval tv;
  int fds;

  while (!exiting || nbclients > 0)
    {
      FD_ZERO (&rfdset);
      FD_ZERO (&wfdset);

      maxfd = -1;
      engine_set_readers (&rfdset, &maxfd);
      engine_set_writers (&wfdset, &maxfd);

      /* Wait for the end of created process to avoid zombie */
      engine_wait_pids();

      if (maxfd == -1)
        {
          /*
           * well... in fact this should not happen
           * or very rarely
           */
          log (LOG_WARNING, _("engine - No data to wait\n"));
          sleep (ENGINE_TIMEOUT);
          fds = 0;              /* simulate a timeout */
        }
      else
        {
          tv.tv_sec = ENGINE_TIMEOUT;
          tv.tv_usec = 0;
          fds = select (maxfd + 1, &rfdset, &wfdset, NULL, &tv);
        }
      
      /* FIXME: find a better way of doing this */
      if(!haccess->is_connected())
        {
	log (LOG_WARNING, _("Server drop the connection.\n"));
	engine_stop();
        }
      
      if (fds > 0)
        {
          engine_read (&rfdset);
          engine_write (&wfdset);
          engine_timeout ();
        }
      else
        {
          /* 
           * There was no data to read/write
           */
          debug (9, "engine - Timed out\n");
          engine_timeout ();
        }
      if (exiting && nbclients > 0)
        engine_end_clients ();
    }
  debug (1, "engine - ended\n");
}