aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ClientStack/Linden/Caps/EventQueue
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ClientStack/Linden/Caps/EventQueue')
-rw-r--r--OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs53
1 files changed, 33 insertions, 20 deletions
diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
index 1a35d22..0054619 100644
--- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
+++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs
@@ -235,19 +235,19 @@ namespace OpenSim.Region.ClientStack.Linden
235// ClientClosed(client.AgentId); 235// ClientClosed(client.AgentId);
236// } 236// }
237 237
238 private void ClientClosed(UUID AgentID, Scene scene) 238 private void ClientClosed(UUID agentID, Scene scene)
239 { 239 {
240// m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", AgentID, m_scene.RegionInfo.RegionName); 240// m_log.DebugFormat("[EVENTQUEUE]: Closed client {0} in region {1}", agentID, m_scene.RegionInfo.RegionName);
241 241
242 int count = 0; 242 int count = 0;
243 while (queues.ContainsKey(AgentID) && queues[AgentID].Count > 0 && count++ < 5) 243 while (queues.ContainsKey(agentID) && queues[agentID].Count > 0 && count++ < 5)
244 { 244 {
245 Thread.Sleep(1000); 245 Thread.Sleep(1000);
246 } 246 }
247 247
248 lock (queues) 248 lock (queues)
249 { 249 {
250 queues.Remove(AgentID); 250 queues.Remove(agentID);
251 } 251 }
252 252
253 List<UUID> removeitems = new List<UUID>(); 253 List<UUID> removeitems = new List<UUID>();
@@ -256,7 +256,7 @@ namespace OpenSim.Region.ClientStack.Linden
256 foreach (UUID ky in m_AvatarQueueUUIDMapping.Keys) 256 foreach (UUID ky in m_AvatarQueueUUIDMapping.Keys)
257 { 257 {
258// m_log.DebugFormat("[EVENTQUEUE]: Found key {0} in m_AvatarQueueUUIDMapping while looking for {1}", ky, AgentID); 258// m_log.DebugFormat("[EVENTQUEUE]: Found key {0} in m_AvatarQueueUUIDMapping while looking for {1}", ky, AgentID);
259 if (ky == AgentID) 259 if (ky == agentID)
260 { 260 {
261 removeitems.Add(ky); 261 removeitems.Add(ky);
262 } 262 }
@@ -267,7 +267,10 @@ namespace OpenSim.Region.ClientStack.Linden
267 UUID eventQueueGetUuid = m_AvatarQueueUUIDMapping[ky]; 267 UUID eventQueueGetUuid = m_AvatarQueueUUIDMapping[ky];
268 m_AvatarQueueUUIDMapping.Remove(ky); 268 m_AvatarQueueUUIDMapping.Remove(ky);
269 269
270 MainServer.Instance.RemovePollServiceHTTPHandler("","/CAPS/EQG/" + eventQueueGetUuid.ToString() + "/"); 270 string eqgPath = GenerateEqgCapPath(eventQueueGetUuid);
271 MainServer.Instance.RemovePollServiceHTTPHandler("", eqgPath);
272
273// m_log.DebugFormat("[EVENT QUEUE GET MODULE]: Removed EQG handler {0} for {1}", eqgPath, agentID);
271 } 274 }
272 } 275 }
273 276
@@ -281,7 +284,7 @@ namespace OpenSim.Region.ClientStack.Linden
281 { 284 {
282 searchval = m_QueueUUIDAvatarMapping[ky]; 285 searchval = m_QueueUUIDAvatarMapping[ky];
283 286
284 if (searchval == AgentID) 287 if (searchval == agentID)
285 { 288 {
286 removeitems.Add(ky); 289 removeitems.Add(ky);
287 } 290 }
@@ -305,6 +308,15 @@ namespace OpenSim.Region.ClientStack.Linden
305 //} 308 //}
306 } 309 }
307 310
311 /// <summary>
312 /// Generate an Event Queue Get handler path for the given eqg uuid.
313 /// </summary>
314 /// <param name='eqgUuid'></param>
315 private string GenerateEqgCapPath(UUID eqgUuid)
316 {
317 return string.Format("/CAPS/EQG/{0}/", eqgUuid);
318 }
319
308 public void OnRegisterCaps(UUID agentID, Caps caps) 320 public void OnRegisterCaps(UUID agentID, Caps caps)
309 { 321 {
310 // Register an event queue for the client 322 // Register an event queue for the client
@@ -316,8 +328,7 @@ namespace OpenSim.Region.ClientStack.Linden
316 // Let's instantiate a Queue for this agent right now 328 // Let's instantiate a Queue for this agent right now
317 TryGetQueue(agentID); 329 TryGetQueue(agentID);
318 330
319 string capsBase = "/CAPS/EQG/"; 331 UUID eventQueueGetUUID;
320 UUID EventQueueGetUUID = UUID.Zero;
321 332
322 lock (m_AvatarQueueUUIDMapping) 333 lock (m_AvatarQueueUUIDMapping)
323 { 334 {
@@ -325,37 +336,35 @@ namespace OpenSim.Region.ClientStack.Linden
325 if (m_AvatarQueueUUIDMapping.ContainsKey(agentID)) 336 if (m_AvatarQueueUUIDMapping.ContainsKey(agentID))
326 { 337 {
327 //m_log.DebugFormat("[EVENTQUEUE]: Found Existing UUID!"); 338 //m_log.DebugFormat("[EVENTQUEUE]: Found Existing UUID!");
328 EventQueueGetUUID = m_AvatarQueueUUIDMapping[agentID]; 339 eventQueueGetUUID = m_AvatarQueueUUIDMapping[agentID];
329 } 340 }
330 else 341 else
331 { 342 {
332 EventQueueGetUUID = UUID.Random(); 343 eventQueueGetUUID = UUID.Random();
333 //m_log.DebugFormat("[EVENTQUEUE]: Using random UUID!"); 344 //m_log.DebugFormat("[EVENTQUEUE]: Using random UUID!");
334 } 345 }
335 } 346 }
336 347
337 lock (m_QueueUUIDAvatarMapping) 348 lock (m_QueueUUIDAvatarMapping)
338 { 349 {
339 if (!m_QueueUUIDAvatarMapping.ContainsKey(EventQueueGetUUID)) 350 if (!m_QueueUUIDAvatarMapping.ContainsKey(eventQueueGetUUID))
340 m_QueueUUIDAvatarMapping.Add(EventQueueGetUUID, agentID); 351 m_QueueUUIDAvatarMapping.Add(eventQueueGetUUID, agentID);
341 } 352 }
342 353
343 lock (m_AvatarQueueUUIDMapping) 354 lock (m_AvatarQueueUUIDMapping)
344 { 355 {
345 if (!m_AvatarQueueUUIDMapping.ContainsKey(agentID)) 356 if (!m_AvatarQueueUUIDMapping.ContainsKey(agentID))
346 m_AvatarQueueUUIDMapping.Add(agentID, EventQueueGetUUID); 357 m_AvatarQueueUUIDMapping.Add(agentID, eventQueueGetUUID);
347 } 358 }
348 359
360 string eventQueueGetPath = GenerateEqgCapPath(eventQueueGetUUID);
361
349 // Register this as a caps handler 362 // Register this as a caps handler
350 // FIXME: Confusingly, we need to register separate as a capability so that the client is told about 363 // FIXME: Confusingly, we need to register separate as a capability so that the client is told about
351 // EventQueueGet when it receive capability information, but then we replace the rest handler immediately 364 // EventQueueGet when it receive capability information, but then we replace the rest handler immediately
352 // afterwards with the poll service. So for now, we'll pass a null instead to simplify code reading, but 365 // afterwards with the poll service. So for now, we'll pass a null instead to simplify code reading, but
353 // really it should be possible to directly register the poll handler as a capability. 366 // really it should be possible to directly register the poll handler as a capability.
354 caps.RegisterHandler( 367 caps.RegisterHandler("EventQueueGet", new RestHTTPHandler("POST", eventQueueGetPath, null));
355 "EventQueueGet",
356 new RestHTTPHandler(
357 "POST", capsBase + EventQueueGetUUID.ToString() + "/", null));
358
359// delegate(Hashtable m_dhttpMethod) 368// delegate(Hashtable m_dhttpMethod)
360// { 369// {
361// return ProcessQueue(m_dhttpMethod, agentID, caps); 370// return ProcessQueue(m_dhttpMethod, agentID, caps);
@@ -364,9 +373,13 @@ namespace OpenSim.Region.ClientStack.Linden
364 // This will persist this beyond the expiry of the caps handlers 373 // This will persist this beyond the expiry of the caps handlers
365 // TODO: Add EventQueueGet name/description for diagnostics 374 // TODO: Add EventQueueGet name/description for diagnostics
366 MainServer.Instance.AddPollServiceHTTPHandler( 375 MainServer.Instance.AddPollServiceHTTPHandler(
367 capsBase + EventQueueGetUUID.ToString() + "/", 376 eventQueueGetPath,
368 new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID)); 377 new PollServiceEventArgs(null, HasEvents, GetEvents, NoEvents, agentID));
369 378
379// m_log.DebugFormat(
380// "[EVENT QUEUE GET MODULE]: Registered EQG handler {0} for {1} in {2}",
381// eventQueueGetPath, agentID, m_scene.RegionInfo.RegionName);
382
370 Random rnd = new Random(Environment.TickCount); 383 Random rnd = new Random(Environment.TickCount);
371 lock (m_ids) 384 lock (m_ids)
372 { 385 {