diff --git a/Release/database/XNSim.db b/Release/database/XNSim.db index a0d80ed..7167d3b 100644 Binary files a/Release/database/XNSim.db and b/Release/database/XNSim.db differ diff --git a/XNMonitorServer/CSVDataInjectThread.cpp b/XNMonitorServer/CSVDataInjectThread.cpp index 3775055..7b3b052 100644 --- a/XNMonitorServer/CSVDataInjectThread.cpp +++ b/XNMonitorServer/CSVDataInjectThread.cpp @@ -118,6 +118,11 @@ void CSVDataInjectThread::updateData() } } +bool CSVDataInjectThread::isRunning() const +{ + return m_running; +} + void CSVDataInjectThread::threadFunc() { // 读取第一行数据 diff --git a/XNMonitorServer/CSVDataInjectThread.h b/XNMonitorServer/CSVDataInjectThread.h index 4158683..9be1181 100644 --- a/XNMonitorServer/CSVDataInjectThread.h +++ b/XNMonitorServer/CSVDataInjectThread.h @@ -42,6 +42,8 @@ public: */ void updateData(); + bool isRunning() const; + private: /** * @brief 线程执行函数 diff --git a/XNMonitorServer/XNMonitorInterface.cpp b/XNMonitorServer/XNMonitorInterface.cpp index b51b93a..bfde074 100644 --- a/XNMonitorServer/XNMonitorInterface.cpp +++ b/XNMonitorServer/XNMonitorInterface.cpp @@ -651,6 +651,21 @@ int XNMONITORSERVER_EXPORT XN_InjectDataInterfaceFromCsv(const char *structName, return 0; } +int XN_GetCsvDataInjectStatus(char *infoMsg, int infoMsgSize) +{ + if (g_csvDataInjectThread == nullptr) { + if (infoMsg && infoMsgSize > 0) { + strncpy(infoMsg, "CSV 注入线程已不存在", infoMsgSize - 1); + infoMsg[infoMsgSize - 1] = '\0'; + } + return -1; + } + if (g_csvDataInjectThread->isRunning()) { + return 1; + } + return 0; +} + int XN_StopCsvDataInject(char *infoMsg, int infoMsgSize) { if (g_csvDataInjectThread == nullptr) { diff --git a/XNSimHtml/components/data-monitor.js b/XNSimHtml/components/data-monitor.js index 8fdb351..1b1eab1 100644 --- a/XNSimHtml/components/data-monitor.js +++ b/XNSimHtml/components/data-monitor.js @@ -412,6 +412,24 @@ class DataMonitor extends HTMLElement { this.dataUpdateTimer = setInterval(async () => { try { + // 检查CSV注入状态 + if (this.csvState.isInjecting) { + const csvStatusResponse = await fetch('/api/data-monitor/csv-inject-status'); + if (!csvStatusResponse.ok) { + throw new Error(`获取CSV注入状态失败: ${csvStatusResponse.status} ${csvStatusResponse.statusText}`); + } + const csvStatusData = await csvStatusResponse.json(); + console.log('CSV注入状态:', csvStatusData.data); + // 如果状态为0,触发停止注入 + if (csvStatusData.data === 0) { + // 模拟点击停止CSV注入按钮 + const csvInjectButton = this.shadowRoot.getElementById('csvInjectButton'); + if (csvInjectButton) { + csvInjectButton.click(); + } + } + } + // 检查DDS监控状态 const statusResponse = await fetch('/api/dds-monitor/status'); if (!statusResponse.ok) { diff --git a/XNSimHtml/routes/DataMonitor.js b/XNSimHtml/routes/DataMonitor.js index 59552db..5201415 100644 --- a/XNSimHtml/routes/DataMonitor.js +++ b/XNSimHtml/routes/DataMonitor.js @@ -367,4 +367,18 @@ router.post('/stop-csv-inject', async (req, res) => { } }); +/** + * @brief 获取CSV数据注入状态 + * @route GET /api/data-monitor/csv-inject-status + * @returns {Object} 返回CSV数据注入状态 + */ +router.get('/csv-inject-status', async (req, res) => { + try { + const result = systemMonitor.getCsvDataInjectStatus(); + res.json({ success: true, data: result }); + } catch (error) { + res.status(500).json({ success: false, message: `获取CSV数据注入状态失败: ${error.message}` }); + } +}); + module.exports = router; diff --git a/XNSimHtml/utils/xnCoreService.js b/XNSimHtml/utils/xnCoreService.js index 8567c71..b6d361a 100644 --- a/XNSimHtml/utils/xnCoreService.js +++ b/XNSimHtml/utils/xnCoreService.js @@ -61,7 +61,8 @@ try { 'XN_StartInjectContinuous': ['int', [StringType, 'int', StringType, 'int', 'double', StringType, 'int']], 'XN_StopInjectContinuous': ['int', [StringType, 'int', StringType, 'int']], 'XN_InjectDataInterfaceFromCsv': ['int', [StringType, 'int', StringType, 'int', StringType, 'int']], - 'XN_StopCsvDataInject': ['int', [StringType, 'int']] + 'XN_StopCsvDataInject': ['int', [StringType, 'int']], + 'XN_GetCsvDataInjectStatus': ['int', [StringType, 'int']] }); } catch (error) { console.error(`加载 ${monitorLibName} 失败:`, error); @@ -482,6 +483,24 @@ function stopCsvDataInject() { } } +// 获取CSV数据注入状态 +function getCsvDataInjectStatus() { + if (!monitorLib) { + return '监控服务器库未加载'; + } + try { + const infoMsg = Buffer.alloc(1024); + const result = monitorLib.XN_GetCsvDataInjectStatus(infoMsg, infoMsg.length); + + if (result === -1) { + return `获取状态失败: ${infoMsg.toString('utf8').replace(/\0/g, '')}`; + } + return result; // 直接返回result值 + } catch (error) { + return `获取状态失败: ${error.message}`; + } +} + module.exports = { loginLib, monitorLib, @@ -507,5 +526,6 @@ module.exports = { startInjectContinuous, stopInjectContinuous, injectDataInterfaceFromCsv, - stopCsvDataInject + stopCsvDataInject, + getCsvDataInjectStatus }; \ No newline at end of file