Guest User

Untitled

a guest
Feb 19th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 1.89 KB | None | 0 0
  1. #lang racket
  2.  
  3. ;;irc-connect : string number string string string -> port port
  4. ;;connects to an IRC network and returns the input and output ports for that irc connection.
  5. (define (irc-connect server port nickname username realname)
  6.   (call-with-values (λ () (tcp-connect server port))
  7.                     (λ arguments
  8.                       (begin
  9.                         (let ([in (first arguments)] [out (second arguments)])
  10.                           (display (format "NICK ~a\r\n" nickname) out)
  11.                           (display (format "USER ~a 8 * ~a\r\n" username realname) out)
  12.                           (flush-output out)
  13.                           (values in out))))))
  14. ;;rirc : ->
  15. ;;a very rudimentary IRC client. Requires the user to manually send rawlines, including ping responses.
  16. (define rirc
  17.   (local [(define (irc-send out)
  18.             (display (string-append (read-line) "\r\n") out)
  19.             (flush-output out)
  20.             (irc-send out))
  21.          
  22.           (define (print-from-port port)
  23.             (let ([nextchar (read-char port)])
  24.               (if (eof-object? nextchar) (error "disconnected")
  25.                   (begin
  26.                     (printf (if (char=? #\~ nextchar)
  27.                                 "~~"
  28.                                 (string nextchar)))
  29.                     (print-from-port port)))))
  30.          
  31.           (define (handler in out)
  32.             (thread (λ () (print-from-port in)))
  33.             (irc-send out))]
  34.    
  35.     (let ([network (begin (printf "Network:~n") (read-line))]
  36.           [port (begin (printf "Port:~n") (string->number (read-line)))]
  37.           [nickname (begin (printf "Nickname:~n") (read-line))]
  38.           [username (begin (printf "Username:~n") (read-line))]
  39.           [realname (begin (printf "Real name:~n") (read-line))])
  40.       (call-with-values (λ () (irc-connect network port nickname username realname)) handler))))
Add Comment
Please, Sign In to add comment