コード例 #1
0
        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();
                }
            }
        }
コード例 #2
0
ファイル: TcpConnectionPool.cs プロジェクト: nlhepler/mono
		private void CancelConnection(TcpConnection entry)
		{
			try
			{
				entry.Stream.Close();
				_activeConnections--;
			}
			catch
			{
			}
		}
コード例 #3
0
ファイル: TcpConnectionPool.cs プロジェクト: nlhepler/mono
		public void ReleaseConnection (TcpConnection entry)
		{
			lock (_pool)
			{
				entry.ControlTime = DateTime.Now;	// Initialize timeout
				_pool.Add (entry);
				Monitor.Pulse (_pool);
			}
		}
コード例 #4
0
ファイル: TcpConnectionPool.cs プロジェクト: nlhepler/mono
		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);
			}
		}