Merge pull request #4816 from node-red/4814-multiplayer-uncaught

Guard against undefined sessions in multiplayer
This commit is contained in:
Nick O'Leary 2024-06-28 16:58:25 +01:00 committed by GitHub
commit 93974ccd92
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -23,14 +23,16 @@ module.exports = {
if (existingSessionId) { if (existingSessionId) {
connections.delete(opts.session) connections.delete(opts.session)
const session = sessions.get(existingSessionId) const session = sessions.get(existingSessionId)
session.active = false if (session) {
session.idleTimeout = setTimeout(() => { session.active = false
sessions.delete(existingSessionId) session.idleTimeout = setTimeout(() => {
}, 30000) sessions.delete(existingSessionId)
runtime.events.emit('comms', { }, 30000)
topic: "multiplayer/connection-removed", runtime.events.emit('comms', {
data: { session: existingSessionId } topic: "multiplayer/connection-removed",
}) data: { session: existingSessionId }
})
}
} }
}) })
runtime.events.on('comms:message:multiplayer/connect', (opts) => { runtime.events.on('comms:message:multiplayer/connect', (opts) => {
@ -91,29 +93,31 @@ module.exports = {
const sessionId = connections.get(opts.session) const sessionId = connections.get(opts.session)
const session = sessions.get(sessionId) const session = sessions.get(sessionId)
if (opts.user) { if (session) {
if (session.user.anonymous !== opts.user.anonymous) { if (opts.user) {
session.user = opts.user if (session.user.anonymous !== opts.user.anonymous) {
runtime.events.emit('comms', { session.user = opts.user
topic: 'multiplayer/connection-added', runtime.events.emit('comms', {
excludeSession: opts.session, topic: 'multiplayer/connection-added',
data: session excludeSession: opts.session,
}) data: session
})
}
} }
}
session.location = opts.data session.location = opts.data
const payload = { const payload = {
session: sessionId, session: sessionId,
workspace: opts.data.workspace, workspace: opts.data.workspace,
node: opts.data.node 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
})
}) })
} }
} }