diff options
3 files changed, 68 insertions, 41 deletions
diff --git a/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs b/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs index a2b2c84..5e3f229 100644 --- a/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs +++ b/OpenSim/Region/Communications/Hypergrid/HGInventoryService.cs | |||
@@ -81,30 +81,22 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
81 | { | 81 | { |
82 | m_RequestingInventory.Add(userID, callback); | 82 | m_RequestingInventory.Add(userID, callback); |
83 | 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 | |||
84 | try | 89 | try |
85 | { | 90 | { |
86 | string invServer = GetUserInventoryURI(userID); | ||
87 | m_log.InfoFormat( | ||
88 | "[HGrid INVENTORY SERVICE]: Requesting inventory from {0}/GetInventory/ for user {1} ({2})", | ||
89 | /*_inventoryServerUrl*/ invServer, userID, userID.Guid); | ||
90 | |||
91 | |||
92 | RestSessionObjectPosterResponse<Guid, InventoryCollection> requester | ||
93 | = new RestSessionObjectPosterResponse<Guid, InventoryCollection>(); | ||
94 | requester.ResponseCallback = InventoryResponse; | ||
95 | 91 | ||
96 | requester.BeginPostObject(invServer + "/GetInventory/", userID.Guid, session_id.ToString(), userID.ToString()); | 92 | //RestSessionObjectPosterResponse<Guid, InventoryCollection> requester |
97 | 93 | // = new RestSessionObjectPosterResponse<Guid, InventoryCollection>(); | |
98 | //Test(userID.Guid); | ||
99 | |||
100 | //RestObjectPosterResponse<InventoryCollection> requester | ||
101 | // = new RestObjectPosterResponse<InventoryCollection>(); | ||
102 | //requester.ResponseCallback = InventoryResponse; | 94 | //requester.ResponseCallback = InventoryResponse; |
103 | 95 | ||
104 | //requester.BeginPostObject<Guid>(/*_inventoryServerUrl*/ invServer + "/GetInventory/", userID.Guid); | 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); | ||
105 | 99 | ||
106 | //RestClient cli = new RestClient(invServer + "/GetInventory/" + userID.Guid); | ||
107 | //Stream reply = cli.Request(); | ||
108 | } | 100 | } |
109 | catch (WebException e) | 101 | catch (WebException e) |
110 | { | 102 | { |
@@ -133,6 +125,44 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
133 | 125 | ||
134 | } | 126 | } |
135 | 127 | ||
128 | private delegate InventoryCollection GetInventoryDelegate(string url, UUID userID, UUID sessionID); | ||
129 | |||
130 | protected InventoryCollection GetInventoryAsync(string url, UUID userID, UUID sessionID) | ||
131 | { | ||
132 | InventoryCollection icol = null; | ||
133 | try | ||
134 | { | ||
135 | icol = SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject("POST", url + "/GetInventory/", | ||
136 | userID.Guid, sessionID.ToString(), userID.ToString()); | ||
137 | |||
138 | } | ||
139 | catch (Exception e) | ||
140 | { | ||
141 | m_log.Debug("[HGrid]: Exception getting users inventory: " + e.Message); | ||
142 | } | ||
143 | if (icol == null) | ||
144 | { | ||
145 | // Well, let's synthesize one | ||
146 | icol = new InventoryCollection(); | ||
147 | icol.UserID = userID; | ||
148 | icol.Items = new List<InventoryItemBase>(); | ||
149 | icol.Folders = new List<InventoryFolderBase>(); | ||
150 | InventoryFolderBase rootFolder = new InventoryFolderBase(); | ||
151 | rootFolder.ID = UUID.Random(); | ||
152 | rootFolder.Owner = userID; | ||
153 | icol.Folders.Add(rootFolder); | ||
154 | } | ||
155 | |||
156 | return icol; | ||
157 | } | ||
158 | |||
159 | private void GetInventoryCompleted(IAsyncResult iar) | ||
160 | { | ||
161 | GetInventoryDelegate icon = (GetInventoryDelegate)iar.AsyncState; | ||
162 | InventoryCollection icol = icon.EndInvoke(iar); | ||
163 | InventoryResponse(icol); | ||
164 | } | ||
165 | |||
136 | /// <summary> | 166 | /// <summary> |
137 | /// Add a new folder to the user's inventory | 167 | /// Add a new folder to the user's inventory |
138 | /// </summary> | 168 | /// </summary> |
@@ -460,9 +490,9 @@ namespace OpenSim.Region.Communications.Hypergrid | |||
460 | m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: Did not get back an inventory containing a root folder for user {0}", userID); | 490 | m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: Did not get back an inventory containing a root folder for user {0}", userID); |
461 | } | 491 | } |
462 | 492 | ||
493 | m_RequestingInventory.Remove(userID); | ||
463 | callback(folders, items); | 494 | callback(folders, items); |
464 | 495 | ||
465 | m_RequestingInventory.Remove(userID); | ||
466 | } | 496 | } |
467 | else | 497 | else |
468 | { | 498 | { |
diff --git a/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs b/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs index b57b5ed..b5a9395 100644 --- a/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs +++ b/OpenSim/Region/Framework/Interfaces/IInterregionComms.cs | |||
@@ -91,11 +91,11 @@ namespace OpenSim.Region.Framework.Interfaces | |||
91 | 91 | ||
92 | /// <summary> | 92 | /// <summary> |
93 | /// Create an object from the user's inventory in the destination region. | 93 | /// Create an object from the user's inventory in the destination region. |
94 | /// This message is used primarily for prim crossing. | 94 | /// This message is used primarily by clients. |
95 | /// </summary> | 95 | /// </summary> |
96 | /// <param name="regionHandle"></param> | 96 | /// <param name="regionHandle"></param> |
97 | /// <param name="sog"></param> | 97 | /// <param name="userID"></param> |
98 | /// <param name="isLocalCall"></param> | 98 | /// <param name="itemID"></param> |
99 | /// <returns></returns> | 99 | /// <returns></returns> |
100 | bool SendCreateObject(ulong regionHandle, UUID userID, UUID itemID); | 100 | bool SendCreateObject(ulong regionHandle, UUID userID, UUID itemID); |
101 | 101 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs b/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs index b192101..48ea519 100644 --- a/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs +++ b/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs | |||
@@ -333,29 +333,26 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid | |||
333 | 333 | ||
334 | public InventoryItemBase Get(InventoryItemBase item, UUID rootFolder, CachedUserInfo userInfo) | 334 | public InventoryItemBase Get(InventoryItemBase item, UUID rootFolder, CachedUserInfo userInfo) |
335 | { | 335 | { |
336 | if (!IsLocalUser(item.Owner)) | 336 | InventoryClient invCli = null; |
337 | string inventoryURL = UserInventoryURL(item.Owner); | ||
338 | if (!m_inventoryServers.TryGetValue(inventoryURL, out invCli)) | ||
337 | { | 339 | { |
338 | InventoryClient invCli = null; | 340 | m_log.Debug("[HGScene]: Starting new InventorytClient for " + inventoryURL); |
339 | string inventoryURL = UserInventoryURL(item.Owner); | 341 | invCli = new InventoryClient(inventoryURL); |
340 | if (!m_inventoryServers.TryGetValue(inventoryURL, out invCli)) | 342 | m_inventoryServers.Add(inventoryURL, invCli); |
341 | { | 343 | } |
342 | m_log.Debug("[HGScene]: Starting new InventorytClient for " + inventoryURL); | ||
343 | invCli = new InventoryClient(inventoryURL); | ||
344 | m_inventoryServers.Add(inventoryURL, invCli); | ||
345 | } | ||
346 | 344 | ||
347 | item = invCli.GetInventoryItem(item); | 345 | item = invCli.GetInventoryItem(item); |
348 | if (item != null) | 346 | if (item != null) |
347 | { | ||
348 | // Change the folder, stick it in root folder, all items flattened out here in this region cache | ||
349 | item.Folder = rootFolder; | ||
350 | //userInfo.AddItem(item); don't use this, it calls back to the inventory server | ||
351 | lock (userInfo.RootFolder.Items) | ||
349 | { | 352 | { |
350 | // Change the folder, stick it in root folder, all items flattened out here in this region cache | 353 | userInfo.RootFolder.Items[item.ID] = item; |
351 | item.Folder = rootFolder; | ||
352 | //userInfo.AddItem(item); don't use this, it calls back to the inventory server | ||
353 | lock (userInfo.RootFolder.Items) | ||
354 | { | ||
355 | userInfo.RootFolder.Items[item.ID] = item; | ||
356 | } | ||
357 | |||
358 | } | 354 | } |
355 | |||
359 | } | 356 | } |
360 | return item; | 357 | return item; |
361 | } | 358 | } |