aboutsummaryrefslogtreecommitdiffstats
path: root/lib/assets/javascripts/cable/subscriber_manager.js.coffee
blob: e2e6c9e2281539aef0c55eec4c2de8eae6114016 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class Cable.SubscriberManager
  constructor: (@cable) ->
    @subscribers = {}

  add: (subscriber) ->
    {identifier} = subscriber
    @subscribers[identifier] = subscriber
    if @sendCommand("subscribe", identifier)
      @notify(subscriber, "connected")

  reload: ->
    for identifier, subscriber of @subscribers
      if @sendCommand("subscribe", identifier)
        @notify(subscriber, "connected")

  remove: (subscriber) ->
    {identifier} = subscriber
    @sendCommand("unsubscribe", identifier)
    delete @subscribers[identifier]

  notifyAll: (event, args...) ->
    for identifier, subscriber of @subscribers
      @notify(subscriber, event, args...)

  notify: (subscriber, event, args...) ->
    if typeof subscriber is "string"
      subscriber = @subscribers[subscriber]

    if subscriber
      subscriber[event]?(args...)

  sendCommand: (command, identifier) ->
    @cable.send({command, identifier})