mirror of https://github.com/rails/rails
Allows adding more protocols to the WebSocket sub protocols
This commit is contained in:
parent
cf2be23577
commit
6edb465bcf
|
@ -151,11 +151,12 @@
|
|||
logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);
|
||||
return false;
|
||||
} else {
|
||||
logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`);
|
||||
const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];
|
||||
logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);
|
||||
if (this.webSocket) {
|
||||
this.uninstallEventHandlers();
|
||||
}
|
||||
this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);
|
||||
this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);
|
||||
this.installEventHandlers();
|
||||
this.monitor.start();
|
||||
return true;
|
||||
|
@ -443,6 +444,7 @@
|
|||
this._url = url;
|
||||
this.subscriptions = new Subscriptions(this);
|
||||
this.connection = new Connection(this);
|
||||
this.subprotocols = [];
|
||||
}
|
||||
get url() {
|
||||
return createWebSocketURL(this._url);
|
||||
|
@ -463,6 +465,9 @@
|
|||
return this.connection.open();
|
||||
}
|
||||
}
|
||||
addSubProtocol(subprotocol) {
|
||||
this.subprotocols = [ ...this.subprotocols, subprotocol ];
|
||||
}
|
||||
}
|
||||
function createWebSocketURL(url) {
|
||||
if (typeof url === "function") {
|
||||
|
|
|
@ -157,11 +157,12 @@ class Connection {
|
|||
logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);
|
||||
return false;
|
||||
} else {
|
||||
logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`);
|
||||
const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];
|
||||
logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);
|
||||
if (this.webSocket) {
|
||||
this.uninstallEventHandlers();
|
||||
}
|
||||
this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);
|
||||
this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);
|
||||
this.installEventHandlers();
|
||||
this.monitor.start();
|
||||
return true;
|
||||
|
@ -456,6 +457,7 @@ class Consumer {
|
|||
this._url = url;
|
||||
this.subscriptions = new Subscriptions(this);
|
||||
this.connection = new Connection(this);
|
||||
this.subprotocols = [];
|
||||
}
|
||||
get url() {
|
||||
return createWebSocketURL(this._url);
|
||||
|
@ -476,6 +478,9 @@ class Consumer {
|
|||
return this.connection.open();
|
||||
}
|
||||
}
|
||||
addSubProtocol(subprotocol) {
|
||||
this.subprotocols = [ ...this.subprotocols, subprotocol ];
|
||||
}
|
||||
}
|
||||
|
||||
function createWebSocketURL(url) {
|
||||
|
|
|
@ -151,11 +151,12 @@
|
|||
logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`);
|
||||
return false;
|
||||
} else {
|
||||
logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`);
|
||||
const socketProtocols = [ ...protocols, ...this.consumer.subprotocols || [] ];
|
||||
logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`);
|
||||
if (this.webSocket) {
|
||||
this.uninstallEventHandlers();
|
||||
}
|
||||
this.webSocket = new adapters.WebSocket(this.consumer.url, protocols);
|
||||
this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols);
|
||||
this.installEventHandlers();
|
||||
this.monitor.start();
|
||||
return true;
|
||||
|
@ -443,6 +444,7 @@
|
|||
this._url = url;
|
||||
this.subscriptions = new Subscriptions(this);
|
||||
this.connection = new Connection(this);
|
||||
this.subprotocols = [];
|
||||
}
|
||||
get url() {
|
||||
return createWebSocketURL(this._url);
|
||||
|
@ -463,6 +465,9 @@
|
|||
return this.connection.open();
|
||||
}
|
||||
}
|
||||
addSubProtocol(subprotocol) {
|
||||
this.subprotocols = [ ...this.subprotocols, subprotocol ];
|
||||
}
|
||||
}
|
||||
function createWebSocketURL(url) {
|
||||
if (typeof url === "function") {
|
||||
|
|
|
@ -33,9 +33,10 @@ class Connection {
|
|||
logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)
|
||||
return false
|
||||
} else {
|
||||
logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${protocols}`)
|
||||
const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]
|
||||
logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)
|
||||
if (this.webSocket) { this.uninstallEventHandlers() }
|
||||
this.webSocket = new adapters.WebSocket(this.consumer.url, protocols)
|
||||
this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)
|
||||
this.installEventHandlers()
|
||||
this.monitor.start()
|
||||
return true
|
||||
|
|
|
@ -32,6 +32,7 @@ export default class Consumer {
|
|||
this._url = url
|
||||
this.subscriptions = new Subscriptions(this)
|
||||
this.connection = new Connection(this)
|
||||
this.subprotocols = []
|
||||
}
|
||||
|
||||
get url() {
|
||||
|
@ -55,6 +56,10 @@ export default class Consumer {
|
|||
return this.connection.open()
|
||||
}
|
||||
}
|
||||
|
||||
addSubProtocol(subprotocol) {
|
||||
this.subprotocols = [...this.subprotocols, subprotocol]
|
||||
}
|
||||
}
|
||||
|
||||
export function createWebSocketURL(url) {
|
||||
|
|
|
@ -20,6 +20,8 @@ export default function(name, options, callback) {
|
|||
const connection = consumer.connection
|
||||
const monitor = connection.monitor
|
||||
|
||||
if ("subprotocols" in options) consumer.addSubProtocol(options.subprotocols)
|
||||
|
||||
server.on("connection", function() {
|
||||
const clients = server.clients()
|
||||
assert.equal(clients.length, 1)
|
||||
|
|
|
@ -16,4 +16,12 @@ module("ActionCable.Consumer", () => {
|
|||
client.addEventListener("close", done)
|
||||
consumer.disconnect()
|
||||
})
|
||||
|
||||
consumerTest("#addSubProtocol", {subprotocols: "some subprotocol"}, ({consumer, server, assert, done}) => {
|
||||
server.on("connection", () => {
|
||||
assert.equal(consumer.subprotocols.length, 1)
|
||||
assert.equal(consumer.subprotocols[0], "some subprotocol")
|
||||
done()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue