From 096b7a77148abd3051bed57b90e5258662c6f97c Mon Sep 17 00:00:00 2001 From: wancat Date: Mon, 14 Aug 2023 19:39:30 +0800 Subject: [PATCH] feat: push discover event to frontend --- packages/client/index.js | 5 +++++ packages/container/discover.js | 1 - .../src/api/controllers/commandController.js | 2 +- server/src/api/socket.js | 18 ++++++++++++++++++ server/src/game/commandHandler.js | 10 +++++++++- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/packages/client/index.js b/packages/client/index.js index ff5b78f..5363631 100644 --- a/packages/client/index.js +++ b/packages/client/index.js @@ -72,6 +72,11 @@ async function connect(sessionId) { stdout.write(data) }) + socket.on('graph', (data) => { + console.log('receive graph:') + console.log(data) + }) + socket.on('close', function close() { console.log('Disconnected from the server.') exit() diff --git a/packages/container/discover.js b/packages/container/discover.js index 0f0fc13..781a58d 100644 --- a/packages/container/discover.js +++ b/packages/container/discover.js @@ -33,7 +33,6 @@ async function collectFilesInfo(inputPath, level = 0, hiddenFiles = false) { } async function discoverFiles(argv) { - console.log(argv) const targetPath = argv._.length < 2 ? ['.'] : argv._.slice(1) const result = await Promise.all( targetPath diff --git a/server/src/api/controllers/commandController.js b/server/src/api/controllers/commandController.js index 22b64fa..c37121d 100644 --- a/server/src/api/controllers/commandController.js +++ b/server/src/api/controllers/commandController.js @@ -40,7 +40,7 @@ export async function newCommand(req, res) { await c.save() - const response = await commandHandler(session, c) + const response = await commandHandler(session, c, additionalData) console.log(response) res.status(201).json(response) diff --git a/server/src/api/socket.js b/server/src/api/socket.js index df0a9fb..f2c6aa6 100644 --- a/server/src/api/socket.js +++ b/server/src/api/socket.js @@ -3,6 +3,20 @@ import { getOrCreateContainer, attachContainer } from '../utils/docker.js' import Session from '../models/session.js' import { defaultUser, genSessionJWT } from '../utils/auth.js' +const sessions = new Map() + +function listenToSession(sessionId, event, callback) { + sessions.set((sessionId, event), callback) +} + +export function pushToSession(sessionId, event, data) { + console.log(sessions, sessionId, event, data) + const callback = sessions.get((sessionId, event)) + if (callback) { + callback(data) + } +} + export default (server) => { const io = new Server(server) @@ -63,6 +77,10 @@ export default (server) => { console.log('Disconnected from the client.') }) + listenToSession(session.id, 'graph', (data) => { + socket.emit('graph', data) + }) + socket.send(`${container.id}\n`) }) } diff --git a/server/src/game/commandHandler.js b/server/src/game/commandHandler.js index 4dd0df5..d24eb33 100644 --- a/server/src/game/commandHandler.js +++ b/server/src/game/commandHandler.js @@ -1,4 +1,5 @@ import Quest from '../models/quest.js' +import { pushToSession } from '../api/socket.js' // 檢查 pattern 是否符合 input const checkMatch = (pattern, input) => { @@ -9,7 +10,7 @@ const checkMatch = (pattern, input) => { }) } -const commandHandler = async (session, commandInput) => { +async function commandHandler(session, commandInput, additionalData) { const quest = await Quest.findById(session.quest) const stage = quest.stages.find((s) => s.id === session.progress) if (!stage) { @@ -17,6 +18,13 @@ const commandHandler = async (session, commandInput) => { return {} } + if ('discover' in additionalData) { + pushToSession(session.id, 'graph', { + pwd: commandInput.pwd, + discover: additionalData.discover, + }) + } + const commandMatch = checkMatch(stage.condition.command, commandInput.command) const outputMatch = checkMatch(stage.condition.output, commandInput.output) const errorMatch = checkMatch(stage.condition.error, commandInput.output)