diff options
author | Javan Makhmali <javan@javan.us> | 2015-06-25 16:08:44 -0400 |
---|---|---|
committer | Javan Makhmali <javan@javan.us> | 2015-06-25 16:08:44 -0400 |
commit | 0e5c9e741ac2da96f6e1b0f2dd1de03f50a19b90 (patch) | |
tree | 95425d75f2a64abfd71c60bc949a26769c189512 /lib | |
parent | 3509a1226c3b35aa018befd5f20327845c8c1ee9 (diff) | |
download | rails-0e5c9e741ac2da96f6e1b0f2dd1de03f50a19b90.tar.gz rails-0e5c9e741ac2da96f6e1b0f2dd1de03f50a19b90.tar.bz2 rails-0e5c9e741ac2da96f6e1b0f2dd1de03f50a19b90.zip |
Manage an array of subscribers since there may be more than one subscription to a channel
Diffstat (limited to 'lib')
-rw-r--r-- | lib/assets/javascripts/cable/subscriber_manager.js.coffee | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/lib/assets/javascripts/cable/subscriber_manager.js.coffee b/lib/assets/javascripts/cable/subscriber_manager.js.coffee index ca79f1146e..9ff727aa0c 100644 --- a/lib/assets/javascripts/cable/subscriber_manager.js.coffee +++ b/lib/assets/javascripts/cable/subscriber_manager.js.coffee @@ -1,35 +1,36 @@ class Cable.SubscriberManager constructor: (@cable) -> - @subscribers = {} + @subscribers = [] add: (subscriber) -> - {identifier} = subscriber - @subscribers[identifier] = subscriber + @subscribers.push(subscriber) @notify(subscriber, "initialized") - if @sendCommand("subscribe", identifier) + if @sendCommand(subscriber, "subscribe") @notify(subscriber, "connected") reload: -> - for identifier, subscriber of @subscribers - if @sendCommand("subscribe", identifier) + for subscriber in @subscribers + if @sendCommand(subscriber, "subscribe") @notify(subscriber, "connected") remove: (subscriber) -> - {identifier} = subscriber - @sendCommand("unsubscribe", identifier) - delete @subscribers[identifier] + @sendCommand(subscriber, "unsubscribe") + @subscibers = (s for s in @subscribers when s isnt subscriber) notifyAll: (callbackName, args...) -> - for identifier, subscriber of @subscribers + for subscriber in @subscribers @notify(subscriber, callbackName, args...) notify: (subscriber, callbackName, args...) -> if typeof subscriber is "string" - subscriber = @subscribers[subscriber] + subscribers = (s for s in @subscribers when s.identifier is subscriber) + else + subscribers = [subscriber] - if subscriber + for subscriber in subscribers subscriber[callbackName]?(args...) - sendCommand: (command, identifier) -> + sendCommand: (subscriber, command) -> + {identifier} = subscriber return true if identifier is Cable.PING_IDENTIFIER @cable.send({command, identifier}) |