53 lines
1.6 KiB
Factor
53 lines
1.6 KiB
Factor
! Copyright (C) 2009 Bruno Deferrari
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: accessors concurrency.mailboxes kernel calendar io.sockets
|
|
destructors arrays sequences io.encodings.8-bit.latin1 ;
|
|
IN: irc.client.chats
|
|
|
|
CONSTANT: irc-port 6667 ! Default irc port
|
|
|
|
TUPLE: irc-chat in-messages client ;
|
|
TUPLE: irc-server-chat < irc-chat ;
|
|
TUPLE: irc-channel-chat < irc-chat name password participants clear-participants ;
|
|
TUPLE: irc-nick-chat < irc-chat name ;
|
|
SYMBOL: +server-chat+
|
|
|
|
: <irc-server-chat> ( -- irc-server-chat )
|
|
irc-server-chat new
|
|
<mailbox> >>in-messages ;
|
|
|
|
: <irc-channel-chat> ( name -- irc-channel-chat )
|
|
irc-channel-chat new
|
|
swap >>name
|
|
<mailbox> >>in-messages
|
|
f >>password
|
|
H{ } clone >>participants
|
|
t >>clear-participants ;
|
|
|
|
: <irc-nick-chat> ( name -- irc-nick-chat )
|
|
irc-nick-chat new
|
|
swap >>name
|
|
<mailbox> >>in-messages ;
|
|
|
|
TUPLE: irc-profile server port nickname password ;
|
|
C: <irc-profile> irc-profile
|
|
|
|
TUPLE: irc-client profile stream in-messages out-messages
|
|
chats is-running nick connect is-ready
|
|
reconnect-time reconnect-attempts
|
|
exceptions ;
|
|
|
|
: <irc-client> ( profile -- irc-client )
|
|
dup nickname>> irc-client new
|
|
swap >>nick
|
|
swap >>profile
|
|
<mailbox> >>in-messages
|
|
<mailbox> >>out-messages
|
|
H{ } clone >>chats
|
|
30 seconds >>reconnect-time
|
|
10 >>reconnect-attempts
|
|
V{ } clone >>exceptions
|
|
[ <inet> latin1 <client> drop ] >>connect ;
|
|
|
|
SINGLETONS: irc-chat-end irc-end irc-disconnected irc-connected ;
|