syndicate-2017/racket/prospect-monolithic/examples/ws-hello.rkt

33 lines
1.1 KiB
Racket

#lang prospect-monolithic
(require "../drivers/websocket.rkt")
(require "../demand-matcher.rkt")
(spawn-websocket-driver)
(define any-client (websocket-remote-client ?))
(define server-id (websocket-local-server 8081 #f))
(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
[(scn (? trie-empty?)) (quit)]
[_
(if (< n 20)
(transition (+ n 1) (message (websocket-message server-id c (format "msg ~v" n))))
#f)]))
(spawn connection-handler
0
(scn/union (subscription (advertise (websocket-message c server-id ?)))
(subscription (websocket-message c server-id ?))
(advertisement (websocket-message server-id c ?)))))
(spawn-demand-matcher (advertise (websocket-message (?! any-client) server-id ?))
(observe (websocket-message (?! any-client) server-id ?))
spawn-connection-handler
(lambda (c)
(log-info "Connection handler ~v decided to exit" c)
'()))