diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs index 7d73b3e7ae..f5feb712ea 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs @@ -39,6 +39,7 @@ using OpenMetaverse.Messages.Linden; using OpenMetaverse.Packets; using OpenMetaverse.StructuredData; using OpenSim.Framework; +using OpenSim.Framework.Console; using OpenSim.Framework.Servers; using OpenSim.Framework.Servers.HttpServer; using OpenSim.Region.Framework.Interfaces; @@ -58,9 +59,15 @@ namespace OpenSim.Region.ClientStack.Linden public class EventQueueGetModule : IEventQueue, IRegionModule { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - protected Scene m_scene = null; + + /// + /// Debug level. + /// + public int DebugLevel { get; set; } + + protected Scene m_scene; private IConfigSource m_gConfig; - bool enabledYN = false; + bool enabledYN; private Dictionary m_ids = new Dictionary(); @@ -97,6 +104,15 @@ namespace OpenSim.Region.ClientStack.Linden scene.EventManager.OnClientClosed += ClientClosed; scene.EventManager.OnMakeChildAgent += MakeChildAgent; scene.EventManager.OnRegisterCaps += OnRegisterCaps; + + MainConsole.Instance.Commands.AddCommand( + "event queue", + false, + "debug eq", + "debug eq [0|1]", + "debug eq 1 will turn on event queue debugging. This will log all outgoing event queue messages to clients.\n" + + "debug eq 1 will turn off event queue debugging.", + HandleDebugEq); } else { @@ -128,6 +144,22 @@ namespace OpenSim.Region.ClientStack.Linden } #endregion + protected void HandleDebugEq(string module, string[] args) + { + int debugLevel; + + if (!(args.Length == 3 && int.TryParse(args[2], out debugLevel))) + { + MainConsole.Instance.OutputFormat("Usage: debug eq [0|1]"); + } + else + { + DebugLevel = debugLevel; + MainConsole.Instance.OutputFormat( + "Set event queue debug level to {0} in {1}", DebugLevel, m_scene.RegionInfo.RegionName); + } + } + /// /// Always returns a valid queue /// @@ -323,7 +355,9 @@ namespace OpenSim.Region.ClientStack.Linden // This will persist this beyond the expiry of the caps handlers MainServer.Instance.AddPollServiceHTTPHandler( - capsBase + EventQueueGetUUID.ToString() + "/", EventQueuePoll, new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID)); + capsBase + EventQueueGetUUID.ToString() + "/", + EventQueuePoll, + new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID)); Random rnd = new Random(Environment.TickCount); lock (m_ids) @@ -370,12 +404,31 @@ namespace OpenSim.Region.ClientStack.Linden } else { + if (DebugLevel > 0 && element is OSDMap) + { + OSDMap ev = (OSDMap)element; + m_log.DebugFormat( + "[EVENT QUEUE GET MODULE]: Eq OUT {0} to {1}", + ev["message"], m_scene.GetScenePresence(pAgentId).Name); + } + array.Add(element); + lock (queue) { while (queue.Count > 0) { - array.Add(queue.Dequeue()); + element = queue.Dequeue(); + + if (DebugLevel > 0 && element is OSDMap) + { + OSDMap ev = (OSDMap)element; + m_log.DebugFormat( + "[EVENT QUEUE GET MODULE]: Eq OUT {0} to {1}", + ev["message"], m_scene.GetScenePresence(pAgentId).Name); + } + + array.Add(element); thisID++; } } @@ -471,11 +524,29 @@ namespace OpenSim.Region.ClientStack.Linden { array.Add(element); + if (element is OSDMap) + { + OSDMap ev = (OSDMap)element; + m_log.DebugFormat( + "[EVENT QUEUE GET MODULE]: Eq OUT {0} to {1}", + ev["message"], m_scene.GetScenePresence(agentID).Name); + } + lock (queue) { while (queue.Count > 0) { - array.Add(queue.Dequeue()); + element = queue.Dequeue(); + + if (element is OSDMap) + { + OSDMap ev = (OSDMap)element; + m_log.DebugFormat( + "[EVENT QUEUE GET MODULE]: Eq OUT {0} to {1}", + ev["message"], m_scene.GetScenePresence(agentID).Name); + } + + array.Add(element); thisID++; } } @@ -494,7 +565,8 @@ namespace OpenSim.Region.ClientStack.Linden responsedata["content_type"] = "application/xml"; responsedata["keepalive"] = false; responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(events); - //m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", agentID, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); + + m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", agentID, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); return responsedata; } @@ -717,6 +789,7 @@ namespace OpenSim.Region.ClientStack.Linden OSD item = EventQueueHelper.GroupMembership(groupUpdate); Enqueue(item, avatarID); } + public void QueryReply(PlacesReplyPacket groupUpdate, UUID avatarID) { OSD item = EventQueueHelper.PlacesQuery(groupUpdate);