|
|
|
# Dispose.cs (自动转换为Markdown)
|
|
|
|
|
|
|
|
```csharp
|
|
|
|
// 以下内容为原始C#代码,含详细注释
|
|
|
|
// 文件原路径:Managers/WebSocketMgr/Dispose.cs
|
|
|
|
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
|
|
|
|
{
|
|
|
|
public partial class WebSocketMessageManager
|
|
|
|
{
|
|
|
|
#region IDisposable实现
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 释放资源 - 对应LTEClientWebSocket.Dispose()方法
|
|
|
|
///
|
|
|
|
/// 功能说明:
|
|
|
|
/// 1. 释放WebSocket连接和相关资源
|
|
|
|
/// 2. 清理消息队列和定时器
|
|
|
|
/// 3. 设置释放标志,防止重复释放
|
|
|
|
/// 4. 调用MessageIdManager的Dispose方法
|
|
|
|
///
|
|
|
|
/// 对应关系:
|
|
|
|
/// - 资源释放:对应原始实现中的Dispose()方法
|
|
|
|
/// - 连接关闭:对应原始实现中的WebSocket关闭逻辑
|
|
|
|
/// - 定时器清理:对应原始实现中的定时器释放逻辑
|
|
|
|
/// - 队列清理:对应原始实现中的队列清理逻辑
|
|
|
|
/// - 释放标志:对应原始实现中的_disposed设置
|
|
|
|
/// - 日志记录:对应原始实现中的释放日志记录
|
|
|
|
///
|
|
|
|
/// 重构改进:
|
|
|
|
/// - 更清晰的资源释放顺序
|
|
|
|
/// - 更完善的异常处理
|
|
|
|
/// - 更详细的日志记录
|
|
|
|
/// - 保持了完全一致的释放逻辑
|
|
|
|
/// </summary>
|
|
|
|
public void Dispose()
|
|
|
|
{
|
|
|
|
Dispose(true);
|
|
|
|
GC.SuppressFinalize(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 释放资源的受保护方法 - 实现标准的Dispose模式
|
|
|
|
///
|
|
|
|
/// 功能说明:
|
|
|
|
/// 1. 实现标准的Dispose模式,支持手动释放和垃圾回收
|
|
|
|
/// 2. 确保资源只被释放一次
|
|
|
|
/// 3. 按照正确的顺序释放资源
|
|
|
|
///
|
|
|
|
/// 对应关系:
|
|
|
|
/// - 释放模式:对应.NET标准的Dispose模式
|
|
|
|
/// - 资源清理:对应原始实现中的资源清理逻辑
|
|
|
|
/// - 异常处理:对应原始实现中的异常处理
|
|
|
|
///
|
|
|
|
/// 重构改进:
|
|
|
|
/// - 标准的Dispose模式实现
|
|
|
|
/// - 更安全的资源管理
|
|
|
|
/// - 更好的异常处理
|
|
|
|
/// - 保持了完全一致的清理逻辑
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="disposing">是否为手动释放</param>
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
|
|
{
|
|
|
|
if (_disposed)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if (disposing)
|
|
|
|
{
|
|
|
|
try
|
|
|
|
{
|
|
|
|
_logger.LogInformation($"[{_clientName}] 释放WebSocket消息管理器资源");
|
|
|
|
|
|
|
|
// 停止消息发送定时器 - 对应原始实现中的定时器释放
|
|
|
|
StopMessageDeferTimer();
|
|
|
|
|
|
|
|
// 清空消息队列 - 对应原始实现中的队列清理
|
|
|
|
ClearMessageQueue();
|
|
|
|
|
|
|
|
// 释放BlockingCollection资源 - 优化:确保BlockingCollection正确释放
|
|
|
|
_messageFifo?.Dispose();
|
|
|
|
|
|
|
|
// 关闭WebSocket连接 - 对应原始实现中的WebSocket关闭
|
|
|
|
if (_webSocket != null)
|
|
|
|
{
|
|
|
|
_webSocket.Close();
|
|
|
|
_webSocket = null;
|
|
|
|
}
|
|
|
|
|
|
|
|
// 释放MessageIdManager - 对应原始实现中的相关资源释放
|
|
|
|
_messageIdManager?.Dispose();
|
|
|
|
}
|
|
|
|
catch (Exception ex)
|
|
|
|
{
|
|
|
|
_logger.LogError(ex, $"[{_clientName}] 释放资源异常: {ex.Message}");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
_disposed = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
}
|