2025-04-28 12:25:20 +08:00
|
|
|
|
const express = require('express');
|
|
|
|
|
const path = require('path');
|
|
|
|
|
const bodyParser = require('body-parser');
|
|
|
|
|
const os = require('os');
|
|
|
|
|
|
|
|
|
|
// 导入自定义模块
|
|
|
|
|
const { performCleanup } = require('./modules/cleanup');
|
|
|
|
|
const authRoutes = require('./routes/auth');
|
|
|
|
|
const versionRoutes = require('./routes/versions');
|
|
|
|
|
const filesystemRoutes = require('./routes/filesystem');
|
|
|
|
|
const systemInfoRoutes = require('./routes/system-info');
|
|
|
|
|
const scenarioRoutes = require('./routes/scenario-config');
|
|
|
|
|
const modelRoutes = require('./routes/model-config');
|
|
|
|
|
const serviceRoutes = require('./routes/service-config');
|
|
|
|
|
const serviceApiRoutes = require('./routes/service-dev');
|
|
|
|
|
const idlRoutes = require('./routes/idl');
|
|
|
|
|
const projectModelRoutes = require('./routes/project-model');
|
|
|
|
|
const ataChaptersRoutes = require('./routes/model-dev');
|
|
|
|
|
const simulationRoutes = require('./routes/run-simulation');
|
2025-04-28 16:41:21 +08:00
|
|
|
|
const udpMonitorRoutes = require('./routes/udp-monitor');
|
2025-04-30 13:47:35 +08:00
|
|
|
|
const productsRoutes = require('./routes/products');
|
2025-04-30 14:50:27 +08:00
|
|
|
|
const interfaceRoutes = require('./routes/interface-config');
|
2025-05-07 13:46:48 +08:00
|
|
|
|
const icdImportRoutes = require('./routes/icd-import');
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
const app = express();
|
|
|
|
|
const PORT = process.env.PORT || 3000;
|
|
|
|
|
|
|
|
|
|
// 获取XNCore环境变量
|
|
|
|
|
const xnCorePath = process.env.XNCore || '';
|
|
|
|
|
if (!xnCorePath) {
|
|
|
|
|
console.error('警告: 环境变量XNCore未设置,可能无法找到登录动态库');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 中间件
|
|
|
|
|
app.use(bodyParser.json());
|
|
|
|
|
app.use(express.static(path.join(__dirname, '.')));
|
|
|
|
|
|
|
|
|
|
// 监听进程退出事件
|
|
|
|
|
process.on('exit', performCleanup);
|
|
|
|
|
process.on('SIGINT', () => {
|
|
|
|
|
console.log('收到 SIGINT 信号');
|
|
|
|
|
performCleanup();
|
|
|
|
|
process.exit(0);
|
|
|
|
|
});
|
|
|
|
|
process.on('SIGTERM', () => {
|
|
|
|
|
console.log('收到 SIGTERM 信号');
|
|
|
|
|
performCleanup();
|
|
|
|
|
process.exit(0);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 处理未捕获的异常
|
|
|
|
|
process.on('uncaughtException', (error) => {
|
|
|
|
|
console.error('未捕获的异常:', error);
|
|
|
|
|
performCleanup();
|
|
|
|
|
process.exit(1);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 路由
|
|
|
|
|
app.use('/api', authRoutes);
|
|
|
|
|
app.use('/api', versionRoutes);
|
|
|
|
|
app.use('/api/filesystem', filesystemRoutes);
|
|
|
|
|
app.use('/api', systemInfoRoutes);
|
|
|
|
|
app.use('/api', scenarioRoutes);
|
|
|
|
|
app.use('/api', modelRoutes);
|
|
|
|
|
app.use('/api', serviceRoutes);
|
|
|
|
|
app.use('/api', serviceApiRoutes);
|
|
|
|
|
app.use('/api/idl', idlRoutes);
|
|
|
|
|
app.use('/api', projectModelRoutes);
|
|
|
|
|
app.use('/api', ataChaptersRoutes);
|
|
|
|
|
app.use('/api', simulationRoutes);
|
2025-04-28 16:41:21 +08:00
|
|
|
|
app.use('/api/udp-monitor', udpMonitorRoutes);
|
2025-04-30 13:47:35 +08:00
|
|
|
|
app.use('/api', productsRoutes);
|
2025-04-30 14:50:27 +08:00
|
|
|
|
app.use('/api/interface', interfaceRoutes);
|
2025-05-07 13:46:48 +08:00
|
|
|
|
app.use('/api/icd', icdImportRoutes);
|
2025-04-28 12:25:20 +08:00
|
|
|
|
|
|
|
|
|
// 主页路由
|
|
|
|
|
app.get('/', (req, res) => {
|
|
|
|
|
res.sendFile(path.join(__dirname, 'main.html'));
|
|
|
|
|
});
|
|
|
|
|
|
2025-04-30 14:50:27 +08:00
|
|
|
|
// 接口配置页面路由
|
|
|
|
|
app.get('/interface-config', (req, res) => {
|
|
|
|
|
res.sendFile(path.join(__dirname, 'interface-config.html'));
|
|
|
|
|
});
|
|
|
|
|
|
2025-04-28 12:25:20 +08:00
|
|
|
|
// 启动服务器
|
|
|
|
|
app.listen(PORT, () => {
|
|
|
|
|
console.log(`服务器运行在 http://localhost:${PORT}`);
|
|
|
|
|
});
|