1.3 The Code
1.3.3 Server
1.3.3.1 Sequence
1.3.3.2 Board
1.3.3.3 Places
1.3.3.4 Engine
1.3.3.5 Background
1.3.3.6 Draw
1.3.3.7 Setup
1.3.3.8 Agent
1.3.3.9 Interval
1.3.3.10 Dispatcher
1.3.3.11 TCP Server
8.14
1.3.3.11 TCP Server🔗

Source code at tcp-server.rkt

The TCP server listens on a TCP port. It starts a thread to process requests for each client that connects.

(define engine (setup-engine))

(define (process-client-request in out dispatcher)
  (let ([request (read in)])
    (unless (equal? request eof)
      (write (dispatcher engine request) out)
      (flush-output out)
      (process-client-request in out dispatcher))))
(define (run-server)
  (let ([listener (tcp-listen 8080 4 #f "localhost")])
    (define (listen)
      (let-values ([(in out) (tcp-accept listener)])
        (file-stream-buffer-mode in 'none)
        (thread
         (λ ()
           (process-client-request in out (make-dispatcher engine))
           (close-input-port in)
           (close-output-port out)))
        (listen)))
    (listen)))
(setup-server engine)
(run-server)