From 777cb541f780a36d92d38d443cc8763bcab2a93d Mon Sep 17 00:00:00 2001 From: Bruno Deferrari Date: Wed, 15 Apr 2009 00:03:25 -0300 Subject: [PATCH] irc.client: Calculate message forwards before processing it (because participants may be deleted from channels) --- extra/irc/client/internals/internals.factor | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/extra/irc/client/internals/internals.factor b/extra/irc/client/internals/internals.factor index 89c8423f51..5bae054e18 100644 --- a/extra/irc/client/internals/internals.factor +++ b/extra/irc/client/internals/internals.factor @@ -45,11 +45,11 @@ M: sequence chat-put [ chat-put ] with each ; ! Server message handling -GENERIC: forward-message ( irc-message -- ) -M: irc-message forward-message +server-chat+ chat-put ; -M: to-one-chat forward-message dup chat> chat-put ; -M: to-all-chats forward-message chats> chat-put ; -M: to-many-chats forward-message dup sender>> participant-chats chat-put ; +GENERIC: message-forwards ( irc-message -- seq ) +M: irc-message message-forwards drop +server-chat+ ; +M: to-one-chat message-forwards chat> ; +M: to-all-chats message-forwards drop chats> ; +M: to-many-chats message-forwards sender>> participant-chats ; GENERIC: process-message ( irc-message -- ) M: object process-message drop ; @@ -112,10 +112,13 @@ M: f handle-input handle-disconnect ; ! Processing loops -! FIXME: should get forward channels, process the message, and then forward : in-multiplexer-loop ( -- ? ) - irc> in-messages>> mailbox-get - [ forward-message ] [ process-message ] [ irc-end? not ] tri ; + irc> in-messages>> mailbox-get { + [ message-forwards ] + [ process-message ] + [ swap chat-put ] + [ irc-end? not ] + } cleave ; : strings>privmsg ( name string -- privmsg ) " :" prepend append "PRIVMSG " prepend string>irc-message ; -- 2.34.1