socket.js 2.4 KB

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