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



                             

                             
                                         
                                      

                                            

            


                                              
 



                                           
 
                                       
                                              
                                                
 
                                                



                                           
                                        

                                       
                                                      
                                      
class Cable.SubscriberManager
  constructor: (@cable) ->
    @subscribers = {}

  add: (subscriber) ->
    {identifier} = subscriber
    @subscribers[identifier] = subscriber
    @notify(subscriber, "initialized")
    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: (callbackName, args...) ->
    for identifier, subscriber of @subscribers
      @notify(subscriber, callbackName, args...)

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

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

  sendCommand: (command, identifier) ->
    return true if identifier is Cable.PING_IDENTIFIER
    @cable.send({command, identifier})