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); }
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); }
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>(); }
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; } })); }
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)); }
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)); }
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)) { }