From b380c9ca64fb77a8a2ac4274bf8904287946aa77 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Tue, 12 Aug 2014 16:20:39 -0700 Subject: [PATCH] Buffer outbound messages while waiting for connection --- minimart/drivers/websocket.rkt | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/minimart/drivers/websocket.rkt b/minimart/drivers/websocket.rkt index 90c36b1..0d294db 100644 --- a/minimart/drivers/websocket.rkt +++ b/minimart/drivers/websocket.rkt @@ -126,10 +126,17 @@ (websocket-connection id local-addr remote-addr c control-ch)) (when (not (exn? c)) (connection-thread-loop control-ch c id)))) - (actor (subscribe (websocket-connection id local-addr remote-addr ($ c) control-ch) + (actor #:state [buffered-messages-rev '()] + + (subscribe (websocket-connection id local-addr remote-addr ($ c) control-ch) #:meta-level 1 - (list (when (not (exn? c)) (spawn-connection local-addr remote-addr id c control-ch)) - (quit))))) + (list (when (not (exn? c)) + (for [(m (reverse buffered-messages-rev))] (ws-send! c m)) + (spawn-connection local-addr remote-addr id c control-ch)) + (quit))) + + (subscribe (websocket-message local-addr remote-addr ($ m)) + #:update [buffered-messages-rev (cons m buffered-messages-rev)]))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Connection