import { Router, Request, Response } from 'express' import axios from 'axios' import { authMiddleware } from '../middleware/authMiddleware' import * as dotenv from 'dotenv' // 加载环境变量 dotenv.config() const router = Router() // 游戏服务端API基础URL const GAME_API_URL = process.env.GAME_API_URL || 'http://127.0.0.1:8080/tool/http' // 检查游戏服务状态 router.get('/status', authMiddleware, async (req: Request, res: Response) => { try { // 获取PSK密钥 const GAME_PSK = process.env.GAME_PSK if (!GAME_PSK) { return res.status(500).json({ success: false, message: '游戏服务端PSK密钥未配置' }) } // 发送测试请求到游戏服务端API const response = await axios.post(GAME_API_URL, { code: 'account/get_account_list', page: 1, pageSize: 1 }, { headers: { 'Content-Type': 'application/json', 'psk': GAME_PSK // 添加PSK认证头 }, timeout: 5000, // 设置5秒超时 proxy: false // 禁用代理,确保请求直接发送到目标服务器 }) return res.status(200).json({ success: true, message: '游戏服务端连接成功', data: { status: 'online', responseTime: response.config.timeout } }) } catch (error: unknown) { console.error('游戏服务状态检查失败:', error) if (axios.isAxiosError(error)) { // Axios错误处理 if (error.code === 'ECONNREFUSED') { return res.status(200).json({ success: false, message: '游戏服务端连接失败', data: { status: 'offline', error: '游戏服务端未响应,请检查游戏服务端是否正常运行' } }) } else if (error.code === 'ECONNABORTED') { return res.status(200).json({ success: false, message: '游戏服务端请求超时', data: { status: 'timeout', error: '游戏服务端响应超时' } }) } } return res.status(200).json({ success: false, message: '游戏服务端状态检查失败', data: { status: 'error', error: '未知错误' } }) } }) // 转发请求到游戏服务端API(需要认证) router.post('/', authMiddleware, async (req: Request, res: Response) => { try { // 获取游戏服务端API路径和参数 const { path, params } = req.body if (!path) { return res.status(400).json({ success: false, message: '缺少游戏服务端API路径' }) } // 获取PSK密钥 const GAME_PSK = process.env.GAME_PSK if (!GAME_PSK) { return res.status(500).json({ success: false, message: '游戏服务端PSK密钥未配置' }) } // 构建完整的请求URL const apiUrl = `${GAME_API_URL}` // 发送请求到游戏服务端API(禁用代理,确保直接连接) const response = await axios.post(apiUrl, { code: path, ...params }, { headers: { 'Content-Type': 'application/json', 'psk': GAME_PSK // 添加PSK认证头 }, timeout: 10000, // 设置10秒超时 proxy: false // 禁用代理,确保请求直接发送到目标服务器 }) // 返回游戏服务端API的响应 res.status(200).json({ success: true, message: '游戏服务端API调用成功', data: response.data }) } catch (error: unknown) { console.error('游戏服务端API调用失败:', error) if (axios.isAxiosError(error)) { // Axios错误处理 if (error.code === 'ECONNREFUSED') { return res.status(503).json({ success: false, message: '游戏服务端连接失败,请检查游戏服务端是否正常运行' }) } else if (error.code === 'ECONNABORTED') { return res.status(504).json({ success: false, message: '游戏服务端API请求超时' }) } return res.status(error.response?.status || 500).json({ success: false, message: error.response?.data?.message || '游戏服务端API调用失败', data: error.response?.data }) } res.status(500).json({ success: false, message: '游戏服务端API调用失败,请稍后重试' }) } }) export default router