socket.js 2.1 KB

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