Esempio n. 1
0
 public PooledClientChannel(IClientConnectionPool pool, ChannelKey key)
 {
     Guard.ArgumentNotNull(pool, nameof(pool));
     _pool         = pool;
     _innerChannel = _pool.BorrowChannel(key);
     this._key     = key;
 }
        public object CreateClient(INiftyClientChannel channel, Type clientType, ThriftClientMetadata clientMetadata, IEnumerable <ThriftClientEventHandler> clientHandlers, string clientDescription)
        {
            var fake = new Fake(clientDescription, clientMetadata, channel,
                                ImmutableList.CreateRange(clientHandlers).ToImmutableList());
            var instance = Creator.Create(clientType, fake);

            return(instance);
        }
Esempio n. 3
0
        private object GetStub(ThriftyRequest request, ChannelKey key, INiftyClientChannel channel)
        {
            var method  = request.Method;
            var service = method.DeclaringType;
            var client  = _thriftClientManager.CreateClient(channel, service, $"{service.Name }{key}", _swiftyClientOptions.EventHandlers);

            request.Stub       = client;
            request.ChannelKey = key;
            return(client);
        }
Esempio n. 4
0
 public void Dispose()
 {
     if (!_disposed)
     {
         _disposed = true;
         _innerChannel.WaitForFree();
         _pool.ReturnChannel(this._key, _innerChannel);
         _innerChannel = null;
         _pool         = null;
     }
 }
        public TNiftyClientChannelTransport(Type clientType, INiftyClientChannel channel)
        {
            Guard.ArgumentNotNull(clientType, nameof(clientType));
            this._clientClass = clientType;
            this._channel     = channel;

            this._methodNameToOneWay     = new Dictionary <string, bool>();
            this._requestBufferTransport = new TChannelBufferOutputTransport();
            //think: Unpooled 0 是否不需要释放资源?
            this._responseBufferTransport = new TChannelBufferInputTransport(Unpooled.Buffer(0, 0));
            this._queuedResponses         = new ConcurrentQueue <ResponseListener>();
        }
Esempio n. 6
0
        public Task <Object> CreateClientAsync <TChannel>(
            INiftyClientConnector <TChannel> connector,
            Type clientType,
            TimeSpan?connectTimeout,
            TimeSpan?receiveTimeout,
            TimeSpan?readTimeout,
            TimeSpan?writeTimeout,
            int maxFrameSize,
            string clientName,
            ClientSslConfig sslConfig,
            IEnumerable <ThriftClientEventHandler> eventHandlers,
            EndPoint socksProxy)
            where TChannel : INiftyClientChannel
        {
            this.ThrowIfDisposed();
            Guard.ArgumentNotNull(connector, nameof(connector));
            Guard.ArgumentNotNull(clientType, nameof(clientType));

            eventHandlers = eventHandlers ?? Enumerable.Empty <ThriftClientEventHandler>();

            var connectFuture = this.CreateChannelAsync(
                connector,
                connectTimeout,
                receiveTimeout,
                readTimeout,
                writeTimeout,
                maxFrameSize,
                sslConfig,
                socksProxy);

            return(connectFuture.ContinueWith(t =>
            {
                String name = String.IsNullOrWhiteSpace(clientName) ? DefaultClientName : clientName;
                INiftyClientChannel channel = null;
                try
                {
                    channel = t.Result;
                    return this.CreateClient(channel, clientType, name, eventHandlers);
                }
                catch (AggregateException ex)
                {
                    _logger.LogError(0, ex, $"create clinet channel fault.");
                    // The channel was created successfully, but client creation failed so the
                    // channel must be closed now
                    channel?.CloseAsync();
                    throw;
                }
            }));
        }
Esempio n. 7
0
 public Task CloseAsync()
 {
     ThrowIfDisposed();
     if (_innerChannel != null)
     {
         var channel = _innerChannel;
         _innerChannel = null;
         return(Task.Run(() =>
         {
             channel.WaitForFree();
             _pool.ReturnChannel(_key, channel);
         }));
     }
     return(Task.FromResult(0));
 }
Esempio n. 8
0
        public object CreateClient(INiftyClientChannel channel, Type clientType, String name, IEnumerable <ThriftClientEventHandler> eventHandlers)
        {
            this.ThrowIfDisposed();
            Guard.ArgumentNotNull(channel, nameof(channel));
            Guard.ArgumentNotNull(clientType, nameof(clientType));
            Guard.ArgumentNullOrWhiteSpaceString(name, nameof(name));

            if (!channel.NettyChannel.Active || channel.HasError)
            {
                throw new ThriftyTransportException($"fault to connect swifty server : {channel.NettyChannel.RemoteAddress}", ThriftyTransportException.ExceptionType.NotOpen);
            }

            eventHandlers = eventHandlers ?? Enumerable.Empty <ThriftClientEventHandler>();

            ThriftClientMetadata clientMetadata = clientMetadataCache.GetOrAdd(new TypeAndName(clientType, name), this.Load);

            String clientDescription = $"{clientMetadata.Name} {channel.ToString()}";

            var allHandlers = globalEventHandlers.Concat(eventHandlers).ToArray();

            return(_thriftClientFactory.CreateClient(channel, clientType, clientMetadata, allHandlers, clientDescription));
        }
Esempio n. 9
0
 public void ReturnChannel(INiftyClientChannel channel)
 {
     channel.CloseAsync();
 }
 public IoThreadBoundTimerTask(INiftyClientChannel channel, ITimerTask timerTask)
 {
     this.channel   = channel;
     this.timerTask = timerTask;
 }
 public IoThreadBoundTimerTask(INiftyClientChannel channel, Action <ITimeout> timerTask)
     : this(channel, new ITimerExtensions.DelegateTimerTask(timerTask))
 {
 }