'use strict'; const { Controller } = require('ee-core'); const Log = require('ee-core/log'); const CoreWindow = require('ee-core/electron/window'); const WebSocket = require('ws'); // 引入原生 ws 库 let socket = null; const { pyapp } = require('../config/app.config.json') const typeToMessage = { run_mcu_single_finish:"seeting", get_deviation_data:"developer", set_deviation:"developer", get_mcu_other_info:"developer", set_mcu_other_info:"developer", send_command:"developer" } class SocketController extends Controller { constructor(ctx) { super(ctx); } /** * Connect to WebSocket server */ async connect() { await new Promise(async (resolve,reject) => { const win = CoreWindow.getMainWindow() if(socket){ console.log('has socket ') resolve(true); win.webContents.send('controller.socket.connect_open', true); return; } socket = new WebSocket('ws://'+pyapp+':7074/ws'); // 监听连接成功事件 socket.on('open', () => { console.log('socket open') resolve(true); win.webContents.send('controller.socket.connect_open', true); }); // 监听消息事件 socket.on('message', (data) => { try { let this_data = JSON.parse(data.toString()); console.log(this_data.msg_type); console.log(this_data); if(this_data.msg_type){ let channel = 'controller.socket.message_'+this_data.msg_type; if(typeToMessage[this_data.msg_type]){ this.app.electron[typeToMessage[this_data.msg_type]].webContents.send(channel, this_data); }else{ win.webContents.send(channel, this_data); } } }catch (e){ console.log(e) } }); // 监听连接关闭事件 socket.on('close', () => { console.log('socket close'); win.webContents.send('controller.socket.disconnect', null); socket = null }); // 监听错误事件 socket.on('error', (err) => { console.log('socket error'); win.webContents.send('controller.socket.disconnect', null); reject(true); }); console.log('socket end') }) } /** * 发送 ping 消息 */ sendPing() { const message = JSON.stringify({ data: 'node', type: 'ping' }); this.sendMessage(message); } /** * 发送消息到服务器 * @param {string} message - JSON 字符串 */ sendMessage(message) { // 检查连接状态 console.log(message); console.log(typeof socket); if (socket?.readyState === WebSocket.OPEN) { socket.send(message); // 使用 send() 发送 } else { } } /** * 断开连接 */ disconnect() { if (socket) { socket.close(); // 使用 close() 方法 socket = null; } } } SocketController.toString = () => '[class SocketController]'; module.exports = SocketController;