public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream) { TcpConnection connection = null; try { if (requestHeaders == null) { requestHeaders = new TransportHeaders(); } requestHeaders [CommonTransportKeys.RequestUri] = ((IMethodMessage)msg).Uri; // Sends the message connection = TcpConnectionPool.GetConnection(_host, _port); TcpMessageIO.SendMessageStream(connection.Stream, requestStream, requestHeaders, connection.Buffer); connection.Stream.Flush(); // Reads the response MessageStatus status = TcpMessageIO.ReceiveMessageStatus(connection.Stream, connection.Buffer); if (status != MessageStatus.MethodMessage) { throw new RemotingException("Unknown response message from server"); } responseStream = TcpMessageIO.ReceiveMessageStream(connection.Stream, out responseHeaders, connection.Buffer); } finally { if (connection != null) { connection.Release(); } } }
private void CancelConnection(TcpConnection entry) { try { entry.Stream.Close(); _activeConnections--; } catch { } }
public void ReleaseConnection (TcpConnection entry) { lock (_pool) { entry.ControlTime = DateTime.Now; // Initialize timeout _pool.Add (entry); Monitor.Pulse (_pool); } }
private TcpConnection CreateConnection() { try { ReusableTcpClient client = new ReusableTcpClient(_host, _port); TcpConnection entry = new TcpConnection(this, client); _activeConnections++; return entry; } catch (Exception ex) { throw new RemotingException (ex.Message); } }