-#!/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>
+;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;;
;;; This file is part of 8sync.
;;;
(let* ((s (socket PF_INET SOCK_STREAM 0))
(flags (fcntl s F_GETFL))
(ip-address (inet-ntop AF_INET (car (hostent:addr-list (gethost hostname))))))
- (fcntl s F_SETFL (logior O_NONBLOCK flags))
- (connect s AF_INET
- (inet-pton AF_INET ip-address)
- inet-port)
- s))
+ (cond (s
+ (fcntl s F_SETFL (logior O_NONBLOCK flags))
+ (connect s AF_INET (inet-pton AF_INET ip-address) inet-port)
+ s)
+ (else
+ (8sleep 1)
+ (irc-socket-setup hostname inet-port)))))
(define irc-eol "\r\n")
#f)))))
;;; A goofy default
-(define (echo-message irc-bot speaker channel-name
- line-text emote?)
- "Simply echoes the message to the current-output-port."
+(define* (echo-message irc-bot speaker channel-name
+ line-text emote? #:key (port (current-output-port)))
+ "Simply echoes the message to the PORT."
(if emote?
- (format #t "~a emoted ~s in channel ~a\n"
+ (format port "~a emoted ~s in channel ~a\n"
speaker line-text channel-name)
- (format #t "~a said ~s in channel ~a\n"
+ (format port "~a said ~s in channel ~a\n"
speaker line-text channel-name)))
\f
#:getter irc-bot-port)
(socket #:accessor irc-bot-socket)
(actions #:allocation #:each-subclass
- #:init-value (build-actions
+ #: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)
(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?)
- (echo-message 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?
+ #:port (current-error-port)))
(define-method (handle-misc-input (irc-bot <irc-bot>) raw-line)
(display raw-line)