blob: 0b6a16590c703bbcde396e170600dfc2d025655c (
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
34
35
36
37
38
|
class Cable.SubscriberManager
constructor: (@consumer) ->
@subscribers = []
add: (subscriber) ->
@subscribers.push(subscriber)
@notify(subscriber, "initialized")
if @sendCommand(subscriber, "subscribe")
@notify(subscriber, "connected")
reload: ->
for subscriber in @subscribers
if @sendCommand(subscriber, "subscribe")
@notify(subscriber, "connected")
remove: (subscriber) ->
@sendCommand(subscriber, "unsubscribe")
@subscribers = (s for s in @subscribers when s isnt subscriber)
notifyAll: (callbackName, args...) ->
for subscriber in @subscribers
@notify(subscriber, callbackName, args...)
notify: (subscriber, callbackName, args...) ->
if typeof subscriber is "string"
subscribers = (s for s in @subscribers when s.identifier is subscriber)
else
subscribers = [subscriber]
for subscriber in subscribers
subscriber[callbackName]?(args...)
sendCommand: (subscriber, command) ->
{identifier} = subscriber
if identifier is Cable.PING_IDENTIFIER
@consumer.connection.isOpen()
else
@consumer.send({command, identifier})
|