private void TransportKeepAlive() { if (_client.IsSocketConnected == false) { try { _client.Close(); } catch { } } if (_client.TransportState == TcpTransportState.Closed) { var oldClient = _client; if (oldClient == null) { throw new RpcException("FastRpcClient TransportKeepAlive failed,client has been been closed"); } var newClient = (SimpleRpcClient)SimpleRpcClientPoolRoot.Depool(ServerIP, ServerPort); var originalClient = Interlocked.CompareExchange(ref _client, newClient, oldClient); if (originalClient != oldClient) { SimpleRpcClientPoolRoot.Enpool(newClient); throw new RpcException("FastRpcClient TransportKeepAlive failed,client has been been closed"); } } }
public void Close() { var originalClient = Interlocked.Exchange(ref _client, null); if (originalClient == null) { return; } if (originalClient.TransportState == TcpTransportState.Closed) { return; } var cacheResult = SimpleRpcClientPoolRoot.Enpool(originalClient); if (cacheResult == false) { try { originalClient.Dispose(); } catch { LogAgent.Warn("SimpleRpcClient Dispose error"); } } }