socket.js 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. 'use strict';
  2. const { Controller } = require('ee-core');
  3. const Log = require('ee-core/log');
  4. const CoreWindow = require('ee-core/electron/window');
  5. const WebSocket = require('ws'); // 引入原生 ws 库
  6. let socket = null;
  7. const { pyapp } = require('../config/app.config.json')
  8. const typeToMessage = {
  9. run_mcu_single_finish:"seeting",
  10. get_deviation_data:"developer",
  11. set_deviation:"developer",
  12. }
  13. class SocketController extends Controller {
  14. constructor(ctx) {
  15. super(ctx);
  16. }
  17. /**
  18. * Connect to WebSocket server
  19. */
  20. async connect() {
  21. await new Promise(async (resolve,reject) => {
  22. const win = CoreWindow.getMainWindow()
  23. if(socket){
  24. console.log('has socket ')
  25. resolve(true);
  26. win.webContents.send('controller.socket.connect_open', true);
  27. return;
  28. }
  29. socket = new WebSocket('ws://'+pyapp+':7074/ws');
  30. // 监听连接成功事件
  31. socket.on('open', () => {
  32. console.log('socket open')
  33. resolve(true);
  34. win.webContents.send('controller.socket.connect_open', true);
  35. });
  36. // 监听消息事件
  37. socket.on('message', (data) => {
  38. try {
  39. let this_data = JSON.parse(data.toString());
  40. console.log(this_data.msg_type);
  41. console.log(this_data);
  42. if(this_data.msg_type){
  43. let channel = 'controller.socket.message_'+this_data.msg_type;
  44. if(typeToMessage[this_data.msg_type]){
  45. this.app.electron[typeToMessage[this_data.msg_type]].webContents.send(channel, this_data);
  46. }else{
  47. win.webContents.send(channel, this_data);
  48. }
  49. }
  50. }catch (e){
  51. console.log(e)
  52. }
  53. });
  54. // 监听连接关闭事件
  55. socket.on('close', () => {
  56. console.log('socket close');
  57. win.webContents.send('controller.socket.disconnect', null);
  58. socket = null
  59. });
  60. // 监听错误事件
  61. socket.on('error', (err) => {
  62. console.log('socket error');
  63. win.webContents.send('controller.socket.disconnect', null);
  64. reject(true);
  65. });
  66. console.log('socket end')
  67. })
  68. }
  69. /**
  70. * 发送 ping 消息
  71. */
  72. sendPing() {
  73. const message = JSON.stringify({ data: 'node', type: 'ping' });
  74. this.sendMessage(message);
  75. }
  76. /**
  77. * 发送消息到服务器
  78. * @param {string} message - JSON 字符串
  79. */
  80. sendMessage(message) {
  81. // 检查连接状态
  82. console.log(message);
  83. console.log(typeof socket);
  84. if (socket?.readyState === WebSocket.OPEN) {
  85. socket.send(message); // 使用 send() 发送
  86. } else {
  87. }
  88. }
  89. /**
  90. * 断开连接
  91. */
  92. disconnect() {
  93. if (socket) {
  94. socket.close(); // 使用 close() 方法
  95. socket = null;
  96. }
  97. }
  98. }
  99. SocketController.toString = () => '[class SocketController]';
  100. module.exports = SocketController;