diff --git a/packages/lib/link/connectors.js b/packages/lib/link/connectors.js index 91a6f995..8b797fbb 100644 --- a/packages/lib/link/connectors.js +++ b/packages/lib/link/connectors.js @@ -178,7 +178,7 @@ class WebSocketClientConnector extends WebSocketBaseConnector { setTimeout(timeout) { this._timeout = timeout; - if (this._reconnectId && this.timeout < this._reconnectDelay / 2) { + if (this._reconnectId && this._timeout < this._reconnectDelay / 2) { clearTimeout(this._reconnectId); this.reconnect(); } @@ -280,6 +280,7 @@ class WebSocketClientConnector extends WebSocketBaseConnector { this._lastReceivedSeq = null; this._sessionToken = null; this._sendBuffer.length = 0; + this._state = "new"; this._connected = false; this.emit("close"); return; @@ -401,7 +402,7 @@ class WebSocketClientConnector extends WebSocketBaseConnector { } this._startedReconnect = null; this._connected = true; - this.emit("connect"); + this.emit("connect", data); } else if (type === "continue") { logger.verbose("SOCKET | resuming existing session"); diff --git a/packages/lib/schema.js b/packages/lib/schema.js index 7245a7fd..7ceea00e 100644 --- a/packages/lib/schema.js +++ b/packages/lib/schema.js @@ -102,6 +102,13 @@ const serverHandshake = ajv.compile({ properties: { "session_token": { type: "string" }, "heartbeat_interval": { type: "number" }, + "account": { + additionalProperties: false, + required: ["name"], + properties: { + "name": { type: "string" }, + }, + }, }, }, }, diff --git a/packages/master/master.js b/packages/master/master.js index 54ac0933..f82e2b31 100755 --- a/packages/master/master.js +++ b/packages/master/master.js @@ -1371,8 +1371,10 @@ class WebSocketServerConnector extends libLink.WebSocketBaseConnector { * * @param {string} sessionToken - * the session token to send to the client. + * @param {Object=} additionalData - + * extra properties to send along the ready message. */ - ready(sessionToken) { + ready(sessionToken, additionalData) { this._heartbeatInterval = masterConfig.get("master.heartbeat_interval"); this._socket.send(JSON.stringify({ seq: null, @@ -1380,6 +1382,7 @@ class WebSocketServerConnector extends libLink.WebSocketBaseConnector { data: { session_token: sessionToken, heartbeat_interval: this._heartbeatInterval, + ...additionalData, }, })); @@ -1650,6 +1653,7 @@ async function handleHandshake(message, socket, req, attachHandler) { let connector = new WebSocketServerConnector(socket, sessionId); activeConnectors.set(sessionId, connector); + let additionalReadyData = {}; if (type === "register_slave") { let connection = slaveConnections.get(data.id); if (connection) { @@ -1664,9 +1668,12 @@ async function handleHandshake(message, socket, req, attachHandler) { } else if (type === "register_control") { logger.verbose(`SOCKET | registered control from ${req.socket.remoteAddress}`); controlConnections.push(new ControlConnection(data, connector, user)); + additionalReadyData["account"] = { + name: user.name, + }; } - connector.ready(sessionToken); + connector.ready(sessionToken, additionalReadyData); } wss.on("connection", (socket, req) => { diff --git a/packages/master/web/index.html b/packages/master/web/index.html index 372cf1fe..77dedfc5 100644 --- a/packages/master/web/index.html +++ b/packages/master/web/index.html @@ -3,6 +3,7 @@
+