1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/actioncable/app/javascript/action_cable/consumer.js

60 lines
1.8 KiB
JavaScript
Raw Normal View History

/*
* decaffeinate suggestions:
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
//= 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.
ActionCable.Consumer = class Consumer {
constructor(url) {
this.url = url
this.subscriptions = new ActionCable.Subscriptions(this)
this.connection = new ActionCable.Connection(this)
}
send(data) {
return this.connection.send(data)
}
connect() {
return this.connection.open()
}
disconnect() {
return this.connection.close({allowReconnect: false})
}
ensureActiveConnection() {
if (!this.connection.isActive()) {
return this.connection.open()
}
}
}