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); }
private ThriftyResponse Execute(ThriftyRequest request, Ribbon.Server server, ClientSslConfig sslConfig) { var func = _methodCache.GetOrAdd(request.Method, CreateFunc); _logger.LogDebug(new EventId(0, "ThriftyClient"), $"use {server}"); var discoveryEnabledServer = server as DiscoveryEnabledServer; var host = discoveryEnabledServer == null ? server.Host : discoveryEnabledServer.InstanceInfo.IpAddr; var port = discoveryEnabledServer?.Port ?? server.Port; var address = string.Compare("localhost", host, StringComparison.OrdinalIgnoreCase) == 0 ? IPAddress.Loopback : IPAddress.Parse(host); var key = new ChannelKey(new IPEndPoint(address, port), sslConfig, request.ConnectTimeout, request.ReveiveTimeout, request.WriteTimeout, request.ReadTimeout); using (var channel = new PooledClientChannel(this._channelPools, key)) { var proxy = GetStub(request, key, channel); var result = func(proxy, request.Args); return(new ThriftyResponse(result, true)); } }