From 0e5c9e741ac2da96f6e1b0f2dd1de03f50a19b90 Mon Sep 17 00:00:00 2001 From: Javan Makhmali Date: Thu, 25 Jun 2015 16:08:44 -0400 Subject: Manage an array of subscribers since there may be more than one subscription to a channel --- .../javascripts/cable/subscriber_manager.js.coffee | 27 +++++++++++----------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'lib/assets/javascripts/cable') 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}) -- cgit v1.2.3