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; } }
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 {} }