►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)