X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=demos%2Firc.scm;h=cbd3848378f8d8adb3748e0abe66b18e50921507;hb=acafaeee5bba662ce9bb37744ee75e0c461c628d;hp=7a8d2ab020e478b740699b893e12fb24cd525c00;hpb=c390e803039940bf3f7337a4d3a1d7591345f58d;p=8sync.git diff --git a/demos/irc.scm b/demos/irc.scm index 7a8d2ab..cbd3848 100755 --- a/demos/irc.scm +++ b/demos/irc.scm @@ -78,11 +78,16 @@ (irc-format socket "JOIN ~a" channel)) channels)) -(define (handle-line socket line) - (display line) - (newline)) - -(define (make-simple-irc-handler handle-line) +(define (handle-line socket line my-username) + (match (string-split line #\space) + (("PING" rest ...) + (irc-display "PONG" socket) + (display "PONG'ed back ;)\n")) + (_ + (display line) + (newline)))) + +(define (make-simple-irc-handler handle-line username) (let ((buffer '())) (define (reset-buffer) (set! buffer '())) @@ -95,7 +100,8 @@ ((#\newline #\return (? char? line-chars) ...) (%sync (%run (handle-line socket - (list->string (reverse line-chars))))) + (list->string (reverse line-chars)) + username))) ;; reset buffer (set! buffer '())) (_ #f)))) @@ -104,7 +110,10 @@ (define* (queue-and-start-irc-agenda! agenda socket #:key (username "syncbot") (inet-port default-irc-port) - (handler (make-simple-irc-handler handle-line)) + (handler (make-simple-irc-handler + (lambda args + (apply handle-line args)) + username)) (channels '())) (dynamic-wind (lambda () #f) @@ -140,14 +149,16 @@ default-irc-port)) (username (option-ref options 'username #f)) (listen (option-ref options 'listen #f)) - (channels (option-ref options 'channels ""))) + (channels (option-ref options 'channels "")) + (agenda (make-agenda))) (display `((server ,hostname) (port ,port) (username ,username) (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) #:channels (string-split channels #\space))))