chiark / gitweb /
*** empty log message ***
[sympathy.git] / apps / sympathyd.c
index 8bed929..2e45ed1 100644 (file)
@@ -10,13 +10,102 @@ static char rcsid[] = "$Id$";
 
 /*
  * $Log$
+ * Revision 1.5  2008/02/13 18:05:06  james
+ * *** empty log message ***
+ *
+ * Revision 1.4  2008/02/13 17:21:55  james
+ * *** empty log message ***
+ *
+ * Revision 1.3  2008/02/08 15:06:52  james
+ * *** empty log message ***
+ *
+ * Revision 1.2  2008/02/07 15:42:49  james
+ * *** empty log message ***
+ *
  * Revision 1.1  2008/02/05 14:25:49  james
  * *** empty log message ***
  *
  */
 
-#include "sympathy.h"
+#include <sympathy.h>
 
-int main(int argc,char *argv[])
+#include "client.h"
+#include "clients.h"
+
+int main (int argc,char *argv[])
 {
+  fd_set rfds, wfds;
+  ANSI a = { 0 };
+  Context c;
+  Socket *s, *cs;
+  Clients *clients;
+
+
+  s = socket_listen ("socket");
+
+  c.t = ptty_open (NULL, NULL);
+  c.v = vt102_new ();
+  c.h = history_new (200);
+  c.l = file_log_new ("log");
+
+  terminal_register_handlers ();
+  a.terminal = terminal_open (0, 1);
+
+  ansi_reset (&a, NULL);
+
+  clients=clients_new();
+
+  for (;;)
+    {
+      struct timeval tv = { 0, 100000 };
+
+
+      FD_ZERO (&rfds);
+      FD_ZERO (&wfds);
+
+      tty_pre_select (c.t, &rfds,&wfds);
+      tty_pre_select (a.terminal, &rfds,&wfds);
+
+      socket_pre_select (s, &rfds, &wfds);
+
+      clients_pre_select (clients,&rfds,&wfds);
+
+      select (FD_SETSIZE, &rfds, NULL, NULL, &tv);
+
+      cs = socket_post_select (s, &rfds, &wfds);
+
+      if (cs)
+        {
+          /*New client connexion */
+          clients_new_client (clients, cs, &c);
+        }
+
+
+      clients_post_select (clients, &c, &rfds, &wfds);
+
+      if (FD_ISSET (c.t->rfd, &rfds))
+        {
+          char buf[1024];
+          int red;
+
+          red = c.t->recv (c.t, buf, sizeof (buf));
+
+          if (red < 0)
+            break;
+
+          if (red)
+            {
+              clients_output (clients, buf, red);
+              vt102_parse (&c, buf, red);
+            }
+        }
+
+      ansi_dispatch (&a, &c);
+      ansi_update (&a, &c);
+    }
+
+  clients_shutdown (clients);
+  ansi_terminal_reset (&a);
+  terminal_atexit ();
+  printf ("QUAT\n");
 }