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