aboutsummaryrefslogblamecommitdiffstats
path: root/lib/assets/javascripts/cable/subscriber_manager.js.coffee
blob: d76832a8024d3061fdc181fe52531c8336da9d76 (plain) (tree)
1
2
3
4
5
6
7
8
9



                             

                             
                                         

                                            

            


                                              
 



                                           

                                

                                              
 




                                           
                                 

                                       
                                                      
                                      
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) ->
    return true if identifier is Cable.PING_IDENTIFIER
    @cable.send({command, identifier})