33 lines
781 B
Racket
33 lines
781 B
Racket
#lang racket/base
|
|
|
|
(define (listener port)
|
|
(transition 'no-state
|
|
(role/anon (tcp-listener port)
|
|
#:topic t
|
|
#:on-presence (spawn (connection-handler t)))))
|
|
|
|
(define (connection-handler t)
|
|
(define-values (cin cout in-topic out-topic) (tcp-accept t))
|
|
(transition 'no-state
|
|
(cin (tcp-credit 1))
|
|
(role/anon in-topic
|
|
[(tcp-channel _ _ (or (== #"\4") (? eof-object?)))
|
|
(kill)]
|
|
[(tcp-channel _ _ bytev)
|
|
(list (cin (tcp-credit 1))
|
|
(cout bytev))])))
|
|
|
|
(define (main port)
|
|
(ground-vm
|
|
(transition 'no-state
|
|
(spawn tcp-driver)
|
|
(spawn (listener port)))))
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(main 5999)
|
|
|
|
(require racket/match)
|
|
(require "../os2.rkt")
|
|
(require "../fake-tcp.rkt")
|