aboutsummaryrefslogtreecommitdiffstats
path: root/actioncable/app/assets/javascripts/action_cable/consumer.coffee
blob: 3298be717f6b507b046ec07cd8635101e0a853ef (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
42
43
44
45
46
#= require ./connection
#= require ./subscriptions
#= require ./subscription

# The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,
# the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.
# The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription
# method.
#
# The following example shows how this can be setup:
#
#   @App = {}
#   App.cable = ActionCable.createConsumer "ws://example.com/accounts/1"
#   App.appearance = App.cable.subscriptions.create "AppearanceChannel"
#
# For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.
#
# When a consumer is created, it automatically connects with the server.
#
# To disconnect from the server, call
#
#   App.cable.disconnect()
#
# and to restart the connection:
#
#   App.cable.connect()
#
# Any channel subscriptions which existed prior to disconnecting will
# automatically resubscribe.
class ActionCable.Consumer
  constructor: (@url) ->
    @subscriptions = new ActionCable.Subscriptions this
    @connection = new ActionCable.Connection this

  send: (data) ->
    @connection.send(data)

  connect: ->
    @connection.open()

  disconnect: ->
    @connection.close(allowReconnect: false)

  ensureActiveConnection: ->
    unless @connection.isActive()
      @connection.open()