Correctly distinguish when multiple listeners exist
This commit is contained in:
parent
eca3e9ded0
commit
4370cb72a4
|
@ -28,7 +28,7 @@
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Ground-level communication messages
|
;; Ground-level communication messages
|
||||||
|
|
||||||
(struct websocket-accepted (id connection control-ch) #:prefab)
|
(struct websocket-accepted (id server-addr connection control-ch) #:prefab)
|
||||||
(struct websocket-incoming-message (id message) #:prefab)
|
(struct websocket-incoming-message (id message) #:prefab)
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
@ -54,16 +54,16 @@
|
||||||
(begin (when shutdown-procedure (shutdown-procedure))
|
(begin (when shutdown-procedure (shutdown-procedure))
|
||||||
(transition (struct-copy listener-state state [shutdown-procedure #f]) (quit)))
|
(transition (struct-copy listener-state state [shutdown-procedure #f]) (quit)))
|
||||||
#f)]
|
#f)]
|
||||||
[(message (websocket-accepted id c control-ch) 1 #f)
|
[(message (websocket-accepted id _ c control-ch) 1 #f)
|
||||||
(transition state
|
(transition state
|
||||||
(spawn-connection (listener-state-server-addr state) id c control-ch))]
|
(spawn-connection (listener-state-server-addr state) id c control-ch))]
|
||||||
[_ #f]))
|
[_ #f]))
|
||||||
|
|
||||||
(define (connection-handler c dummy-state)
|
(define ((connection-handler server-addr) c dummy-state)
|
||||||
(define control-ch (make-channel))
|
(define control-ch (make-channel))
|
||||||
(define c-input-port (ws-conn-base-ip c))
|
(define c-input-port (ws-conn-base-ip c))
|
||||||
(define id (gensym 'ws))
|
(define id (gensym 'ws))
|
||||||
(send-ground-message (websocket-accepted id c control-ch))
|
(send-ground-message (websocket-accepted id server-addr c control-ch))
|
||||||
(let loop ((blocked? #t))
|
(let loop ((blocked? #t))
|
||||||
(sync (handle-evt control-ch
|
(sync (handle-evt control-ch
|
||||||
(match-lambda
|
(match-lambda
|
||||||
|
@ -92,11 +92,11 @@
|
||||||
#:tcp@ (if ssl-options
|
#:tcp@ (if ssl-options
|
||||||
(ssl-options->ssl-tcp@ ssl-options)
|
(ssl-options->ssl-tcp@ ssl-options)
|
||||||
tcp@)
|
tcp@)
|
||||||
connection-handler))
|
(connection-handler server-addr)))
|
||||||
(spawn websocket-listener
|
(spawn websocket-listener
|
||||||
(listener-state shutdown-procedure server-addr)
|
(listener-state shutdown-procedure server-addr)
|
||||||
(gestalt-union (pub (websocket-message ? server-addr ?) #:level 2)
|
(gestalt-union (pub (websocket-message ? server-addr ?) #:level 2)
|
||||||
(sub (websocket-accepted ? ? ?) #:meta-level 1))))
|
(sub (websocket-accepted ? server-addr ? ?) #:meta-level 1))))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;; Connection
|
;; Connection
|
||||||
|
|
Loading…
Reference in New Issue