Don't freak out on interrupts during (select)!
[8sync.git] / demos / irc.scm
index 84b5528dbfc2e3111b4c2cf5a058c253fc05d7fe..2ff8c8cfda8360003f7dc90cc2ec6e521f8b3053 100755 (executable)
@@ -65,7 +65,7 @@
       (display (irc-line dest))))
 
 (define* (handle-login socket username
-                       #:optional
+                       #:key
                        (hostname "*")
                        (servername "*")
                        (realname username)
            ,(lambda (s)
               (if (string->number s) #t #f))))
     (username (single-char #\u) (required? #t) (value #t))
+    (channels (value #t))
     (listen)))
 
 (define (main args)
          (port (or (option-ref options 'port #f)
                    default-irc-port))
          (username (option-ref options 'username #f))
-         (listen (option-ref options 'listen #f)))
+         (listen (option-ref options 'listen #f))
+         (channels (option-ref options 'channels ""))
+         (agenda (make-agenda)))
     (display `((server ,hostname) (port ,port) (username ,username)
-               (listen ,listen)))
+               (listen ,listen) (channels-split ,(string-split channels #\space))))
     (newline)
+    (if listen
+        (spawn-and-queue-repl-server! agenda))
     (queue-and-start-irc-agenda!
-     (make-agenda)
+     agenda
      (irc-socket-setup hostname port)
      #:inet-port port
      #:username username
-     #:handler (make-simple-irc-handler handle-line))))
+     #:handler (make-simple-irc-handler handle-line)
+     #:channels (string-split channels #\space))))