syndicate-2017/racket/syndicate-monolithic/examples/echo.rkt

25 lines
1.1 KiB
Racket

#lang syndicate-monolithic
(require "../drivers/tcp.rkt")
(require "../demand-matcher.rkt")
(define server-id (tcp-listener 5999))
(spawn-tcp-driver)
(spawn-demand-matcher (advertise (tcp-channel (?!) server-id ?))
(observe (tcp-channel (?!) server-id ?))
(lambda (c)
(printf "Accepted connection from ~v\n" c)
(spawn (lambda (e state)
(match e
[(scn (? trie-empty?))
(printf "Closed connection ~v\n" c)
(quit)]
[(message (tcp-channel src dst bs))
(transition state (message (tcp-channel dst src bs)))]
[_ #f]))
(void)
(scn/union (subscription (advertise (tcp-channel c server-id ?)))
(subscription (tcp-channel c server-id ?))
(advertisement (tcp-channel server-id c ?))))))