more changes to PollService

avinationmerge
UbitUmarov 2012-09-26 03:05:27 +01:00
parent 5d986002fd
commit 654dd289f2
4 changed files with 26 additions and 26 deletions

View File

@ -47,6 +47,7 @@ namespace OpenSim.Framework.Servers.HttpServer
public UUID Id;
public int TimeOutms;
public EventType Type;
public bool GetEventsNeedsRequest = true;
public enum EventType : int
{

View File

@ -205,7 +205,7 @@ namespace OpenSim.Framework.Servers.HttpServer
String.Format("PollServiceWorkerThread{0}", i),
ThreadPriority.Normal,
false,
true,
false,
null,
int.MaxValue);
}
@ -344,35 +344,36 @@ namespace OpenSim.Framework.Servers.HttpServer
{
if (req.PollServiceArgs.HasEvents(req.RequestID, req.PollServiceArgs.Id))
{
try
string strreq = "";
if (req.PollServiceArgs.GetEventsNeedsRequest)
{
str = new StreamReader(req.Request.Body);
}
catch (System.ArgumentException)
{
// Stream was not readable means a child agent
// was closed due to logout, leaving the
// Event Queue request orphaned.
continue;
try
{
str = new StreamReader(req.Request.Body);
strreq = str.ReadToEnd();
str.Close();
}
catch
{
continue;
}
}
// "Normal" means the viewer evebt queue. We need to push these out fast.
// Process them inline. The rest go to the thread pool.
Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, strreq);
if (responsedata == null)
continue;
if (req.PollServiceArgs.Type == PollServiceEventArgs.EventType.Normal)
{
try
{
Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd());
DoHTTPGruntWork(m_server, req, responsedata);
}
catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream
{
// Ignore it, no need to reply
}
finally
{
str.Close();
}
}
else
{
@ -380,27 +381,19 @@ namespace OpenSim.Framework.Servers.HttpServer
{
try
{
Hashtable responsedata = req.PollServiceArgs.GetEvents(req.RequestID, req.PollServiceArgs.Id, str.ReadToEnd());
DoHTTPGruntWork(m_server, req, responsedata);
}
catch (ObjectDisposedException) // Browser aborted before we could read body, server closed the stream
{
// Ignore it, no need to reply
}
finally
{
str.Close();
}
return null;
}, null);
}
}
else
{
// if ((Environment.TickCount - req.RequestTime) > m_timeout)
if ((Environment.TickCount - req.RequestTime) > req.PollServiceArgs.TimeOutms)
{
DoHTTPGruntWork(m_server, req,

View File

@ -160,7 +160,11 @@ namespace OpenSim.Region.ClientStack.Linden
{
m_scene = scene;
HasEvents = (x, y) => { lock (responses) return responses.ContainsKey(x); };
HasEvents = (x, y) =>
{
lock (responses)
return responses.ContainsKey(x);
};
GetEvents = (x, y, s) =>
{
lock (responses)
@ -247,6 +251,7 @@ namespace OpenSim.Region.ClientStack.Linden
PollServiceTextureEventArgs args = new PollServiceTextureEventArgs(agentID, m_scene);
args.Type = PollServiceEventArgs.EventType.Texture;
args.GetEventsNeedsRequest = false;
MainServer.Instance.AddPollServiceHTTPHandler(capUrl, args);
string hostName = m_scene.RegionInfo.ExternalHostName;

View File

@ -223,6 +223,7 @@ namespace OpenSim.Region.ClientStack.Linden
PollServiceInventoryEventArgs args = new PollServiceInventoryEventArgs(agentID);
args.Type = PollServiceEventArgs.EventType.Inventory;
args.GetEventsNeedsRequest = false;
MainServer.Instance.AddPollServiceHTTPHandler(capUrl, args);
string hostName = m_scene.RegionInfo.ExternalHostName;