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
34
|
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})
|