Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #lang racket
- ;;irc-connect : string number string string string -> port port
- ;;connects to an IRC network and returns the input and output ports for that irc connection.
- (define (irc-connect server port nickname username realname)
- (call-with-values (λ () (tcp-connect server port))
- (λ arguments
- (begin
- (let ([in (first arguments)] [out (second arguments)])
- (display (format "NICK ~a\r\n" nickname) out)
- (display (format "USER ~a 8 * ~a\r\n" username realname) out)
- (flush-output out)
- (values in out))))))
- ;;rirc : ->
- ;;a very rudimentary IRC client. Requires the user to manually send rawlines, including ping responses.
- (define rirc
- (local [(define (irc-send out)
- (display (string-append (read-line) "\r\n") out)
- (flush-output out)
- (irc-send out))
- (define (print-from-port port)
- (let ([nextchar (read-char port)])
- (if (eof-object? nextchar) (error "disconnected")
- (begin
- (printf (if (char=? #\~ nextchar)
- "~~"
- (string nextchar)))
- (print-from-port port)))))
- (define (handler in out)
- (thread (λ () (print-from-port in)))
- (irc-send out))]
- (let ([network (begin (printf "Network:~n") (read-line))]
- [port (begin (printf "Port:~n") (string->number (read-line)))]
- [nickname (begin (printf "Nickname:~n") (read-line))]
- [username (begin (printf "Username:~n") (read-line))]
- [realname (begin (printf "Real name:~n") (read-line))])
- (call-with-values (λ () (irc-connect network port nickname username realname)) handler))))
Add Comment
Please, Sign In to add comment