From f08ee333a7903cfe3ff964e82a442b78db22349d Mon Sep 17 00:00:00 2001 From: wancat Date: Mon, 14 Aug 2023 19:50:44 +0800 Subject: [PATCH] feat: push new pwd when 'cd' --- server/package.json | 1 + server/src/api/socket.js | 11 ++++++----- server/src/game/commandHandler.js | 5 +++++ 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/server/package.json b/server/package.json index f3eb8e2..9895bae 100644 --- a/server/package.json +++ b/server/package.json @@ -14,6 +14,7 @@ "dockerode": "^3.3.5", "express": "^4.18.2", "jsonwebtoken": "^9.0.1", + "minimist": "^1.2.8", "mongoose": "^7.4.0", "socket.io": "^4.7.1", "swagger-ui-express": "^5.0.0", diff --git a/server/src/api/socket.js b/server/src/api/socket.js index f2c6aa6..7e167ae 100644 --- a/server/src/api/socket.js +++ b/server/src/api/socket.js @@ -6,14 +6,15 @@ import { defaultUser, genSessionJWT } from '../utils/auth.js' const sessions = new Map() function listenToSession(sessionId, event, callback) { - sessions.set((sessionId, event), callback) + const callbacks = sessions.get((sessionId, event)) || [] + sessions.set((sessionId, event), callbacks.concat(callback)) } export function pushToSession(sessionId, event, data) { - console.log(sessions, sessionId, event, data) - const callback = sessions.get((sessionId, event)) - if (callback) { - callback(data) + console.log('Push:', sessionId, event) + const callbacks = sessions.get((sessionId, event)) + if (callbacks) { + callbacks.forEach((callback) => callback(data)) } } diff --git a/server/src/game/commandHandler.js b/server/src/game/commandHandler.js index d24eb33..b467b5c 100644 --- a/server/src/game/commandHandler.js +++ b/server/src/game/commandHandler.js @@ -1,3 +1,4 @@ +import minimist from 'minimist' import Quest from '../models/quest.js' import { pushToSession } from '../api/socket.js' @@ -18,11 +19,15 @@ async function commandHandler(session, commandInput, additionalData) { return {} } + const argv = minimist(commandInput.command.split(' ')) + if ('discover' in additionalData) { pushToSession(session.id, 'graph', { pwd: commandInput.pwd, discover: additionalData.discover, }) + } else if (argv._[0] === 'cd') { + pushToSession(session.id, 'graph', { pwd: commandInput.pwd }) } const commandMatch = checkMatch(stage.condition.command, commandInput.command)