Artifact 40ff8ca3998d3add735a426d14e54caede5e1876:
- File
ircbasics.pisc
— part of check-in
[8eb7e557c3]
at
2017-05-04 04:17:29
on branch trunk
— Split the ping/pong server into ircbasics, started work on irckit to allow for basic evented servers
(user:
yumaikas
0000: 0a 3a 20 68 61 6e 64 6c 65 2d 70 69 6e 67 20 28 .: handle-ping (
0010: 20 63 6f 6e 6e 20 6d 65 73 73 61 67 65 20 2d 2d conn message --
0020: 20 77 61 73 2d 70 69 6e 67 20 29 20 0a 09 3a 6d was-ping ) ..:m
0030: 73 67 20 3a 63 6f 6e 6e 0a 09 24 6d 73 67 20 22 sg :conn..$msg "
0040: 50 49 4e 47 22 20 73 74 72 2d 63 6f 6e 74 61 69 PING" str-contai
0050: 6e 73 20 3a 77 61 73 2d 70 69 6e 67 0a 09 24 77 ns :was-ping..$w
0060: 61 73 2d 70 69 6e 67 20 5b 0a 09 09 24 6d 73 67 as-ping [...$msg
0070: 20 22 20 22 20 73 74 72 2d 73 70 6c 69 74 20 31 " " str-split 1
0080: 20 76 65 63 2d 61 74 20 3a 72 65 73 70 2d 6b 65 vec-at :resp-ke
0090: 79 0a 09 09 24 7b 20 22 50 4f 4e 47 20 3a 22 20 y...${ "PONG :"
00a0: 24 72 65 73 70 2d 6b 65 79 20 7d 20 3a 72 65 73 $resp-key } :res
00b0: 70 20 0a 09 09 24 72 65 73 70 20 24 63 6f 6e 6e p ...$resp $conn
00c0: 20 2e 73 65 6e 64 2d 6d 65 73 73 61 67 65 0a 09 .send-message..
00d0: 5d 20 77 68 65 6e 0a 09 24 77 61 73 2d 70 69 6e ] when..$was-pin
00e0: 67 0a 3b 0a 0a 3a 20 69 72 63 2d 70 6f 6e 67 2d g.;..: irc-pong-
00f0: 73 65 72 76 65 72 21 20 28 20 61 64 64 72 20 2d server! ( addr -
0100: 2d 20 29 0a 09 3a 61 64 64 72 0a 09 22 42 65 66 - )..:addr.."Bef
0110: 6f 72 65 20 74 72 79 69 6e 67 20 74 6f 20 63 6f ore trying to co
0120: 6e 6e 65 63 74 22 20 70 72 69 6e 74 6c 6e 0a 09 nnect" println..
0130: 24 61 64 64 72 20 69 72 63 2d 64 69 61 6c 20 3a $addr irc-dial :
0140: 63 6f 6e 6e 0a 0a 09 2f 2a 20 47 65 74 20 74 68 conn.../* Get th
0150: 65 20 73 65 72 76 65 72 20 4d 4f 54 44 20 61 6e e server MOTD an
0160: 64 20 74 68 65 20 6c 69 6b 65 20 2a 2f 0a 09 22 d the like */.."
0170: 50 41 53 53 20 30 22 20 24 63 6f 6e 6e 20 2e 73 PASS 0" $conn .s
0180: 65 6e 64 2d 6d 65 73 73 61 67 65 0a 09 22 4e 49 end-message.."NI
0190: 43 4b 20 70 69 73 63 62 6f 74 22 20 24 63 6f 6e CK piscbot" $con
01a0: 6e 20 2e 73 65 6e 64 2d 6d 65 73 73 61 67 65 0a n .send-message.
01b0: 09 24 63 6f 6e 6e 20 64 75 70 20 2e 72 65 63 69 .$conn dup .reci
01c0: 65 76 65 2d 6d 65 73 73 61 67 65 20 68 61 6e 64 eve-message hand
01d0: 6c 65 2d 70 69 6e 67 0a 09 22 55 53 45 52 20 70 le-ping.."USER p
01e0: 69 73 63 62 6f 74 20 70 69 73 63 62 6f 74 20 69 iscbot piscbot i
01f0: 20 3a 70 69 73 63 62 6f 74 22 20 24 63 6f 6e 6e :piscbot" $conn
0200: 20 2e 73 65 6e 64 2d 6d 65 73 73 61 67 65 0a 09 .send-message..
0210: 24 63 6f 6e 6e 20 64 75 70 20 2e 72 65 63 69 65 $conn dup .recie
0220: 76 65 2d 6d 65 73 73 61 67 65 20 68 61 6e 64 6c ve-message handl
0230: 65 2d 70 69 6e 67 0a 0a 09 74 20 3a 72 65 61 64 e-ping...t :read
0240: 69 6e 67 2d 6d 6f 74 64 0a 09 5b 20 24 72 65 61 ing-motd..[ $rea
0250: 64 69 6e 67 2d 6d 6f 74 64 20 5d 20 5b 0a 09 09 ding-motd ] [...
0260: 24 63 6f 6e 6e 20 2e 72 65 63 69 65 76 65 2d 6d $conn .recieve-m
0270: 65 73 73 61 67 65 20 3a 6d 73 67 0a 09 09 24 6d essage :msg...$m
0280: 73 67 20 70 72 69 6e 74 6c 6e 0a 09 09 2f 2a 20 sg println.../*
0290: 57 61 69 74 69 6e 67 20 66 6f 72 20 61 20 4d 4f Waiting for a MO
02a0: 44 45 20 63 6f 6d 6d 61 6e 64 20 73 6f 20 77 65 DE command so we
02b0: 20 6b 6e 6f 77 20 74 68 61 74 20 4d 4f 54 44 20 know that MOTD
02c0: 68 61 73 20 62 65 65 6e 20 66 69 6e 69 73 68 65 has been finishe
02d0: 64 20 2a 2f 0a 09 09 24 6d 73 67 20 22 4d 4f 44 d */...$msg "MOD
02e0: 45 22 20 73 74 72 2d 63 6f 6e 74 61 69 6e 73 20 E" str-contains
02f0: 6e 6f 74 20 3a 72 65 61 64 69 6e 67 2d 6d 6f 74 not :reading-mot
0300: 64 0a 09 5d 20 77 68 69 6c 65 0a 0a 09 22 4a 4f d..] while..."JO
0310: 49 4e 20 23 62 6f 74 77 61 72 73 22 20 24 63 6f IN #botwars" $co
0320: 6e 6e 20 2e 73 65 6e 64 2d 6d 65 73 73 61 67 65 nn .send-message
0330: 0a 0a 09 5b 20 74 20 5d 20 5b 0a 09 09 22 41 77 ...[ t ] [..."Aw
0340: 61 69 74 69 6e 67 20 61 20 6d 65 73 73 61 67 65 aiting a message
0350: 22 20 70 72 69 6e 74 6c 6e 0a 09 09 09 24 63 6f " println....$co
0360: 6e 6e 20 2e 72 65 63 69 65 76 65 2d 6d 65 73 73 nn .recieve-mess
0370: 61 67 65 20 3a 6d 73 67 0a 09 09 09 24 6d 73 67 age :msg....$msg
0380: 20 70 72 69 6e 74 6c 6e 0a 09 09 5b 0a 0a 09 09 println...[....
0390: 09 24 63 6f 6e 6e 20 24 6d 73 67 20 68 61 6e 64 .$conn $msg hand
03a0: 6c 65 2d 70 69 6e 67 20 6e 6f 74 20 5b 0a 09 09 le-ping not [...
03b0: 09 09 24 6d 73 67 20 70 72 69 6e 74 6c 6e 0a 09 ..$msg println..
03c0: 09 09 09 24 6d 73 67 20 22 21 70 69 6e 67 22 20 ...$msg "!ping"
03d0: 73 74 72 2d 63 6f 6e 74 61 69 6e 73 20 5b 0a 09 str-contains [..
03e0: 09 09 09 09 22 50 52 49 56 4d 53 47 20 23 62 6f ...."PRIVMSG #bo
03f0: 74 77 61 72 73 20 3a 70 6f 6e 67 21 22 20 24 63 twars :pong!" $c
0400: 6f 6e 6e 20 2e 73 65 6e 64 2d 6d 65 73 73 61 67 onn .send-messag
0410: 65 0a 09 09 09 09 5d 20 77 68 65 6e 0a 09 09 09 e.....] when....
0420: 5d 20 77 68 65 6e 0a 09 09 5d 20 74 69 6d 65 20 ] when...] time
0430: 70 72 69 6e 74 6c 6e 0a 09 5d 20 77 68 69 6c 65 println..] while
0440: 0a 09 24 63 6f 6e 6e 20 2e 63 6c 6f 73 65 0a 3b ..$conn .close.;
0450: 0a 0a 3a 20 66 72 65 65 6e 6f 64 65 2d 70 6f 6e ..: freenode-pon
0460: 67 2d 73 65 72 76 65 72 20 28 20 2d 2d 20 29 20 g-server ( -- )
0470: 22 69 72 63 2e 66 72 65 65 6e 6f 64 65 2e 63 6f "irc.freenode.co
0480: 6d 3a 36 36 36 37 22 20 69 72 63 2d 70 6f 6e 67 m:6667" irc-pong
0490: 2d 73 65 72 76 65 72 21 20 3b 0a 3a 20 61 66 74 -server! ;.: aft
04a0: 65 72 6e 65 74 2d 70 6f 6e 67 2d 73 65 72 76 65 ernet-pong-serve
04b0: 72 20 28 20 2d 2d 20 29 20 22 69 72 63 2e 61 66 r ( -- ) "irc.af
04c0: 74 65 72 6e 65 74 2e 6f 72 67 3a 36 36 36 37 22 ternet.org:6667"
04d0: 20 69 72 63 2d 70 6f 6e 67 2d 73 65 72 76 65 72 irc-pong-server
04e0: 21 20 3b ! ;