public Hashtable GetEvents(UUID requestID, UUID pAgentId, string request) { // m_log.DebugFormat("[EVENT QUEUE GET MODULE]: Invoked GetEvents() for {0}", pAgentId); Queue <OSD> queue = TryGetQueue(pAgentId); OSD element; lock (queue) { if (queue.Count == 0) { return(NoEvents(requestID, pAgentId)); } element = queue.Dequeue(); // 15s timeout } int thisID = 0; lock (m_ids) thisID = m_ids[pAgentId]; OSDArray array = new OSDArray(); if (element == null) // didn't have an event in 15s { // Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say! array.Add(EventQueueHelper.KeepAliveEvent()); //m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", pAgentId, m_scene.RegionInfo.RegionName); } 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) { 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++; } } } OSDMap events = new OSDMap(); events.Add("events", array); events.Add("id", new OSDInteger(thisID)); lock (m_ids) { m_ids[pAgentId] = thisID + 1; } Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; responsedata["content_type"] = "application/xml"; responsedata["keepalive"] = false; responsedata["reusecontext"] = false; responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(events); //m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", pAgentId, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); return(responsedata); }
public Hashtable GetEvents(UUID requestID, UUID pAgentId) { if (m_log.IsDebugEnabled) { m_log.DebugFormat("POLLED FOR EQ MESSAGES BY {0} in {1}", pAgentId, m_scene.RegionInfo.RegionName); } Queue <OSD> queue = GetQueue(pAgentId); if (queue == null) { return(NoEvents(requestID, pAgentId)); } OSD element; lock (queue) { if (queue.Count == 0) { return(NoEvents(requestID, pAgentId)); } element = queue.Dequeue(); // 15s timeout } int thisID = 0; lock (m_ids) thisID = m_ids[pAgentId]; OSDArray array = new OSDArray(); if (element == null) // didn't have an event in 15s { // Send it a fake event to keep the client polling! It doesn't like 502s like the proxys say! array.Add(EventQueueHelper.KeepAliveEvent()); //m_log.DebugFormat("[EVENTQUEUE]: adding fake event for {0} in region {1}", pAgentId, m_scene.RegionInfo.RegionName); } else { if (m_log.IsDebugEnabled) { LogOutboundDebugMessage(element, pAgentId); } array.Add(element); lock (queue) { while (queue.Count > 0) { element = queue.Dequeue(); if (m_log.IsDebugEnabled) { LogOutboundDebugMessage(element, pAgentId); } array.Add(element); thisID++; } } } OSDMap events = new OSDMap(); events.Add("events", array); events.Add("id", new OSDInteger(thisID)); lock (m_ids) { m_ids[pAgentId] = thisID + 1; } Hashtable responsedata = new Hashtable(); responsedata["int_response_code"] = 200; responsedata["content_type"] = "application/xml"; responsedata["keepalive"] = false; responsedata["reusecontext"] = false; responsedata["str_response_string"] = OSDParser.SerializeLLSDXmlString(events); //m_log.DebugFormat("[EVENTQUEUE]: sending response for {0} in region {1}: {2}", pAgentId, m_scene.RegionInfo.RegionName, responsedata["str_response_string"]); return(responsedata); }