Sink = sink;
}
+ public void Process ()
+ {
+ HttpServer.ProcessRequest (this);
+ }
+
public Stream InputStream;
public Stream OutputStream;
public HttpServerTransportSink Sink;
internal sealed class HttpServer
{
- public static void ProcessRequest (object reqInfo)
+ public static void ProcessRequest (RequestArguments reqArg)
{
- if(reqInfo as RequestArguments == null)
- return;
-
- RequestArguments reqArg = (RequestArguments)reqInfo;
-
//Step (1) Start Reciceve the header
ArrayList Headers = RecieveHeader (reqArg);
private TcpListener _tcpListener;
private Thread _listenerThread;
private bool _bListening = false; // are we listening at the moment?
- // to start listening, that will get set here.
- private AutoResetEvent _waitForStartListening = new AutoResetEvent(false);
+
+ RemotingThreadPool threadPool;
public HttpServerChannel() : base()
{
while(true)
{
Socket socket = _tcpListener.AcceptSocket();
- RequestArguments reqArg = new RequestArguments (socket, _transportSink);
- ThreadPool.QueueUserWorkItem (new WaitCallback (HttpServer.ProcessRequest), reqArg);
+ RequestArguments request = new RequestArguments (socket, _transportSink);
+ threadPool.RunThread (new ThreadStart (request.Process));
}
-
- }
+ }
+
public void StartListening (Object data)
{
- _tcpListener = new TcpListener (_bindToAddr, _port);
+ if (_bListening) return;
+
+ threadPool = RemotingThreadPool.GetSharedPool ();
- if(!_bListening)
- _tcpListener.Start();
+ _tcpListener = new TcpListener (_bindToAddr, _port);
+ _tcpListener.Start();
if (_port == 0) {
_port = ((IPEndPoint)_tcpListener.LocalEndpoint).Port;
{
_listenerThread.Abort ();
_tcpListener.Stop();
+ threadPool.Free ();
}
_bListening = false;
public void AddHookChannelUri (String channelUri)
{
- string [] uris = _channelData.ChannelUris;
-
string [] newUris = new string[1] { channelUri };
_channelData.ChannelUris = newUris;
_wantsToListen = false;
}
catch (Exception ex)
{
- Console.WriteLine (ex);
}
}