Skip to content

Commit

Permalink
make devtools ws connect async and catch errors during setup
Browse files Browse the repository at this point in the history
  • Loading branch information
thheller committed Jul 23, 2018
1 parent e315a4f commit a6a7040
Showing 1 changed file with 50 additions and 48 deletions.
98 changes: 50 additions & 48 deletions src/main/shadow/cljs/devtools/client/browser.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -311,53 +311,55 @@


(defn ws-connect []
(let [print-fn
cljs.core/*print-fn*

ws-url
(env/ws-url :browser)

socket
(js/WebSocket. ws-url)]

(vreset! socket-ref socket)

(set! (.-onmessage socket)
(fn [e]
(env/process-ws-msg (. e -data) handle-message)
))

(set! (.-onopen socket)
(fn [e]
(hud/connection-error-clear!)
(vreset! close-reason-ref nil)
;; :module-format :js already patches provide
(when (= "goog" env/module-format)
;; patch away the already declared exception
(set! (.-provide js/goog) js/goog.constructNamespace_))

(env/set-print-fns! ws-msg)

(devtools-msg "WebSocket connected!")
))

(set! (.-onclose socket)
(fn [e]
;; not a big fan of reconnecting automatically since a disconnect
;; may signal a change of config, safer to just reload the page
(devtools-msg "WebSocket disconnected!")
(hud/connection-error (or @close-reason-ref "Connection closed!"))
(vreset! socket-ref nil)
(env/reset-print-fns!)
))

(set! (.-onerror socket)
(fn [e]
(hud/connection-error "Connection failed!")
(devtools-msg "websocket error" e)))

(js/setTimeout heartbeat! 30000)
))
(try
(let [print-fn
cljs.core/*print-fn*

ws-url
(env/ws-url :browser)

socket
(js/WebSocket. ws-url)]

(vreset! socket-ref socket)

(set! (.-onmessage socket)
(fn [e]
(env/process-ws-msg (. e -data) handle-message)
))

(set! (.-onopen socket)
(fn [e]
(hud/connection-error-clear!)
(vreset! close-reason-ref nil)
;; :module-format :js already patches provide
(when (= "goog" env/module-format)
;; patch away the already declared exception
(set! (.-provide js/goog) js/goog.constructNamespace_))

(env/set-print-fns! ws-msg)

(devtools-msg "WebSocket connected!")
))

(set! (.-onclose socket)
(fn [e]
;; not a big fan of reconnecting automatically since a disconnect
;; may signal a change of config, safer to just reload the page
(devtools-msg "WebSocket disconnected!")
(hud/connection-error (or @close-reason-ref "Connection closed!"))
(vreset! socket-ref nil)
(env/reset-print-fns!)
))

(set! (.-onerror socket)
(fn [e]
(hud/connection-error "Connection failed!")
(devtools-msg "websocket error" e)))

(js/setTimeout heartbeat! 30000))
(catch :default e
(devtools-msg "WebSocket setup failed" e))))

(when ^boolean env/enabled
;; disconnect an already connected socket, happens if this file is reloaded
Expand All @@ -376,4 +378,4 @@
(when-let [s @socket-ref]
(.close s))))

(ws-connect))
(js/setTimeout ws-connect 10))

0 comments on commit a6a7040

Please sign in to comment.