socket.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. class SocketController extends Controller {
  8. constructor(ctx) {
  9. super(ctx);
  10. }
  11. /**
  12. * Connect to WebSocket server
  13. */
  14. connect() {
  15. socket = new WebSocket('ws://10.56.42.176:7074/ws');
  16. const win = CoreWindow.getMainWindow()
  17. // 监听连接成功事件
  18. socket.on('open', () => {
  19. console.log('socket open')
  20. // this.sendPing(); // 连接成功后发送 ping
  21. // win.webContents.send('controller.socket.connect', true);
  22. return true;
  23. });
  24. // 监听消息事件
  25. socket.on('message', (data) => {
  26. console.log('socket message')
  27. Log.info('Received:', data.toString());
  28. win.webContents.send('controller.socket.message', data.toString());
  29. });
  30. // 监听连接关闭事件
  31. socket.on('close', () => {
  32. console.log('socket close')
  33. Log.info('Disconnected from socket server');
  34. });
  35. // 监听错误事件
  36. socket.on('error', (err) => {
  37. console.log('socket error')
  38. Log.error('socketError:', err);
  39. });
  40. }
  41. /**
  42. * 发送 ping 消息
  43. */
  44. sendPing() {
  45. const message = JSON.stringify({ data: 'node', type: 'ping' });
  46. this.sendMessage(message);
  47. }
  48. /**
  49. * 发送消息到服务器
  50. * @param {string} message - JSON 字符串
  51. */
  52. sendMessage(message) {
  53. // 检查连接状态
  54. console.log('sendMessage');
  55. console.log(message);
  56. console.log(typeof socket);
  57. if (socket?.readyState === WebSocket.OPEN) {
  58. socket.send(message); // 使用 send() 发送
  59. } else {
  60. Log.error('socket未连接或未就绪');
  61. }
  62. }
  63. /**
  64. * 断开连接
  65. */
  66. disconnect() {
  67. console.log('disconnect');
  68. if (socket) {
  69. socket.close(); // 使用 close() 方法
  70. socket = null;
  71. }
  72. }
  73. }
  74. SocketController.toString = () => '[class SocketController]';
  75. module.exports = SocketController;