Ver código fonte

refactor: world生成脚本调用数量变更为1 && 统一electron执行状态监听名称

HeWang 9 meses atrás
pai
commit
ec638ac860
3 arquivos alterados com 16 adições e 80 exclusões
  1. 12 43
      electron/main.js
  2. 4 4
      electron/preload.js
  3. 0 33
      src/views/ReportView.vue

+ 12 - 43
electron/main.js

@@ -140,49 +140,18 @@ ipcMain.on('docker-import', (event, filePath, tag) => {
 
 
 ipcMain.on('generate-world', (event, {rosbag_path}) => {
-
-    // 使用 spawn 启动脚本
-    const serviceProcess = spawn('bash', ["/home/cicv/work/pji_desktop/simulation/run_map2gazebo.sh"], { detached: true });
-
-    // 设置为后台进程
-    serviceProcess.unref();
-
-    // 监听输出
-    serviceProcess.stdout.on('data', (data) => {
-        console.log(`第一个脚本的输出: ${data}`);
-        // 根据第一个脚本的输出判断其是否准备好
-        if (data.toString().includes('Service map2gazebo started')) {
-            startSecondScript();
+    const command = 'bash /home/cicv/work/pji_desktop/simulation/generate_world.sh ' + rosbag_path
+    console.log('World generation command:', command);
+    exec(command, (error, stdout, stderr) => {
+        if (error) {
+            console.error(`exec error: ${error}`);
+            event.reply('generate-world-response', { success: false, message: error.message });
+        } else {
+            console.log(`stdout: ${stdout}`);
+            console.error(`stderr: ${stderr}`);
+            event.reply('generate-world-response', { success: true, message: 'World generated successfully' });
         }
     });
-
-    // 监听错误
-    serviceProcess.stderr.on('data', (data) => {
-        console.error(`执行第一个脚本时出错: ${data}`);
-    });
-
-    // 监听关闭
-    serviceProcess.on('close', (data) => {
-        console.log(`第一个脚本已关闭: ${data}`);
-    });
-
-    function startSecondScript() {
-        // 启动第二个脚本
-        const script2 = exec('bash /home/cicv/work/pji_desktop/simulation/play_rosbag.sh ' + rosbag_path, (error, stdout, stderr) => {
-            if (error) {
-                console.error(`执行第二个脚本时出错: ${error}`);
-                event.sender.send('generate-world-result', { success: false, output: error });
-                return;
-            }
-            console.log(`第二个脚本的输出: ${stdout}`);
-
-            event.sender.send('generate-world-result', { success: true, output: stdout });
-        });
-
-        script2.on('exit', (code) => {
-            console.log(`第二个脚本已退出,退出码: ${code}`);
-        });
-    }
 });
 
 
@@ -219,12 +188,12 @@ ipcMain.on('start-container', (event, {zip_file_path, image_name, container_name
         const script2 = exec(command, (error, stdout, stderr) => {
             if (error) {
                 console.error(`执行第二个脚本时出错: ${error}`);
-                event.sender.send('generate-world-result', { success: false, output: error });
+                event.sender.send('start-container-response', { success: false, output: error });
                 return;
             }
             console.log(`第二个脚本的输出: ${stdout}`);
 
-            event.sender.send('start-container-result', { success: true, output: stdout });
+            event.sender.send('start-container-response', { success: true, output: stdout });
         });
 
         script2.on('exit', (code) => {

+ 4 - 4
electron/preload.js

@@ -33,7 +33,7 @@ contextBridge.exposeInMainWorld('electronAPI', {
         // 发送事件到主进程,并带上文件路径和文件名作为参数
         ipcRenderer.send('docker-import', filePath, tag);
     },
-    onDockerImportResponse: (callback) => ipcRenderer.on('docker-import-response', callback),
+    onDockerImportResponse: (callback) => ipcRenderer.once('docker-import-response', callback),
     runSimulation: async (obstacle_flag, default_start_flag, default_end_flag, start_point, end_point) => {
         // 异步
         ipcRenderer.send('run-simulation', {obstacle_flag, default_start_flag, default_end_flag, start_point, end_point});
@@ -52,12 +52,12 @@ contextBridge.exposeInMainWorld('electronAPI', {
         // 发送事件到主进程
         ipcRenderer.send('generate-world', {rosbag_path});
     },
-    onGenerateWorldResponse: (callback) =>  ipcRenderer.on('generate-world-result', callback),
+    onGenerateWorldResponse: (callback) =>  ipcRenderer.once('generate-world-response', callback),
     startContainer: (zip_file_path, image_name, container_name) => {
         // 发送事件到主进程
         ipcRenderer.send('start-container', {zip_file_path, image_name, container_name});
     },
-    onStartContainerResponse: (callback) =>  ipcRenderer.on('start-container-result', callback),
+    onStartContainerResponse: (callback) =>  ipcRenderer.once('start-container-response', callback),
     downloadFile: async (url, fileName, savePath, overwriteFlag) => {
         try {
             return await ipcRenderer.invoke('download-file', { url, fileName, savePath, overwriteFlag });
@@ -67,7 +67,7 @@ contextBridge.exposeInMainWorld('electronAPI', {
         }
     },
     deleteFile: (fileName, savePath) => ipcRenderer.send('delete-file', {fileName, savePath}),
-    onDeleteFileResponse: (callback) => ipcRenderer.on('delete-file-response', callback),
+    onDeleteFileResponse: (callback) => ipcRenderer.once('delete-file-response', callback),
 
 });
 

+ 0 - 33
src/views/ReportView.vue

@@ -500,39 +500,6 @@ const handleSelectionChange = (rows: []) => {
   }
 }
 
-const gazebo = () => {
-  if (gazeboState.value) {
-    if (window.electronAPI) {
-      window.electronAPI.openGazebo(); // 关闭 gazebo
-    } else {
-      console.error('electronAPI is not defined');
-    }
-    // gazeboState.value = false
-  } else {
-    if (window.electronAPI) {
-      window.electronAPI.closeGazebo();
-    } else {
-      console.error('electronAPI is not defined');
-    }
-    // gazeboState.value = true
-  }
-}
-
-const rviz = () => {
-  if (rvizState.value) {
-    if (window.electronAPI) {
-      window.electronAPI.openRviz();
-    } else {
-      console.error('electronAPI is not defined');
-    }
-  } else {
-    if (window.electronAPI) {
-      window.electronAPI.closeRviz();
-    } else {
-      console.error('electronAPI is not defined');
-    }
-  }
-}
 
 // world文件生成
 const generateWorld = async (row) => {