internal void InternalProcessMessage (ClientConnection connection)
		{
			// Reads the headers and the request stream

			Stream requestStream;
			ITransportHeaders requestHeaders;

			requestStream = TcpMessageIO.ReceiveMessageStream (connection.Stream, out requestHeaders, connection.Buffer);
			requestHeaders [CommonTransportKeys.IPAddress] = connection.ClientAddress;
			requestHeaders [CommonTransportKeys.ConnectionId] = connection.Id;

			string uri = (string) requestHeaders [CommonTransportKeys.RequestUri];
			TcpChannel.ParseChannelUrl (uri, out uri);
			
			if (uri != null)
				requestHeaders [CommonTransportKeys.RequestUri] = uri;
			
			// Pushes the connection object together with the sink. This information
			// will be used for sending the response in an async call.

			ServerChannelSinkStack sinkStack = new ServerChannelSinkStack();
			sinkStack.Push(this, connection);

			ITransportHeaders responseHeaders;
			Stream responseStream;
			IMessage responseMsg;

			ServerProcessing proc = next_sink.ProcessMessage(sinkStack, null, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream);

			switch (proc)
			{
				case ServerProcessing.Complete:
					TcpMessageIO.SendMessageStream (connection.Stream, responseStream, responseHeaders, connection.Buffer);
					break;

				case ServerProcessing.Async:
				case ServerProcessing.OneWay:
					break;
			}
		}
Exemplo n.º 2
0
		void WaitForConnections ()
		{
			try
			{
#if !TARGET_JVM
				while(true)
#else
				while(!stopped)
#endif
				{
					Socket socket = listener.AcceptSocket ();
					ClientConnection reader = new ClientConnection (this, socket, sink);
					try {
						if (!threadPool.RunThread (new ThreadStart (reader.ProcessMessages)))
							socket.Close ();
					} catch (Exception) 
					{
#if DEBUG
						Console.WriteLine("Exception caught in TcpServerChannel.WaitForConnections during start process message: {0} {1}", e.GetType(), e.Message);
#endif
					}
				}
			}
			catch (Exception)
			{
#if DEBUG
				Console.WriteLine("Exception caught in TcpServerChannel.WaitForConnections, stop channel's thread : {0} {1}", e.GetType(), e.Message);
#endif
			}
		}
		void WaitForConnections ()
		{
			try
			{
				while (true) 
				{
					Socket socket = listener.AcceptSocket ();
					ClientConnection reader = new ClientConnection (this, socket, sink);
					try {
						if (!threadPool.RunThread (new ThreadStart (reader.ProcessMessages)))
							socket.Close ();
					} catch {}
				}
			}
			catch
			{}
		}