diff --git a/lib/assets/javascripts/cable.js.coffee b/lib/assets/javascripts/cable.js.coffee index fad5aa05d39956f24a6463c59bac59f58ce959fc..0bd1757505bb4001a78507af28ee4b129e8d1585 100644 --- a/lib/assets/javascripts/cable.js.coffee +++ b/lib/assets/javascripts/cable.js.coffee @@ -1,19 +1,8 @@ #= require_self -#= require cable/subscriber_manager -#= require cable/connection -#= require cable/subscription +#= require cable/consumer -class @Cable - @PING_IDENTIFIER: "_ping" +@Cable = + PING_IDENTIFIER: "_ping" - constructor: (@url) -> - @subscribers = new Cable.SubscriberManager this - @connection = new Cable.Connection this - - createSubscription: (channelName, mixin) -> - channel = channelName - params = if typeof channel is "object" then channel else {channel} - new Cable.Subscription this, params, mixin - - send: (data) -> - @connection.send(data) + createConsumer: (url) -> + new Cable.Consumer url diff --git a/lib/assets/javascripts/cable/connection.js.coffee b/lib/assets/javascripts/cable/connection.js.coffee index 096dd519f7fee373ac3d5d4f0b33bf9c04d53aa5..6ee28fcb7566139167f793036c7cf85df9f45aeb 100644 --- a/lib/assets/javascripts/cable/connection.js.coffee +++ b/lib/assets/javascripts/cable/connection.js.coffee @@ -1,8 +1,8 @@ #= require cable/connection_monitor class Cable.Connection - constructor: (@cable) -> - new Cable.ConnectionMonitor @cable + constructor: (@consumer) -> + new Cable.ConnectionMonitor @consumer @connect() send: (data) -> @@ -17,7 +17,7 @@ class Cable.Connection @createWebSocket() createWebSocket: -> - @websocket = new WebSocket(@cable.url) + @websocket = new WebSocket(@consumer.url) @websocket.onmessage = @onMessage @websocket.onopen = @onConnect @websocket.onclose = @onClose @@ -33,10 +33,10 @@ class Cable.Connection onMessage: (message) => data = JSON.parse message.data - @cable.subscribers.notify(data.identifier, "received", data.message) + @consumer.subscribers.notify(data.identifier, "received", data.message) onConnect: => - @cable.subscribers.reload() + @consumer.subscribers.reload() onClose: => @disconnect() @@ -48,5 +48,5 @@ class Cable.Connection @websocket?.readyState is 1 disconnect: -> - @cable.subscribers.notifyAll("disconnected") + @consumer.subscribers.notifyAll("disconnected") @removeWebsocket() diff --git a/lib/assets/javascripts/cable/connection_monitor.js.coffee b/lib/assets/javascripts/cable/connection_monitor.js.coffee index 078e1d3b26898f38bef107357fc80a5a9ff77c5d..cf36b2a4570428d2c4773b0a0b2b85c091eeae53 100644 --- a/lib/assets/javascripts/cable/connection_monitor.js.coffee +++ b/lib/assets/javascripts/cable/connection_monitor.js.coffee @@ -4,9 +4,9 @@ class Cable.ConnectionMonitor identifier: Cable.PING_IDENTIFIER - constructor: (@cable) -> + constructor: (@consumer) -> @reset() - @cable.subscribers.add(this) + @consumer.subscribers.add(this) @pollConnection() connected: -> @@ -35,7 +35,7 @@ class Cable.ConnectionMonitor reconnect: -> console.log "Ping took too long to arrive. Reconnecting.." @connectionAttempts += 1 - @cable.connection.connect() + @consumer.connection.connect() now = -> new Date().getTime() diff --git a/lib/assets/javascripts/cable/consumer.js.coffee b/lib/assets/javascripts/cable/consumer.js.coffee new file mode 100644 index 0000000000000000000000000000000000000000..a9abd6256a0054ef289c63bc3c60350ab62d47e1 --- /dev/null +++ b/lib/assets/javascripts/cable/consumer.js.coffee @@ -0,0 +1,16 @@ +#= require cable/connection +#= require cable/subscription +#= require cable/subscriber_manager + +class Cable.Consumer + constructor: (@url) -> + @subscribers = new Cable.SubscriberManager this + @connection = new Cable.Connection this + + createSubscription: (channelName, mixin) -> + channel = channelName + params = if typeof channel is "object" then channel else {channel} + new Cable.Subscription this, params, mixin + + send: (data) -> + @connection.send(data) diff --git a/lib/assets/javascripts/cable/subscriber_manager.js.coffee b/lib/assets/javascripts/cable/subscriber_manager.js.coffee index 9ff727aa0c2b525cb198e34e98780f405bab6bd1..0893d217ac64c1d1aa4a75ee0800e9d5803ec510 100644 --- a/lib/assets/javascripts/cable/subscriber_manager.js.coffee +++ b/lib/assets/javascripts/cable/subscriber_manager.js.coffee @@ -1,5 +1,5 @@ class Cable.SubscriberManager - constructor: (@cable) -> + constructor: (@consumer) -> @subscribers = [] add: (subscriber) -> @@ -33,4 +33,4 @@ class Cable.SubscriberManager sendCommand: (subscriber, command) -> {identifier} = subscriber return true if identifier is Cable.PING_IDENTIFIER - @cable.send({command, identifier}) + @consumer.send({command, identifier}) diff --git a/lib/assets/javascripts/cable/subscription.js.coffee b/lib/assets/javascripts/cable/subscription.js.coffee index 8057ff7790b2054c279ecd5ad1e607550f6c0df7..74cc35a7a748feda12c2dbea487c5dcd9c071a67 100644 --- a/lib/assets/javascripts/cable/subscription.js.coffee +++ b/lib/assets/javascripts/cable/subscription.js.coffee @@ -1,8 +1,8 @@ class Cable.Subscription - constructor: (@cable, params = {}, mixin) -> + constructor: (@consumer, params = {}, mixin) -> @identifier = JSON.stringify(params) extend(this, mixin) - @cable.subscribers.add(this) + @consumer.subscribers.add(this) # Perform a channel action with the optional data passed as an attribute perform: (action, data = {}) -> @@ -10,10 +10,10 @@ class Cable.Subscription @send(data) send: (data) -> - @cable.send(command: "message", identifier: @identifier, data: JSON.stringify(data)) + @consumer.send(command: "message", identifier: @identifier, data: JSON.stringify(data)) unsubscribe: -> - @cable.subscribers.remove(this) + @consumer.subscribers.remove(this) extend = (object, properties) -> if properties?