Position Independent Source Code

Hex Artifact Content
Login

Artifact 40ff8ca3998d3add735a426d14e54caede5e1876:


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                                         ! ;