using MoviconHub.App.Com; using MoviconHub.App.Models; using NLog; using ReaLTaiizor.Controls; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MoviconHub.App.Services { /// /// WebSocket客户端辅助类 /// public static class WebSocketClientHelper { private static WebSocketClient _webSocketClient; private static WebSocketConfig _webSocketConfig; private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); /// /// ScanTask扫描Task /// private static Task ScanTask { get; set; } /// /// 扫描线程使能 /// public static bool ThreadEnable { get; set; } = true; public static WebSocketData CurWebSocketData { get; set; } /// /// 初始化WebSocket客户端 /// public static async void Initialize() { _webSocketConfig = WebSocketConfig.LoadConfig(); _webSocketClient = new WebSocketClient(); // 注册事件处理程序 _webSocketClient.MessageReceived += OnMessageReceived; _webSocketClient.Connected += OnConnected; _webSocketClient.Disconnected += OnDisconnected; _webSocketClient.Error += OnError; await ConnectAsync(); Logger.Info("WebSocket客户端辅助类已初始化"); } /// ///发布实时数据 /// public static void PubRtDataStart() { ScanTask = Task.Run(async () => { while (ThreadEnable) { try { await Task.Delay(_webSocketConfig.Cycle * 1000); if (SendDeviceData(CurWebSocketData)) { } else { Logger.Info("WebSocket客户端发送设备"); } //SendDeviceData(CurWebSocketData); } catch (Exception ex) { } } }); } /// /// 消息接收事件 /// public static event EventHandler MessageReceived; /// /// 连接事件 /// public static event EventHandler Connected; /// /// 断开连接事件 /// public static event EventHandler Disconnected; /// /// 错误事件 /// public static event EventHandler Error; /// /// 连接到WebSocket服务器 /// /// 连接结果 public static async Task ConnectAsync() { if (_webSocketClient == null) { Initialize(); } return await _webSocketClient.ConnectAsync(); } /// /// 断开连接 /// public static void Disconnect() { ThreadEnable = false; _webSocketClient?.Disconnect(); } /// /// 发送设备状态数据 /// /// 状态数据 /// 是否发送成功 public static bool SendDeviceData(WebSocketData webSocketData) { if (_webSocketClient == null) { Initialize(); } return _webSocketClient.SendDeviceData(webSocketData); } /// /// 更新配置 /// /// 服务器地址 /// 端口 /// 设备编码 /// 是否重连 public static async Task UpdateConfig(string serverAddress, int port, string deviceCode, bool reconnect = true) { if (_webSocketClient == null) { Initialize(); } await _webSocketClient.UpdateConfig(serverAddress, port, deviceCode, reconnect); } /// /// 客户端是否已连接 /// public static bool IsConnected => _webSocketClient?.IsConnected ?? false; // 内部事件处理方法 private static void OnMessageReceived(object sender, WebSocketMessageEventArgs e) { Logger.Debug($"接收到消息:{e.RawMessage}"); MessageReceived?.Invoke(sender, e); } private static void OnConnected(object sender, WebSocketConnectEventArgs e) { Logger.Info($"已连接到WebSocket服务器 {e.ServerAddress}:{e.ServerPort}"); Connected?.Invoke(sender, e); } private static void OnDisconnected(object sender, WebSocketConnectEventArgs e) { Logger.Info($"已断开与WebSocket服务器 {e.ServerAddress}:{e.ServerPort} 的连接"); Disconnected?.Invoke(sender, e); } private static void OnError(object sender, WebSocketErrorEventArgs e) { Logger.Error(e.Exception, $"WebSocket错误: {e.ErrorMessage}"); Error?.Invoke(sender, e); } } }