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"); } } }
public FastRpcClient(IPAddress ip, int port) { ServerIP = ip; ServerPort = port; _client = (SimpleRpcClient)SimpleRpcClientPoolRoot.Depool(ip, port); }
public void Close() { if (_client == null) { return; } var oldValue = Interlocked.Exchange(ref _client, null); if (oldValue == null) { return; } var cacheResult = SimpleRpcClientPoolRoot.ReturnItem(oldValue); if (cacheResult == false) { try { oldValue.Dispose(); } catch { LogAgent.Error("SimpleRpcCLient Dispose error"); } } }