Exemplo n.º 1
0
int
input_queue_get(il_octet_string_t **buffer, long *offset, int timeout)
{
  fd_set fds;
  struct timeval tv;
  int msg_len;
  static il_http_message_t msg;

  assert(buffer != NULL);

  *buffer = (il_octet_string_t *)&msg;

  FD_ZERO(&fds);
  FD_SET(sock, &fds);
  
  tv.tv_sec = timeout;
  tv.tv_usec = 0;
  
  msg_len = select(sock + 1, &fds, NULL, NULL, timeout >= 0 ? &tv : NULL);
  switch(msg_len) {
     
  case 0: /* timeout */
    return(0);
    
  case -1: /* error */
	  switch(errno) {
	  case EINTR:
		  il_log(LOG_DEBUG, "  interrupted while waiting for event!\n");
		  return(0);

	  default:
		  set_error(IL_SYS, errno, "input_queue_get: error waiting for event");
		  return(-1);
	  }
  default:
	  break;
  }
  
  if((accepted=accept(sock, NULL, NULL)) < 0) {
    set_error(IL_SYS, errno, "input_queue_get: error accepting connection");
    return(-1);
  }

  msg_len = receive_http(&accepted, plain_reader, &msg);

  if(msg_len < 0) {
	  close(accepted);
	  if(error_get_maj() != IL_OK) 
		  return -1;
	  else
		  return 0;
  }

  close(accepted);
  *offset = -1;
  return(msg.len);
}
Exemplo n.º 2
0
int 
input_queue_attach()
{ 
  struct sockaddr_un saddr;

  if((sock=socket(PF_UNIX, SOCK_STREAM, 0)) < 0) {
    set_error(IL_SYS, errno, "input_queue_attach: error creating socket");
    return(-1);
  }

  memset(&saddr, 0, sizeof(saddr));
  saddr.sun_family = AF_UNIX;
  strcpy(saddr.sun_path, socket_path);

  /* test for the presence of the socket and another instance 
     of interlogger listening */
  if(connect(sock, (struct sockaddr *)&saddr, sizeof(saddr.sun_path)) < 0) {
	  if(errno == ECONNREFUSED) {
		  /* socket present, but no one at the other end; remove it */
		  il_log(LOG_WARNING, "  removing stale input socket %s\n", socket_path);
		  unlink(socket_path);
	  }
	  /* ignore other errors for now */
  } else {
	  /* connection was successful, so bail out - there is 
	     another interlogger running */
	  set_error(IL_SYS, EADDRINUSE, "input_queue_attach: another instance of interlogger is running");
	  return(-1);
  }
  
  if(bind(sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0) {
    set_error(IL_SYS, errno, "input_queue_attach: error binding socket");
    return(-1);
  }

  if (listen(sock, SOCK_QUEUE_MAX)) {
    set_error(IL_SYS, errno, "input_queue_attach: error listening on socket");
    return -1;
  }

  return(0);
}
Exemplo n.º 3
0
int main(int argc, char **argv)
{
    demoLoad(argc, argv);
    Window window = createWindow("Teapots");
    Graphics graphics(window);
    Graphics::Flags flags;
    if (!graphics.init(flags)) {
        return 1;
    }
    il_pos pos = il_pos_new(&graphics.space);
    il_pos_setPosition(&pos, il_vec3_new(0, -4, 0));
    Teapot teapot;
    Teapots drawable(pos.id, teapot);
    graphics.drawables.push_back(&drawable);

    char *error;
    if (!teapot.build(graphics.rm, &error)) {
        il_error("Teapot: %s", error);
        free(error);
        return 1;
    }

    il_pos_setPosition(&graphics.space.camera, il_vec3_new(0, 0, 20));

    il_pos lightp = il_pos_new(&graphics.space);
    il_pos_setPosition(&lightp, il_vec3_new(20, 3, 20));

    ilG_light lightl;
    lightl.color = il_vec3_new(.8f*2, .7f*2, .2f*2);
    lightl.radius = 50;

    State state;

    unsigned lightp_id = lightp.id;
    state.sunlight_locs = &lightp_id;
    state.sunlight_lights = &lightl;
    state.sunlight_count = 1;

    typedef std::chrono::steady_clock clock;
    typedef std::chrono::duration<double> duration;

    clock::time_point start = clock::now();
    while (1) {
        SDL_Event ev;
        while (SDL_PollEvent(&ev)) {
            switch (ev.type) {
            case SDL_QUIT:
                il_log("Stopping");
                window.close();
                return 0;
            }
        }

        duration delta = clock::now() - start;
        const double secs = 5.0;
        const int scale = 20;
        il_vec3 v;
        v.x = float(sin(delta.count() * M_PI * 2.0 / secs) * scale);
        v.y = 0.f;
        v.z = float(cos(delta.count() * M_PI * 2.0 / secs) * scale);
        il_quat q = il_quat_fromAxisAngle(0, 1, 0, float(delta.count() * M_PI * 2.0 / secs));
        il_pos_setPosition(&graphics.space.camera, v);
        il_pos_setRotation(&graphics.space.camera, q);

        graphics.draw(state);
    }
}