mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-08 11:30:12 +08:00
feat: send status to the frontend
This commit is contained in:
1 parent
622d64dd45
commit
039da53bbe
5 files changed
+8
-46
No files matched your search
@@ -95,10 +95,6 @@ function newResponse(response) {
|
|||||||
store.session.status = response.status
|
store.session.status = response.status
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateStatus(status) {
|
|
||||||
store.session.status = status
|
|
||||||
}
|
|
||||||
|
|
||||||
export function useTerminal() {
|
export function useTerminal() {
|
||||||
return term
|
return term
|
||||||
}
|
}
|
||||||
@@ -137,18 +133,9 @@ function setup() {
|
|||||||
socket.on('graph', (event) => {
|
socket.on('graph', (event) => {
|
||||||
updateGraph(event)
|
updateGraph(event)
|
||||||
})
|
})
|
||||||
// socket.on('hints', (event) => {
|
|
||||||
// updateHints(event)
|
|
||||||
// })
|
|
||||||
// socket.on('tasks', (tasks) => {
|
|
||||||
// setTasks(tasks)
|
|
||||||
// })
|
|
||||||
socket.on('response', (response) => {
|
socket.on('response', (response) => {
|
||||||
newResponse(response)
|
newResponse(response)
|
||||||
})
|
})
|
||||||
socket.on('status', (event) => {
|
|
||||||
updateStatus(event)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setup()
|
setup()
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export interface ISession {
|
|||||||
user: Types.ObjectId
|
user: Types.ObjectId
|
||||||
quest: string
|
quest: string
|
||||||
containerId: string | null
|
containerId: string | null
|
||||||
status: string
|
status: 'active' | 'finished' | 'inactive'
|
||||||
createdAt: Date
|
createdAt: Date
|
||||||
updatedAt: Date
|
updatedAt: Date
|
||||||
finishedAt?: Date
|
finishedAt?: Date
|
||||||
|
|||||||
@@ -6,8 +6,6 @@ import { pushToSession } from '../socket.js'
|
|||||||
import { finishSession } from '../../models/sessionManager.js'
|
import { finishSession } from '../../models/sessionManager.js'
|
||||||
import { asyncHandler } from '../../middleware/error.js'
|
import { asyncHandler } from '../../middleware/error.js'
|
||||||
|
|
||||||
const commandCompleteCallbacks = new Map()
|
|
||||||
|
|
||||||
export const newCommand = asyncHandler(async (req: Request, res: Response) => {
|
export const newCommand = asyncHandler(async (req: Request, res: Response) => {
|
||||||
const { command, pwd, output, error, params } = matchedData(req)
|
const { command, pwd, output, error, params } = matchedData(req)
|
||||||
|
|
||||||
@@ -53,40 +51,12 @@ export const newCommand = asyncHandler(async (req: Request, res: Response) => {
|
|||||||
|
|
||||||
session.responses.push(response.responses)
|
session.responses.push(response.responses)
|
||||||
|
|
||||||
if (response.stage === 'END') {
|
if ((session.status as string) === 'finished') {
|
||||||
await finishSession(session)
|
await finishSession(session)
|
||||||
}
|
}
|
||||||
// commandCompleteCallbacks.set(session.id, response.callback)
|
|
||||||
pushToSession(session.id, 'response', response)
|
pushToSession(session.id, 'response', response)
|
||||||
}
|
}
|
||||||
|
|
||||||
res.status(200).end()
|
res.status(200).end()
|
||||||
await session.save()
|
await session.save()
|
||||||
})
|
})
|
||||||
|
|
||||||
export const completedCommand = asyncHandler(
|
|
||||||
async (req: Request, res: Response) => {
|
|
||||||
const { sessionId } = req.user as any
|
|
||||||
|
|
||||||
const session = await Session.findById(sessionId)
|
|
||||||
|
|
||||||
if (!session) {
|
|
||||||
res.status(404).json({ message: 'session not found' })
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (session.status === 'inactive') {
|
|
||||||
res.status(400).json({ message: 'session is not active' })
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
const callback = commandCompleteCallbacks.get(session.id)
|
|
||||||
if (!callback) {
|
|
||||||
res.status(200).json({ message: 'no callback found' })
|
|
||||||
return
|
|
||||||
}
|
|
||||||
callback()
|
|
||||||
commandCompleteCallbacks.delete(session.id)
|
|
||||||
res.json({ message: 'ok' })
|
|
||||||
}
|
|
||||||
)
|
|
||||||
@@ -5,6 +5,5 @@ import { newCommandValidator } from '../validators/commandValidator.js'
|
|||||||
const router = Router()
|
const router = Router()
|
||||||
|
|
||||||
router.post('/', newCommandValidator, commandController.newCommand)
|
router.post('/', newCommandValidator, commandController.newCommand)
|
||||||
router.post('/completed', commandController.completedCommand)
|
|
||||||
|
|
||||||
export default router
|
export default router
|
||||||
@@ -79,6 +79,12 @@ export default class SessionHandler {
|
|||||||
|
|
||||||
this.addNewTasks()
|
this.addNewTasks()
|
||||||
|
|
||||||
|
this.session.responses.push(stage.responses)
|
||||||
|
|
||||||
|
if (stage.id === 'END') {
|
||||||
|
this.session.status = 'finished'
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
responses: stage.responses,
|
responses: stage.responses,
|
||||||
hints: stage.hints,
|
hints: stage.hints,
|
||||||
|
|||||||
Reference in new issue
Block a user