From 011b47a108f3590970061619fe01a1ae314b4804 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 28 Jun 2024 11:41:05 +0100 Subject: [PATCH 1/2] Guard against undefined sessions in multiplayer --- .../@node-red/runtime/lib/multiplayer/index.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/multiplayer/index.js b/packages/node_modules/@node-red/runtime/lib/multiplayer/index.js index adfa63c28..23c826e6d 100644 --- a/packages/node_modules/@node-red/runtime/lib/multiplayer/index.js +++ b/packages/node_modules/@node-red/runtime/lib/multiplayer/index.js @@ -23,14 +23,16 @@ module.exports = { if (existingSessionId) { connections.delete(opts.session) const session = sessions.get(existingSessionId) - session.active = false - session.idleTimeout = setTimeout(() => { - sessions.delete(existingSessionId) - }, 30000) - runtime.events.emit('comms', { - topic: "multiplayer/connection-removed", - data: { session: existingSessionId } - }) + if (session) { + session.active = false + session.idleTimeout = setTimeout(() => { + sessions.delete(existingSessionId) + }, 30000) + runtime.events.emit('comms', { + topic: "multiplayer/connection-removed", + data: { session: existingSessionId } + }) + } } }) runtime.events.on('comms:message:multiplayer/connect', (opts) => { From da3ad409686f01a9e1fcf76d44e0b05248275361 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 28 Jun 2024 14:19:18 +0100 Subject: [PATCH 2/2] Add more guards for undefined session --- .../runtime/lib/multiplayer/index.js | 40 ++++++++++--------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/packages/node_modules/@node-red/runtime/lib/multiplayer/index.js b/packages/node_modules/@node-red/runtime/lib/multiplayer/index.js index 23c826e6d..08cb0d5a1 100644 --- a/packages/node_modules/@node-red/runtime/lib/multiplayer/index.js +++ b/packages/node_modules/@node-red/runtime/lib/multiplayer/index.js @@ -93,29 +93,31 @@ module.exports = { const sessionId = connections.get(opts.session) const session = sessions.get(sessionId) - if (opts.user) { - if (session.user.anonymous !== opts.user.anonymous) { - session.user = opts.user - runtime.events.emit('comms', { - topic: 'multiplayer/connection-added', - excludeSession: opts.session, - data: session - }) + if (session) { + if (opts.user) { + if (session.user.anonymous !== opts.user.anonymous) { + session.user = opts.user + runtime.events.emit('comms', { + topic: 'multiplayer/connection-added', + excludeSession: opts.session, + data: session + }) + } } - } - session.location = opts.data + session.location = opts.data - const payload = { - session: sessionId, - workspace: opts.data.workspace, - node: opts.data.node + const payload = { + session: sessionId, + workspace: opts.data.workspace, + node: opts.data.node + } + runtime.events.emit('comms', { + topic: 'multiplayer/location', + data: payload, + excludeSession: opts.session + }) } - runtime.events.emit('comms', { - topic: 'multiplayer/location', - data: payload, - excludeSession: opts.session - }) }) } } \ No newline at end of file