From 9323b899d930107f9f4779c707e17e5dc43c5de4 Mon Sep 17 00:00:00 2001 From: Andrew Guschin Date: Sun, 5 Nov 2023 16:21:12 +0400 Subject: =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D1=8B=20=D0=BD=D0=B0=20?= =?UTF-8?q?racket?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- racket/chat.rkt | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 racket/chat.rkt (limited to 'racket/chat.rkt') diff --git a/racket/chat.rkt b/racket/chat.rkt new file mode 100644 index 0000000..012fe62 --- /dev/null +++ b/racket/chat.rkt @@ -0,0 +1,35 @@ +#lang racket +(require racket/tcp) + +(define outs '()) + +(define (write-all data out) + (for-each + (lambda (o) + (cond [(not (eq? o out)) (displayln data o)])) + outs)) + +(define (worker in out) + (define (loop msg) + (if (equal? msg eof) + (begin (close-input-port in) + (close-output-port out) + (set! outs (remove out outs))) + (let ([data (read-line in)]) + (displayln data) + (write-all (string-append ">>> " data) out) + (loop data)))) + (loop 'y)) + +(define (listener sock) + (define-values (in-conn out-conn) (tcp-accept sock)) + (file-stream-buffer-mode in-conn 'none) + (file-stream-buffer-mode out-conn 'none) + (thread (lambda () (worker in-conn out-conn))) + (set! outs (cons out-conn outs)) + (writeln (length outs)) + (listener sock)) + +(define sock (tcp-listen 1678 4 #t)) +(listener sock) +(tcp-close sock) \ No newline at end of file -- cgit v1.2.3