2015-06-25 13:52:47 -04:00
|
|
|
class Cable.Connection
|
2015-06-25 16:24:58 -04:00
|
|
|
constructor: (@consumer) ->
|
2015-06-26 10:24:29 -04:00
|
|
|
@open()
|
2015-06-25 10:21:53 -04:00
|
|
|
|
|
|
|
send: (data) ->
|
2015-06-26 10:24:29 -04:00
|
|
|
if @isOpen()
|
2015-06-25 10:21:53 -04:00
|
|
|
@websocket.send(JSON.stringify(data))
|
|
|
|
true
|
|
|
|
else
|
|
|
|
false
|
|
|
|
|
2015-06-27 13:13:44 -04:00
|
|
|
open: =>
|
2015-07-06 21:42:49 -04:00
|
|
|
return if @isState("open", "connecting")
|
2015-06-25 16:24:58 -04:00
|
|
|
@websocket = new WebSocket(@consumer.url)
|
2015-06-25 13:52:47 -04:00
|
|
|
@websocket.onmessage = @onMessage
|
2015-06-26 10:24:29 -04:00
|
|
|
@websocket.onopen = @onOpen
|
2015-06-25 13:52:47 -04:00
|
|
|
@websocket.onclose = @onClose
|
|
|
|
@websocket.onerror = @onError
|
|
|
|
|
2015-06-26 10:24:29 -04:00
|
|
|
close: ->
|
2015-07-06 21:42:49 -04:00
|
|
|
return if @isState("closed", "closing")
|
|
|
|
@websocket?.close()
|
2015-06-26 10:24:29 -04:00
|
|
|
|
|
|
|
reopen: ->
|
2015-07-06 21:42:49 -04:00
|
|
|
if @isOpen()
|
2015-06-27 13:13:44 -04:00
|
|
|
@websocket.onclose = @open
|
|
|
|
@websocket.onerror = @open
|
|
|
|
@websocket.close()
|
2015-07-06 21:42:49 -04:00
|
|
|
else
|
|
|
|
@open()
|
2015-06-26 10:24:29 -04:00
|
|
|
|
|
|
|
isOpen: ->
|
2015-07-06 21:42:49 -04:00
|
|
|
@isState("open")
|
|
|
|
|
|
|
|
isState: (states...) ->
|
|
|
|
@getState() in states
|
2015-06-26 10:24:29 -04:00
|
|
|
|
2015-07-06 21:42:49 -04:00
|
|
|
getState: ->
|
|
|
|
return state.toLowerCase() for state, value of WebSocket when value is @websocket?.readyState
|
|
|
|
null
|
2015-06-25 10:21:53 -04:00
|
|
|
|
|
|
|
onMessage: (message) =>
|
|
|
|
data = JSON.parse message.data
|
2015-06-25 16:24:58 -04:00
|
|
|
@consumer.subscribers.notify(data.identifier, "received", data.message)
|
2015-06-25 10:21:53 -04:00
|
|
|
|
2015-06-26 10:24:29 -04:00
|
|
|
onOpen: =>
|
2015-06-25 16:24:58 -04:00
|
|
|
@consumer.subscribers.reload()
|
2015-06-25 10:21:53 -04:00
|
|
|
|
|
|
|
onClose: =>
|
2015-06-25 13:52:47 -04:00
|
|
|
@disconnect()
|
2015-06-25 10:21:53 -04:00
|
|
|
|
|
|
|
onError: =>
|
2015-06-25 13:52:47 -04:00
|
|
|
@disconnect()
|
2015-06-26 10:24:29 -04:00
|
|
|
@websocket.onclose = -> # no-op
|
|
|
|
@websocket.onerror = -> # no-op
|
|
|
|
try @close()
|
2015-06-25 10:21:53 -04:00
|
|
|
|
|
|
|
disconnect: ->
|
2015-06-25 16:24:58 -04:00
|
|
|
@consumer.subscribers.notifyAll("disconnected")
|