actors: Switch over to using wrap-rmeta-slot for build-actions.
[8sync.git] / 8sync / systems / irc.scm
index aad138d09bb62a9de32c5f6bfc1fa0614236040d..fff346177859e9d0125b53d4336f0dd5cc319aae 100755 (executable)
@@ -1,9 +1,5 @@
-#!/usr/bin/guile \
--e main -s
-!#
-
 ;;; 8sync --- Asynchronous programming for Guile
-;;; Copyright (C) 2015 Christopher Allan Webber <cwebber@dustycloud.org>
+;;; Copyright © 2015, 2016, 2017 Christopher Allan Webber <cwebber@dustycloud.org>
 ;;;
 ;;; This file is part of 8sync.
 ;;;
         #:getter irc-bot-port)
   (socket #:accessor irc-bot-socket)
   (actions #:allocation #:each-subclass
-           #:init-value (build-actions
-                         (init irc-bot-init)
+           #:init-thunk (build-actions
+                         (*init* irc-bot-init)
+                         (*cleanup* irc-bot-cleanup)
                          (main-loop irc-bot-main-loop)
+                         (handle-line handle-line)
                          (send-line irc-bot-send-line-action))))
 
 (define (irc-bot-realname irc-bot)
      (format socket "JOIN ~a~a" channel irc-eol))
    (irc-bot-channels irc-bot))
 
-  (<- irc-bot (actor-id irc-bot) 'main-loop))
+  (<- (actor-id irc-bot) 'main-loop))
+
+(define (irc-bot-cleanup irc-bot message)
+  (close (irc-bot-socket irc-bot)))
 
 (define (irc-bot-main-loop irc-bot message)
   (define socket (irc-bot-socket irc-bot))
    ;;  'done)
    ;; Otherwise, let's read till the next line!
    (else
-    (<- irc-bot (actor-id irc-bot) 'main-loop))))
+    (<- (actor-id irc-bot) 'main-loop))))
 
 (define* (irc-bot-send-line-action irc-bot message
                                    channel line #:key emote?)
@@ -240,12 +241,13 @@ irc-bot-send-line."
        (receive (channel-name line-text emote?)
            (condense-privmsg-line line-params)
          (let ((username (irc-line-username line-prefix)))
-           (handle-line irc-bot username channel-name
-                        line-text emote?))))
+           (<- (actor-id irc-bot) 'handle-line
+               username channel-name
+               line-text emote?))))
       (_ (handle-misc-input irc-bot raw-line)))))
 
-(define-method (handle-line (irc-bot <irc-bot>) username channel-name
-                                    line-text emote?)
+(define-method (handle-line (irc-bot <irc-bot>) message
+                            username channel-name line-text emote?)
   (echo-message irc-bot username channel-name line-text emote?))
 
 (define-method (handle-misc-input (irc-bot <irc-bot>) raw-line)