Used a GLib loop.
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Mon, 18 May 2009 05:44:14 +0000 (02:44 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Mon, 18 May 2009 05:44:14 +0000 (02:44 -0300)
Makefile
status.c

index 6f8941f..d28414d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 CC = gcc
 CC = gcc
-CFLAGS = -g -Wall `pkg-config --cflags iksemel`
-LIBS = `pkg-config --libs iksemel`
+CFLAGS = -g -Wall `pkg-config --cflags iksemel glib-2.0`
+LIBS = `pkg-config --libs iksemel glib-2.0`
 OBJECTS = status.o
 
 .c.o:
 OBJECTS = status.o
 
 .c.o:
index ada4d0a..28f9a91 100644 (file)
--- a/status.c
+++ b/status.c
@@ -17,6 +17,7 @@
  */
 
 
  */
 
 
+#include <glib.h>
 #include <iksemel.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <iksemel.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -406,6 +407,23 @@ hook (void *data, int type, iks *node)
   return IKS_OK;
 }
 
   return IKS_OK;
 }
 
+gboolean
+handler (GIOChannel *channel, GIOCondition cond, gpointer data)
+{
+  iksparser *parser = data;
+  iks_recv (parser, 0);
+  return TRUE;
+}
+
+void
+loop (iksparser *parser)
+{
+  GIOChannel *channel;
+  channel = g_io_channel_unix_new (iks_fd (parser));
+  g_io_add_watch (channel, G_IO_IN, handler, parser);
+  g_main_loop_run (g_main_loop_new (g_main_context_default (), TRUE));
+}
+
 int
 main (int argc, char **argv)
 {
 int
 main (int argc, char **argv)
 {
@@ -434,7 +452,6 @@ main (int argc, char **argv)
     }
   parser = iks_stream_new ("jabber:client", &parser, hook);
   iks_connect_tcp (parser, server, 5222);
     }
   parser = iks_stream_new ("jabber:client", &parser, hook);
   iks_connect_tcp (parser, server, 5222);
-  while (1)
-    iks_recv (parser, -1);
+  loop (parser);
   return 0;
 }
   return 0;
 }