blob: 7cb008ca67a276d4ac54be142ba60c948152605c (
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
39
40
41
|
class Cable.Subscriptions
constructor: (@consumer) ->
@subscriptions = []
add: (subscription) ->
@subscriptions.push(subscription)
@notify(subscription, "initialized")
if @sendCommand(subscription, "subscribe")
@notify(subscription, "connected")
reload: ->
for subscription in @subscriptions
if @sendCommand(subscription, "subscribe")
@notify(subscription, "connected")
remove: (subscription) ->
@sendCommand(subscription, "unsubscribe")
@subscriptions = (s for s in @subscriptions when s isnt subscription)
notifyAll: (callbackName, args...) ->
for subscription in @subscriptions
@notify(subscription, callbackName, args...)
notify: (subscription, callbackName, args...) ->
if typeof subscription is "string"
subscriptions = (s for s in @subscriptions when s.identifier is subscription)
else
subscriptions = [subscription]
for subscription in subscriptions
subscription[callbackName]?(args...)
sendCommand: (subscription, command) ->
{identifier} = subscription
if identifier is Cable.PING_IDENTIFIER
@consumer.connection.isOpen()
else
@consumer.send({command, identifier})
toJSON: ->
subscription.identifier for subscription in @subscriptions
|