Mantis#2183. Thank you kindly, Ewe Loon for a patch that addresses:

after using llTakeControls my sim receives about 200 messages per second, 
l of which get queued , this could be because there is no lag as the viewer 
and sim are on the same computer. The patch I have included checks to see if 
the "Changed" param is 0 then searches the EventQueue for Control messages 
being sent to the same localid, if it finds a message already in the Queue 
and Changed==0 then the new message is only notifing you the key is being held, 
since there is already a message the new one isnt needed so it isnt added 
to the queue.
0.6.0-stable
Charles Krinke 2008-09-14 00:47:45 +00:00
parent 37e6ce24a2
commit f2d60976d0
2 changed files with 26 additions and 0 deletions

View File

@ -357,6 +357,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
public void control(uint localID, UUID itemID, UUID agentID, uint held, uint change)
{
if ((change == 0) && (myScriptEngine.m_EventQueueManager.CheckEeventQueueForEvent(localID,"control"))) return;
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "control", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLString(agentID.ToString()), new LSL_Types.LSLInteger(held), new LSL_Types.LSLInteger(change)});
}

View File

@ -289,6 +289,31 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
}
#endregion
#region " Check execution queue for a specified Event"
/// <summary>
/// checks to see if a specified event type is already in the queue
/// </summary>
/// <param name="localID">Region object ID</param>
/// <param name="FunctionName">Name of the function, will be state + "_event_" + FunctionName</param>
/// <returns>true if event is found , false if not found</returns>
///
public bool CheckEeventQueueForEvent(uint localID, string FunctionName)
{
if (eventQueue.Count > 0)
{
lock (eventQueue)
{
foreach (EventQueueManager.QueueItemStruct QIS in eventQueue)
{
if ((QIS.functionName == FunctionName) && (QIS.localID == localID))
return true;
}
}
}
return false;
}
#endregion
#region " Add events to execution queue "
/// <summary>
/// Add event to event execution queue