aboutsummaryrefslogtreecommitdiffstats
path: root/lib/assets/javascripts/cable/subscriber_manager.js.coffee
diff options
context:
space:
mode:
authorJavan Makhmali <javan@javan.us>2015-06-25 10:21:53 -0400
committerJavan Makhmali <javan@javan.us>2015-06-25 10:21:53 -0400
commitc7f00661bf0cc54a73ccdb9d27fa10b0fd806e43 (patch)
tree26d7584ca641b1f7e3a5481af445028ef3c8be53 /lib/assets/javascripts/cable/subscriber_manager.js.coffee
parent0f761c0d51b8ccfd0d33562194cc5ef92199dc18 (diff)
downloadrails-c7f00661bf0cc54a73ccdb9d27fa10b0fd806e43.tar.gz
rails-c7f00661bf0cc54a73ccdb9d27fa10b0fd806e43.tar.bz2
rails-c7f00661bf0cc54a73ccdb9d27fa10b0fd806e43.zip
Move connection and subscriber code into their own classes
Diffstat (limited to 'lib/assets/javascripts/cable/subscriber_manager.js.coffee')
-rw-r--r--lib/assets/javascripts/cable/subscriber_manager.js.coffee26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/assets/javascripts/cable/subscriber_manager.js.coffee b/lib/assets/javascripts/cable/subscriber_manager.js.coffee
new file mode 100644
index 0000000000..4f46efe817
--- /dev/null
+++ b/lib/assets/javascripts/cable/subscriber_manager.js.coffee
@@ -0,0 +1,26 @@
+class Cable.SubscriberManager
+ constructor: (@cable) ->
+ @subscribers = {}
+
+ add: (identifier, subscriber) ->
+ @subscribers[identifier] = subscriber
+ if @cable.sendCommand(identifier, "subscribe")
+ @notify(identifier, "onConnect")
+
+ reload: ->
+ for identifier in Object.keys(@subscribers)
+ if @cable.sendCommand(identifier, "subscribe")
+ @notify(identifier, "onConnect")
+
+ remove: (identifier) ->
+ if subscriber = @subscribers[identifier]
+ @cable.sendCommand(identifier, "unsubscribe")
+ delete @subscribers[identifier]
+
+ notifyAll: (event, args...) ->
+ for identifier in Object.keys(@subscribers)
+ @notify(identifier, event, args...)
+
+ notify: (identifier, event, args...) ->
+ if subscriber = @subscribers[identifier]
+ subscriber[event]?(args...)