socket.js 2.8 KB

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