using Microsoft.Extensions.Logging;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebSocket4Net;
namespace CoreAgent.ProtocolClient.Managers.WebSocketMgr
{
///
/// WebSocket消息管理器 - 处理WebSocket连接和消息传输
///
public partial class WebSocketMessageManager : IDisposable
{
#region 私有字段
// WebSocket连接实例
private WebSocket? _webSocket;
// 客户端名称
private readonly string _clientName;
// 日志记录器
private readonly ILogger _logger;
// 消息ID管理器
private readonly MessageIdManager _messageIdManager;
// 消息队列
private readonly BlockingCollection _messageFifo;
// 消息延迟发送定时器
private Timer? _messageDeferTimer;
// 释放标志
private bool _disposed;
// 同步锁对象
private readonly object _lockObject = new object();
#endregion
#region 事件
// 连接打开事件
public event EventHandler? ConnectionOpened;
// 连接关闭事件
public event EventHandler? ConnectionClosed;
// 连接错误事件
public event EventHandler? ConnectionError;
// 消息接收事件
public event EventHandler? MessageReceived;
// 消息发送事件
public event EventHandler? MessageSent;
#endregion
#region 属性
///
/// 是否已连接
///
public bool IsConnected => _webSocket?.State == WebSocketState.Open;
///
/// WebSocket状态
///
public WebSocketState State => _webSocket?.State ?? WebSocketState.None;
///
/// 是否已释放
///
public bool IsDisposed => _disposed;
///
/// 消息队列数量
///
public int MessageQueueCount => _messageFifo.Count;
///
/// 消息ID管理器
///
public MessageIdManager MessageIdManager => _messageIdManager;
#endregion
}
}