From 84ed13970003e9ec2f21c35df111370492519cdc Mon Sep 17 00:00:00 2001 From: Javan Makhmali Date: Thu, 25 Jun 2015 16:24:58 -0400 Subject: Cable.Consumer --- lib/assets/javascripts/cable.js.coffee | 21 +++++---------------- lib/assets/javascripts/cable/connection.js.coffee | 12 ++++++------ .../javascripts/cable/connection_monitor.js.coffee | 6 +++--- lib/assets/javascripts/cable/consumer.js.coffee | 16 ++++++++++++++++ .../javascripts/cable/subscriber_manager.js.coffee | 4 ++-- lib/assets/javascripts/cable/subscription.js.coffee | 8 ++++---- 6 files changed, 36 insertions(+), 31 deletions(-) create mode 100644 lib/assets/javascripts/cable/consumer.js.coffee diff --git a/lib/assets/javascripts/cable.js.coffee b/lib/assets/javascripts/cable.js.coffee index fad5aa05d3..0bd1757505 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 096dd519f7..6ee28fcb75 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 078e1d3b26..cf36b2a457 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 0000000000..a9abd6256a --- /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 9ff727aa0c..0893d217ac 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 8057ff7790..74cc35a7a7 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? -- cgit v1.2.3