Used a GLib loop.
[cascardo/pubsub-bot.git] / status.c
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>
@@ -406,6 +407,23 @@ hook (void *data, int type, iks *node)
   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)
 {
@@ -434,7 +452,6 @@ main (int argc, char **argv)
     }
   parser = iks_stream_new ("jabber:client", &parser, hook);
   iks_connect_tcp (parser, server, 5222);
-  while (1)
-    iks_recv (parser, -1);
+  loop (parser);
   return 0;
 }