public SuperSocketSocketClient(ILogger <SuperSocketSocketClient> logger, IFluentSocketApplication app, ISocketSessionBuilder socketSessionBuilder, ClientSetting setting)
        {
            _logger = logger;
            _app    = app;
            _socketSessionBuilder = socketSessionBuilder;

            _setting = setting;
            if (!_setting.ExtraSettings.Any())
            {
                _setting.ExtraSettings.Add(new SuperSocketClientSetting());
            }
            _extraSetting = (SuperSocketClientSetting)_setting.ExtraSettings.FirstOrDefault();

            _cts = new CancellationTokenSource();

            _semaphoreSlim          = new SemaphoreSlim(1);
            _manualResetEventSlim   = new ManualResetEventSlim(true);
            _reqPushChannel         = SystemChannel.CreateBounded <PushReqPacket>(_setting.PushReqCapacity);
            _pushMessageHandlerDict = new ConcurrentDictionary <short, IPushMessageHandler>();
            _responseFutureDict     = new ConcurrentDictionary <int, ResponseFuture>();
        }
        public DotNettySocketServer(ILogger <DotNettySocketServer> logger, IFluentSocketApplication app, ISocketSessionBuilder socketSessionBuilder, ServerSetting setting)
        {
            _logger = logger;
            _app    = app;

            _setting = setting;
            if (!_setting.ExtraSettings.Any())
            {
                _setting.ExtraSettings.Add(new DotNettyServerSetting());
            }
            _extraSetting = (DotNettyServerSetting)_setting.ExtraSettings.FirstOrDefault();

            _socketSessionBuilder = socketSessionBuilder;
            _sessionFactory       = app.ServiceProvider.GetService <ISocketSessionFactory>();

            _cts = new CancellationTokenSource();
            _messageReqChannel = Channel.CreateBounded <MessageReqPacketWrapper>(_setting.MessageReqCapacity);

            _requestMessageHandlerDict = new ConcurrentDictionary <short, IRequestMessageHandler>();
            _services       = new ConcurrentDictionary <Type, ISocketService>();
            _pushFutureDict = new ConcurrentDictionary <int, PushFuture>();
            _channelDict    = new ConcurrentDictionary <string, IChannel>();
        }