X-Git-Url: https://jxself.org/git/?p=8sync.git;a=blobdiff_plain;f=8sync%2Fsystems%2Firc.scm;h=e6ad361ae322cfa7bc8308629c24840f8f3b173d;hp=495cbca4f968dfe4b4c4b03c7629c78cc2e12110;hb=68472a819457ce0e6053b59b2b9a1657669e8801;hpb=382af9f4ada1170faab3efda78ae5e3b5e1d4d42 diff --git a/8sync/systems/irc.scm b/8sync/systems/irc.scm index 495cbca..e6ad361 100755 --- a/8sync/systems/irc.scm +++ b/8sync/systems/irc.scm @@ -35,6 +35,8 @@ #:export ( irc-bot-username irc-bot-server irc-bot-channels irc-bot-port + irc-bot-send-line + handle-line handle-misc-input handle-user-join handle-user-quit @@ -162,9 +164,10 @@ (socket #:accessor irc-bot-socket) (actions #:allocation #:each-subclass #:init-value (build-actions - (init irc-bot-init) + (*init* irc-bot-init) + (*cleanup* irc-bot-cleanup) (main-loop irc-bot-main-loop) - (send-line irc-bot-send-line)))) + (send-line irc-bot-send-line-action)))) (define (irc-bot-realname irc-bot) (or (slot-ref irc-bot 'realname) @@ -187,7 +190,10 @@ (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)) @@ -210,14 +216,20 @@ ;; '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 irc-bot message - channel line #:key emote?) +(define* (irc-bot-send-line-action irc-bot message + channel line #:key emote?) + "Action handler for sending lines. Real behavior happens in +irc-bot-send-line." + (irc-bot-send-line irc-bot channel line #:emote? emote?)) + +(define* (irc-bot-send-line irc-bot channel line #:key emote?) ;; TODO: emote? handling (format (irc-bot-socket irc-bot) "PRIVMSG ~a :~a~a" channel line irc-eol)) + ;;; Likely-to-be-overridden generic methods (define-method (dispatch-raw-line (irc-bot ) raw-line)