minimart-2014/minimart/examples/ws-hello-ssl.rkt

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-local-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 ?)))))