Esempio n. 1
0
static void
conn_cb (GConn * conn, GConnEvent * event, gpointer data)
{
  GMainLoop *loop = (GMainLoop *) data;

  switch (event->type) {
    case GNET_CONN_CONNECT: {
      const gchar req[] = "GET / HTTP/1.0\r\n"
          "Accept: */*\r\nConnection: Close\r\n"
          "\r\n";

      g_print ("Connected.\n");
      /* using _write_direct() here on purpose to test that code path too */
      gnet_conn_write_direct (conn, g_strdup (req), strlen (req),
          (GDestroyNotify) g_free);
      break;
    }
    case GNET_CONN_WRITE:
      g_print ("Sent request.\n");
      gnet_conn_read (conn);
      break;
    case GNET_CONN_READ:
      g_print (".");
      /* write (1, event->buffer, event->length); */
      gnet_conn_read (conn);
      break;
    case GNET_CONN_READABLE:
      g_error ("READABLE event shouldn't have happened without explicit watch");
      break;
    case GNET_CONN_WRITABLE:
      g_error ("WRITABLE event shouldn't have happened without explicit watch");
      break;
    case GNET_CONN_CLOSE:
      g_print ("\nConnection closed by server.\n");
      g_main_loop_quit (loop);
      break;
    case GNET_CONN_TIMEOUT:
      g_print ("Timeout.\n");
      g_main_loop_quit (loop);
      break;
    case GNET_CONN_ERROR:
      g_print ("Connection error.\n");
      g_main_loop_quit (loop);
      break;
    default:
      g_error ("Unexpected event type %d", event->type);
      break;
  }
}
Esempio n. 2
0
/* Handle GConn events */
static void
ob_conn_func (GConn* conn, GConnEvent* event, gpointer user_data)
{
    switch (event->type)
    {
    case GNET_CONN_CONNECT:
    {
        gnet_conn_timeout (conn, 0);	/* reset timeout */

        printf ("Connected to server\n");

        gnet_conn_read (conn);
        break;
    }

    case GNET_CONN_READ:
    {
        /* Write line out */
        net_event_header_t hdr;
        light_temp_event_t ev;

        gnet_unpack ("!iiliii", event->buffer, sizeof (hdr) + sizeof (ev),
                     &hdr.size, &hdr.event_type, &hdr.time_seconds,
                     &ev.node_id, &ev.light, &ev.temp);

        printf ("Got an event: %d %d %ld %d %d %d\n", hdr.size, hdr.event_type,
                hdr.time_seconds, ev.node_id, ev.light, ev.temp);
        xml_write_node (ev.node_id, ev.light, ev.temp, hdr.time_seconds);

        /* Check if done */
        if (read_eof) {
            exit (EXIT_SUCCESS);
        }

        /* Read another line */
        gnet_conn_read (conn);

        break;
    }

    case GNET_CONN_WRITE:
    {
        /* do nothing */
        break;
    }

    case GNET_CONN_CLOSE:
    {
        gnet_conn_delete (conn);
        exit (EXIT_SUCCESS);
        break;
    }

    case GNET_CONN_TIMEOUT:
    {
        gnet_conn_delete (conn);
        fprintf (stderr, "Connection timeout\n");
        exit (EXIT_FAILURE);
        break;
    }

    case GNET_CONN_ERROR:
    {
        gnet_conn_delete (conn);
        fprintf (stderr, "Connection failure\n");
        exit (EXIT_FAILURE);
        break;
    }

    default:
        g_assert_not_reached ();
    }
}