示例#1
0
 public Task <TNiftyClientChannelTransport> ConnectAsync <TChannel, TClient>(
     INiftyClientConnector <TChannel> clientChannelConnector,
     TimeSpan?connectTimeout,
     TimeSpan?receiveTimeout,
     TimeSpan?readTimeout,
     TimeSpan?sendTimeout,
     int maxFrameSize,
     ClientSslConfig sslConfig,
     EndPoint socksProxyAddress)
     where TChannel : INiftyClientChannel
 {
     return(ConnectAsync(
                clientChannelConnector,
                connectTimeout,
                receiveTimeout,
                readTimeout,
                sendTimeout,
                maxFrameSize,
                sslConfig,
                socksProxyAddress)
            .ContinueWith(t =>
     {
         try
         {
             return new TNiftyClientChannelTransport(typeof(TClient), t.GetAwaiter().GetResult());
         }
         catch (Exception e)
         {
             throw new ThriftyTransportException($"Failed to establish client connection.{Environment.NewLine}{e.Message}", e, ThriftyTransportException.ExceptionType.NotOpen);
         }
     }));
 }
示例#2
0
        //private IChannelGroup allChannels = new DefaultChannelGroup();

        public Task <T> ConnectAsync <T>(
            INiftyClientConnector <T> clientChannelConnector, ClientSslConfig sslConfig)
            where T : INiftyClientChannel
        {
            return(this.ConnectAsync(clientChannelConnector,
                                     DefaultConnectTimeout,
                                     DefaultReceiveTimeout,
                                     DefaultReadTimeout,
                                     DefaultSendTimeout,
                                     DefaultMaxFrameSize,
                                     sslConfig,
                                     this.DefaultSocksProxyAddress));
        }
示例#3
0
 public Task <T> ConnectAsync <T>(
     INiftyClientConnector <T> clientChannelConnector,
     TimeSpan?connectTimeout,
     TimeSpan?receiveTimeout,
     TimeSpan?readTimeout,
     TimeSpan?sendTimeout,
     ClientSslConfig sslConfig,
     int maxFrameSize)
     where T : INiftyClientChannel
 {
     return(ConnectAsync(clientChannelConnector,
                         connectTimeout,
                         receiveTimeout,
                         readTimeout,
                         sendTimeout,
                         maxFrameSize,
                         sslConfig,
                         this.DefaultSocksProxyAddress));
 }
示例#4
0
        public Task <T> ConnectAsync <T>(
            INiftyClientConnector <T> clientChannelConnector,
            TimeSpan?connectTimeout,
            TimeSpan?receiveTimeout,
            TimeSpan?readTimeout,
            TimeSpan?sendTimeout,
            int maxFrameSize,
            ClientSslConfig sslConfig,
            EndPoint socksProxyAddress)
            where T : INiftyClientChannel
        {
            this.ThrowIfDisposed();
            Guard.ArgumentNotNull(clientChannelConnector, nameof(clientChannelConnector));

            Bootstrap bootstrap = new Bootstrap();

            bootstrap.Group(this.WorkerExecutor)
            .Channel <TcpSocketChannel>()
            .Option(ChannelOption.TcpNodelay, true);

            if (connectTimeout != null)
            {
                bootstrap.Option(ChannelOption.ConnectTimeout, connectTimeout.Value);
            }
            bootstrap.Handler(new ActionChannelInitializer <ISocketChannel>(channel =>
            {
                clientChannelConnector.ConfigureChannelPipeline(channel.Pipeline, maxFrameSize, this.NettyClientConfig, sslConfig);
            }));
            Task <IChannel> connectTask = clientChannelConnector.ConnectAsync(bootstrap);

            return(connectTask.ContinueWith(t =>
            {
                if (t.Exception == null && t.Result != null && t.Result.Open)
                {
                    _allChannel.Add(t.GetAwaiter().GetResult());
                }
                if (t.Exception != null)
                {
                    _logger.LogError(nameof(EventId), t.Exception, "Failed to establish client connection.");
                }
                return CreateNiftyClientChannel(clientChannelConnector, receiveTimeout, readTimeout, sendTimeout, t);
            }));
        }
示例#5
0
 public Task <TNiftyClientChannelTransport> ConnectAsync <T, TClient>(
     INiftyClientConnector <T> clientChannelConnector,
     TimeSpan?connectTimeout,
     TimeSpan?receiveTimeout,
     TimeSpan?readTimeout,
     TimeSpan?sendTimeout,
     int maxFrameSize,
     ClientSslConfig sslConfig)
     where T : INiftyClientChannel
 {
     return(ConnectAsync <T, TClient>(
                clientChannelConnector,
                connectTimeout,
                receiveTimeout,
                readTimeout,
                sendTimeout,
                maxFrameSize,
                sslConfig,
                (EndPoint)null));
 }
示例#6
0
        public void ConfigureChannelPipeline(IChannelPipeline pipeline, int maxFrameSize, NettyClientConfig clientConfig, ClientSslConfig sslConfig)
        {
            if (sslConfig != null)
            {
                RemoteCertificateValidationCallback validationCallback = sslConfig.ValidateServerCertificate;

                pipeline.AddLast("tls",
                                 new TlsHandler(stream => new SslStream(stream, true, validationCallback),
                                                new ClientTlsSettings(this.ServerAddress.GetHost())));
            }
            this.OnConfigureChannelPipeline(pipeline, maxFrameSize, clientConfig);
        }