aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs')
-rw-r--r--OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs156
1 files changed, 81 insertions, 75 deletions
diff --git a/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs b/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs
index 156137e..98f5f68 100644
--- a/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs
+++ b/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs
@@ -77,52 +77,54 @@ namespace OpenSim.Region.Communications.Hypergrid
77 } 77 }
78 78
79 // grid/hypergrid mode 79 // grid/hypergrid mode
80 if (!m_RequestingInventory.ContainsKey(userID)) 80 lock (m_RequestingInventory)
81 { 81 {
82 m_RequestingInventory.Add(userID, callback); 82 if (!m_RequestingInventory.ContainsKey(userID))
83
84 string invServer = GetUserInventoryURI(userID);
85 m_log.InfoFormat(
86 "[HGrid INVENTORY SERVICE]: Requesting inventory from {0}/GetInventory/ for user {1} ({2})",
87 /*_inventoryServerUrl*/ invServer, userID, userID.Guid);
88
89 try
90 { 83 {
91 84 m_RequestingInventory.Add(userID, callback);
92 //RestSessionObjectPosterResponse<Guid, InventoryCollection> requester
93 // = new RestSessionObjectPosterResponse<Guid, InventoryCollection>();
94 //requester.ResponseCallback = InventoryResponse;
95
96 //requester.BeginPostObject(invServer + "/GetInventory/", userID.Guid, session_id.ToString(), userID.ToString());
97 GetInventoryDelegate d = GetInventoryAsync;
98 d.BeginInvoke(invServer, userID, session_id, GetInventoryCompleted, d);
99
100 } 85 }
101 catch (WebException e) 86 else
102 { 87 {
103 if (StatsManager.SimExtraStats != null) 88 m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: RequestInventoryForUser() - could not find user profile for {0}", userID);
104 StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure(); 89 return;
105
106 m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: Request inventory operation failed, {0} {1}",
107 e.Source, e.Message);
108
109 // Well, let's synthesize one
110 InventoryCollection icol = new InventoryCollection();
111 icol.UserID = userID;
112 icol.Items = new List<InventoryItemBase>();
113 icol.Folders = new List<InventoryFolderBase>();
114 InventoryFolderBase rootFolder = new InventoryFolderBase();
115 rootFolder.ID = UUID.Random();
116 rootFolder.Owner = userID;
117 icol.Folders.Add(rootFolder);
118 InventoryResponse(icol);
119 } 90 }
120 } 91 }
121 else 92 string invServer = GetUserInventoryURI(userID);
93 m_log.InfoFormat(
94 "[HGrid INVENTORY SERVICE]: Requesting inventory from {0}/GetInventory/ for user {1} ({2})",
95 /*_inventoryServerUrl*/ invServer, userID, userID.Guid);
96
97 try
122 { 98 {
123 m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: RequestInventoryForUser() - could not find user profile for {0}", userID); 99
100 //RestSessionObjectPosterResponse<Guid, InventoryCollection> requester
101 // = new RestSessionObjectPosterResponse<Guid, InventoryCollection>();
102 //requester.ResponseCallback = InventoryResponse;
103
104 //requester.BeginPostObject(invServer + "/GetInventory/", userID.Guid, session_id.ToString(), userID.ToString());
105 GetInventoryDelegate d = GetInventoryAsync;
106 d.BeginInvoke(invServer, userID, session_id, GetInventoryCompleted, d);
107
124 } 108 }
125 109 catch (WebException e)
110 {
111 if (StatsManager.SimExtraStats != null)
112 StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure();
113
114 m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: Request inventory operation failed, {0} {1}",
115 e.Source, e.Message);
116
117 // Well, let's synthesize one
118 InventoryCollection icol = new InventoryCollection();
119 icol.UserID = userID;
120 icol.Items = new List<InventoryItemBase>();
121 icol.Folders = new List<InventoryFolderBase>();
122 InventoryFolderBase rootFolder = new InventoryFolderBase();
123 rootFolder.ID = UUID.Random();
124 rootFolder.Owner = userID;
125 icol.Folders.Add(rootFolder);
126 InventoryResponse(icol);
127 }
126 } 128 }
127 129
128 private delegate InventoryCollection GetInventoryDelegate(string url, UUID userID, UUID sessionID); 130 private delegate InventoryCollection GetInventoryDelegate(string url, UUID userID, UUID sessionID);
@@ -447,62 +449,66 @@ namespace OpenSim.Region.Communications.Hypergrid
447 private void InventoryResponse(InventoryCollection response) 449 private void InventoryResponse(InventoryCollection response)
448 { 450 {
449 UUID userID = response.UserID; 451 UUID userID = response.UserID;
450 if (m_RequestingInventory.ContainsKey(userID)) 452 InventoryReceiptCallback callback = null;
453 lock (m_RequestingInventory)
451 { 454 {
452 m_log.InfoFormat("[HGrid INVENTORY SERVICE]: " + 455 if (m_RequestingInventory.ContainsKey(userID))
453 "Received inventory response for user {0} containing {1} folders and {2} items", 456 {
454 userID, response.Folders.Count, response.Items.Count); 457 m_log.InfoFormat("[HGrid INVENTORY SERVICE]: " +
458 "Received inventory response for user {0} containing {1} folders and {2} items",
459 userID, response.Folders.Count, response.Items.Count);
460 callback = m_RequestingInventory[userID];
461 m_RequestingInventory.Remove(userID);
462 }
463 else
464 {
465 m_log.WarnFormat(
466 "[HGrid INVENTORY SERVICE]: " +
467 "Received inventory response for {0} for which we do not have a record of requesting!",
468 userID);
469 return;
470 }
471 }
455 472
456 InventoryFolderImpl rootFolder = null; 473 InventoryFolderImpl rootFolder = null;
457 InventoryReceiptCallback callback = m_RequestingInventory[userID];
458 474
459 ICollection<InventoryFolderImpl> folders = new List<InventoryFolderImpl>(); 475 ICollection<InventoryFolderImpl> folders = new List<InventoryFolderImpl>();
460 ICollection<InventoryItemBase> items = new List<InventoryItemBase>(); 476 ICollection<InventoryItemBase> items = new List<InventoryItemBase>();
461 477
462 foreach (InventoryFolderBase folder in response.Folders) 478 foreach (InventoryFolderBase folder in response.Folders)
479 {
480 if (folder.ParentID == UUID.Zero)
463 { 481 {
464 if (folder.ParentID == UUID.Zero) 482 rootFolder = new InventoryFolderImpl(folder);
465 { 483 folders.Add(rootFolder);
466 rootFolder = new InventoryFolderImpl(folder);
467 folders.Add(rootFolder);
468 484
469 break; 485 break;
470 }
471 } 486 }
487 }
472 488
473 if (rootFolder != null) 489 if (rootFolder != null)
490 {
491 foreach (InventoryFolderBase folder in response.Folders)
474 { 492 {
475 foreach (InventoryFolderBase folder in response.Folders) 493 if (folder.ID != rootFolder.ID)
476 {
477 if (folder.ID != rootFolder.ID)
478 {
479 folders.Add(new InventoryFolderImpl(folder));
480 }
481 }
482
483 foreach (InventoryItemBase item in response.Items)
484 { 494 {
485 items.Add(item); 495 folders.Add(new InventoryFolderImpl(folder));
486 } 496 }
487 } 497 }
488 else 498
499 foreach (InventoryItemBase item in response.Items)
489 { 500 {
490 m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: Did not get back an inventory containing a root folder for user {0}", userID); 501 items.Add(item);
491 } 502 }
492
493 m_RequestingInventory.Remove(userID);
494 callback(folders, items);
495
496 } 503 }
497 else 504 else
498 { 505 {
499 m_log.WarnFormat( 506 m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: Did not get back an inventory containing a root folder for user {0}", userID);
500 "[HGrid INVENTORY SERVICE]: " +
501 "Received inventory response for {0} for which we do not have a record of requesting!",
502 userID);
503 } 507 }
504 }
505 508
509 callback(folders, items);
510
511 }
506 512
507 private bool IsLocalStandaloneUser(UUID userID) 513 private bool IsLocalStandaloneUser(UUID userID)
508 { 514 {