(use nanomsg srfi-18 extras matchable parley) (define socket #f) (define nick #f) (define recv (make-thread (lambda () (let loop () (let ((message (nn-recv socket))) (printf "\r~a\n> " message) (loop)))))) ;; non-blocking (define stdin (make-parley-port (current-input-port) prompt: "> ")) (define (send) (let loop () (let ((message (read-line stdin))) (when (string? message) (nn-send socket (format "~a: ~a" nick message)) (loop))))) (define (chat name url) (set! socket (nn-socket 'pair)) (set! nick name) (if (eqv? name 'allan) (nn-bind socket url) (nn-connect socket url)) (thread-start! recv) (send) (nn-close socket)) (define (main) (when (not (= (length (command-line-arguments)) 2)) (printf "~a: \n" (car (argv))) (exit 1)) (match-let (((target url) (command-line-arguments))) (case (string->symbol target) ((allan) (chat 'allan url)) ((bob) (chat 'bob url)) (else (print "Incorrect target") (exit 1))))) (main)