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);
}
}
}