]> gitweb.factorcode.org Git - factor.git/commitdiff
irc.client: Calculate message forwards before processing it (because participants...
authorBruno Deferrari <utizoc@gmail.com>
Wed, 15 Apr 2009 03:03:25 +0000 (00:03 -0300)
committerBruno Deferrari <utizoc@gmail.com>
Wed, 15 Apr 2009 03:03:25 +0000 (00:03 -0300)
extra/irc/client/internals/internals.factor

index 89c8423f512ccb95f49310a848dd47a77bc5fcde..5bae054e1836cc13adfd0e28d04787b13ab8d575 100644 (file)
@@ -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 ;