You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.7 KiB

Constructor.cs (自动转换为Markdown)

// 以下内容为原始C#代码,含详细注释
// 文件原路径:Managers/WebSocketMgr/Constructor.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 构造函数

        /// <summary>
        /// 构造函数 - 对应LTEClientWebSocket构造函数中的WebSocket相关初始化
        /// 
        /// 初始化说明:
        /// 1. 创建MessageIdManager替代原始的_messageId和_logGetId字段
        /// 2. 创建消息队列_messageFifo,保持与原始实现一致
        /// 3. 不初始化WebSocket实例,在Connect方法中创建
        /// 4. 移除_sentMessages和_receivedMessages的初始化
        /// 
        /// 对应关系:
        /// - 参数clientName:对应LTEClientWebSocket构造函数中的config.Name
        /// - 参数logger:对应LTEClientWebSocket构造函数中的logger参数
        /// - _messageIdManager:替代原始的_messageId和_logGetId字段
        /// - _messageFifo:对应原始的_messageFifo初始化
        /// - _disposed:对应原始的_disposed初始化
        /// - 日志记录:对应原始的构造函数日志记录
        /// 
        /// 重构改进:
        /// - 参数验证:增加了对clientName和logger的null检查
        /// - 职责分离:专注于WebSocket相关初始化
        /// - 功能增强:通过MessageIdManager提供更好的消息ID管理
        /// - 移除冗余:移除了消息缓存相关的初始化
        /// </summary>
        /// <param name="clientName">客户端名称,对应LTEClientWebSocket._config.Name</param>
        /// <param name="logger">日志记录器,对应LTEClientWebSocket._logger</param>
        public WebSocketMessageManager(string clientName, ILogger logger)
        {
            _clientName = clientName ?? throw new ArgumentNullException(nameof(clientName));
            _logger = logger ?? throw new ArgumentNullException(nameof(logger));

            // 创建MessageIdManager,替代原始的_messageId和_logGetId字段
            _messageIdManager = new MessageIdManager(clientName, logger);

            // 创建消息队列,使用BlockingCollection优化线程安全性和性能
            _messageFifo = new BlockingCollection<JObject>();

            _logger.LogInformation($"[{_clientName}] 创建WebSocket消息管理器");
        }

        #endregion
    }
}