From daca971bf6de2020be00c6f0641494bd481bd091 Mon Sep 17 00:00:00 2001 From: Dr Scofield Date: Wed, 25 Jun 2008 13:10:12 +0000 Subject: further work on the HttpServer stuff. not functional yet. just sharing what crimes i'm committing. --- OpenSim/Framework/Servers/OSHttpServer.cs | 41 ++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'OpenSim/Framework/Servers/OSHttpServer.cs') diff --git a/OpenSim/Framework/Servers/OSHttpServer.cs b/OpenSim/Framework/Servers/OSHttpServer.cs index 3aa8042..296f853 100644 --- a/OpenSim/Framework/Servers/OSHttpServer.cs +++ b/OpenSim/Framework/Servers/OSHttpServer.cs @@ -50,8 +50,12 @@ namespace OpenSim.Framework.Servers // underlying HttpServer.HttpListener protected HttpListener _listener; + // underlying core/engine thread protected Thread _engine; + // Queue containing (OS)HttpRequests + protected OSHttpRequestQueue _queue; + // OSHttpRequestPumps "pumping" incoming OSHttpRequests // upwards protected OSHttpRequestPump[] _pumps; @@ -72,6 +76,11 @@ namespace OpenSim.Framework.Servers get { return _isSecure; } } + public int QueueSize + { + get { return _pumps.Length; } + } + /// /// Instantiate an HTTP server. /// @@ -80,17 +89,37 @@ namespace OpenSim.Framework.Servers _engineId = String.Format("OSHttpServer [HTTP:{0}/ps:{1}]", port, poolSize); _isSecure = false; - _pumps = OSHttpRequestPump.Pumps(this, poolSize); + _listener = new HttpListener(address, port); + _queue = new OSHttpRequestQueue(); + _pumps = OSHttpRequestPump.Pumps(this, _queue, poolSize); } /// /// Instantiate an HTTPS server. /// - public OSHttpServer(IPAddress address, int port, X509Certificate certificate, int poolSize) : - this(address, port, poolSize) + public OSHttpServer(IPAddress address, int port, X509Certificate certificate, int poolSize) { _engineId = String.Format("OSHttpServer [HTTPS:{0}/ps:{1}]", port, poolSize); _isSecure = true; + + _listener = new HttpListener(address, port, certificate); + _queue = new OSHttpRequestQueue(); + _pumps = OSHttpRequestPump.Pumps(this, _queue, poolSize); + } + + /// + /// Turn an HttpRequest into an OSHttpRequestItem and place it + /// in the queue. The OSHttpRequestQueue object will pulse the + /// next available idle pump. + /// + protected void OnHttpRequest(HttpClientContext client, HttpRequest request) + { + // turn request into OSHttpRequest + OSHttpRequest req = new OSHttpRequest(client, request); + + // place OSHttpRequest into _httpRequestQueue, will + // trigger Pulse to idle waiting pumps + _queue.Enqueue(req); } /// @@ -102,6 +131,7 @@ namespace OpenSim.Framework.Servers _engine.Name = _engineId; _engine.IsBackground = true; _engine.Start(); + ThreadTracker.Add(_engine); } @@ -111,9 +141,12 @@ namespace OpenSim.Framework.Servers { while (true) { - // do stuff + _listener.RequestHandler += OnHttpRequest; + _listener.Start(QueueSize); } } + + } } -- cgit v1.1