/// <summary>
        /// 创建客户端。
        /// </summary>
        /// <param name="endPoint">终结点。</param>
        /// <returns>传输客户端实例。</returns>
        public ITransportClient CreateClient(EndPoint endPoint)
        {
            var key = endPoint;

            if (_logger.IsEnabled(LogLevel.Debug))
            {
                _logger.LogDebug($"准备为服务端地址:{key}创建客户端。");
            }
            try
            {
                return(_clients.GetOrAdd(key
                                         , k => new Lazy <ITransportClient>(() =>
                {
                    //var bootstrap = _bootstrap;
                    IChannel channel = new HeartBeatsClient().Connect(key, 3);
                    var messageListener = new MessageListener();
                    channel.GetAttribute(messageListenerKey).Set(messageListener);
                    var messageSender = new DotNettyMessageClientSender(_transportMessageEncoder, channel);
                    channel.GetAttribute(messageSenderKey).Set(messageSender);
                    channel.GetAttribute(origEndPointKey).Set(k);

                    var client = new TransportClient(messageSender, messageListener, _logger, _serviceExecutor);
                    return client;
                }
                                                                            )).Value);
            }
            catch
            {
                _clients.TryRemove(key, out var value);
                throw;
            }
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            int port    = 8808;
            var channel = new HeartBeatsClient().Connect("127.0.0.1", port, 3);

            Console.ReadLine();

            channel.CloseAsync().Wait();
        }