refactor: game

This commit is contained in:
wancat committed 2024-02-19 23:13:37 +08:00
1 parent 2d05149cea
commit 4c421b4cb3
9 files changed
+181 -85

No files matched your search

@@ -1,5 +1,6 @@
import { Command, Session } from '@linux-odyssey/models'
import { Command, Quest, Session } from '@linux-odyssey/models'
import { matchedData } from 'express-validator'
import type { Request, Response } from 'express'
import CommandHandler from '../../game/commandHandler.js'
import { pushToSession } from '../socket.js'
import { finishSession } from '../../models/sessionManager.js'
@@ -7,10 +8,10 @@ import { asyncHandler } from '../../middleware/error.js'
const commandCompleteCallbacks = new Map()
export const newCommand = asyncHandler(async (req, res) => {
export const newCommand = asyncHandler(async (req: Request, res: Response) => {
const { command, pwd, output, error, params } = matchedData(req)
const { sessionId } = req.user
const { sessionId } = req.user as any
const session = await Session.findById(sessionId)
if (!session) {
res.status(404).json({ message: 'session not found' })
@@ -38,7 +39,13 @@ export const newCommand = asyncHandler(async (req, res) => {
await c.save()
const commandHandler = new CommandHandler(session, c, params)
const quest = await Quest.findById(session.quest)
if (!quest) {
res.status(404).json({ message: 'quest not found' })
return
}
const commandHandler = new CommandHandler(session, quest, c, params)
const response = await commandHandler.run()
if (response) {
c.stage = response.stage
@@ -49,33 +56,37 @@ export const newCommand = asyncHandler(async (req, res) => {
}
commandCompleteCallbacks.set(session.id, response.callback)
pushToSession(session.id, 'status', 'pending')
res.status(201).json(response)
} else {
res.status(200).end()
}
res.status(201).json(response)
await session.save()
})
export const completedCommand = asyncHandler(async (req, res) => {
const { sessionId } = req.user
export const completedCommand = asyncHandler(
async (req: Request, res: Response) => {
const { sessionId } = req.user as any
const session = await Session.findById(sessionId)
const session = await Session.findById(sessionId)
if (!session) {
res.status(404).json({ message: 'session not found' })
return
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' })
}
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' })
})
)