aboutsummaryrefslogtreecommitdiffstats
path: root/lib/assets/javascripts/cable
diff options
context:
space:
mode:
authorJavan Makhmali <javan@javan.us>2015-07-06 21:42:49 -0400
committerJavan Makhmali <javan@javan.us>2015-07-06 21:42:49 -0400
commitf2542cd417e8ef753988c073a90a46bade5ef455 (patch)
treef44e24f02d1fdc65049319b65a792942a3200683 /lib/assets/javascripts/cable
parentc811bed8e1fd67869452acb4818c3264e82d627c (diff)
downloadrails-f2542cd417e8ef753988c073a90a46bade5ef455.tar.gz
rails-f2542cd417e8ef753988c073a90a46bade5ef455.tar.bz2
rails-f2542cd417e8ef753988c073a90a46bade5ef455.zip
Guard against opening multiple WebSocket connections
Diffstat (limited to 'lib/assets/javascripts/cable')
-rw-r--r--lib/assets/javascripts/cable/connection.js.coffee20
1 files changed, 13 insertions, 7 deletions
diff --git a/lib/assets/javascripts/cable/connection.js.coffee b/lib/assets/javascripts/cable/connection.js.coffee
index 4f7d2abada..530a589e87 100644
--- a/lib/assets/javascripts/cable/connection.js.coffee
+++ b/lib/assets/javascripts/cable/connection.js.coffee
@@ -10,6 +10,7 @@ class Cable.Connection
false
open: =>
+ return if @isState("open", "connecting")
@websocket = new WebSocket(@consumer.url)
@websocket.onmessage = @onMessage
@websocket.onopen = @onOpen
@@ -17,21 +18,26 @@ class Cable.Connection
@websocket.onerror = @onError
close: ->
- @websocket.close() unless @isClosed()
+ return if @isState("closed", "closing")
+ @websocket?.close()
reopen: ->
- if @isClosed()
- @open()
- else
+ if @isOpen()
@websocket.onclose = @open
@websocket.onerror = @open
@websocket.close()
+ else
+ @open()
isOpen: ->
- @websocket.readyState is WebSocket.OPEN
+ @isState("open")
+
+ isState: (states...) ->
+ @getState() in states
- isClosed: ->
- @websocket.readyState in [ WebSocket.CLOSED, WebSocket.CLOSING ]
+ getState: ->
+ return state.toLowerCase() for state, value of WebSocket when value is @websocket?.readyState
+ null
onMessage: (message) =>
data = JSON.parse message.data