37 lines
1.2 KiB
Racket
37 lines
1.2 KiB
Racket
#lang minimart
|
|
|
|
(require "../drivers/websocket.rkt")
|
|
(require "../demand-matcher.rkt")
|
|
|
|
(spawn-websocket-driver)
|
|
|
|
(define any-client (websocket-remote-client ?))
|
|
(define server-id (websocket-server 8081 (websocket-ssl-options "server-cert.pem"
|
|
"private-key.pem")))
|
|
|
|
(spawn-demand-matcher (websocket-message any-client server-id ?)
|
|
#:demand-is-subscription? #f
|
|
(match-lambda ;; arrived-demand-route, i.e. new connection publisher
|
|
[(route _ (websocket-message c _ _) _ _)
|
|
(spawn-connection-handler c)]
|
|
[_ '()])
|
|
(lambda (departed-supply-route)
|
|
(log-info "Connection handler decided to exit")
|
|
'()))
|
|
|
|
(define (spawn-connection-handler c)
|
|
(log-info "spawn-connection-handler ~v" c)
|
|
(define (connection-handler e n)
|
|
(when e (log-info "connection-handler ~v: ~v /// ~v" c e n))
|
|
(match e
|
|
[(routing-update '()) (transition n (quit))]
|
|
[_
|
|
(if (< n 20)
|
|
(transition (+ n 1) (send (websocket-message server-id c (format "msg ~v" n))))
|
|
#f)]))
|
|
(spawn connection-handler
|
|
0
|
|
(list (sub (websocket-message c server-id ?))
|
|
(sub (websocket-message c server-id ?) #:level 1)
|
|
(pub (websocket-message server-id c ?)))))
|