diff options
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs | 96 | ||||
-rw-r--r-- | OpenSim/Grid/InventoryServer/GridInventoryService.cs | 6 |
2 files changed, 61 insertions, 41 deletions
diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs index 2dc2374..d94ff6c 100644 --- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs +++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs | |||
@@ -293,64 +293,73 @@ namespace OpenSim.Framework.Communications.Cache | |||
293 | folderID, remoteClient.Name); | 293 | folderID, remoteClient.Name); |
294 | } | 294 | } |
295 | 295 | ||
296 | /// <summary> | ||
297 | /// Handle the caps inventory descendents fetch. | ||
298 | /// | ||
299 | /// Since the folder structure is sent to the client on login, I believe we only need to handle items. | ||
300 | /// </summary> | ||
301 | /// <param name="agentID"></param> | ||
302 | /// <param name="folderID"></param> | ||
303 | /// <param name="ownerID"></param> | ||
304 | /// <param name="fetchFolders"></param> | ||
305 | /// <param name="fetchItems"></param> | ||
306 | /// <param name="sortOrder"></param> | ||
307 | /// <returns></returns> | ||
296 | public List<InventoryItemBase> HandleFetchInventoryDescendentsCAPS(LLUUID agentID, LLUUID folderID, LLUUID ownerID, | 308 | public List<InventoryItemBase> HandleFetchInventoryDescendentsCAPS(LLUUID agentID, LLUUID folderID, LLUUID ownerID, |
297 | bool fetchFolders, bool fetchItems, int sortOrder) | 309 | bool fetchFolders, bool fetchItems, int sortOrder) |
298 | { | 310 | { |
299 | // XXX We're not handling sortOrder yet! | 311 | // XXX We're not handling sortOrder yet! |
300 | // with CAPS we are only return items in the folders at the moment | ||
301 | // need to find the format that sub folder details are sent in | ||
302 | // if (fetchItems) | ||
303 | // { | ||
304 | InventoryFolderImpl fold = null; | ||
305 | if (folderID == libraryRoot.ID) | ||
306 | { | ||
307 | return libraryRoot.RequestListOfItems(); | ||
308 | } | ||
309 | 312 | ||
310 | if ((fold = libraryRoot.HasSubFolder(folderID)) != null) | 313 | InventoryFolderImpl fold = null; |
311 | { | 314 | if (folderID == libraryRoot.ID) |
312 | return fold.RequestListOfItems(); | 315 | { |
313 | } | 316 | return libraryRoot.RequestListOfItems(); |
317 | } | ||
314 | 318 | ||
315 | CachedUserInfo userProfile; | 319 | if ((fold = libraryRoot.HasSubFolder(folderID)) != null) |
316 | if (m_userProfiles.TryGetValue(agentID, out userProfile)) | 320 | { |
321 | return fold.RequestListOfItems(); | ||
322 | } | ||
323 | |||
324 | CachedUserInfo userProfile; | ||
325 | if (m_userProfiles.TryGetValue(agentID, out userProfile)) | ||
326 | { | ||
327 | if (userProfile.RootFolder != null) | ||
317 | { | 328 | { |
318 | if (userProfile.RootFolder != null) | 329 | if (userProfile.RootFolder.ID == folderID) |
319 | { | 330 | { |
320 | if (userProfile.RootFolder.ID == folderID) | 331 | return userProfile.RootFolder.RequestListOfItems(); |
321 | { | ||
322 | return userProfile.RootFolder.RequestListOfItems(); | ||
323 | } | ||
324 | else | ||
325 | { | ||
326 | if ((fold = userProfile.RootFolder.HasSubFolder(folderID)) != null) | ||
327 | { | ||
328 | return fold.RequestListOfItems(); | ||
329 | } | ||
330 | } | ||
331 | } | 332 | } |
332 | else | 333 | else |
333 | { | 334 | { |
334 | m_log.ErrorFormat("[INVENTORY CACHE]: Could not find root folder for user {0}", agentID.ToString()); | 335 | if ((fold = userProfile.RootFolder.HasSubFolder(folderID)) != null) |
335 | 336 | { | |
336 | return new List<InventoryItemBase>(); ; | 337 | return fold.RequestListOfItems(); |
338 | } | ||
337 | } | 339 | } |
338 | } | 340 | } |
339 | else | 341 | else |
340 | { | 342 | { |
341 | m_log.ErrorFormat( | 343 | m_log.ErrorFormat("[INVENTORY CACHE]: Could not find root folder for user {0}", agentID.ToString()); |
342 | "[USER CACHE]: HandleFetchInventoryDescendentsCAPS() Could not find user profile for {0}", | 344 | |
343 | agentID); | 345 | return new List<InventoryItemBase>(); ; |
344 | |||
345 | return new List<InventoryItemBase>(); | ||
346 | } | 346 | } |
347 | } | ||
348 | else | ||
349 | { | ||
350 | m_log.ErrorFormat( | ||
351 | "[USER CACHE]: HandleFetchInventoryDescendentsCAPS() Could not find user profile for {0}", | ||
352 | agentID); | ||
353 | |||
354 | return new List<InventoryItemBase>(); | ||
355 | } | ||
356 | |||
357 | // If we've reached this point then we couldn't find the folder, even though the client thinks | ||
358 | // it exists | ||
359 | m_log.ErrorFormat("[INVENTORY CACHE]: " + | ||
360 | "Could not find folder {0} for user {1}", | ||
361 | folderID, agentID.ToString()); | ||
347 | 362 | ||
348 | // If we've reached this point then we couldn't find the folder, even though the client thinks | ||
349 | // it exists | ||
350 | m_log.ErrorFormat("[INVENTORY CACHE]: " + | ||
351 | "Could not find folder {0} for user {1}", | ||
352 | folderID, agentID.ToString()); | ||
353 | // } | ||
354 | return new List<InventoryItemBase>(); | 363 | return new List<InventoryItemBase>(); |
355 | } | 364 | } |
356 | 365 | ||
@@ -400,6 +409,11 @@ namespace OpenSim.Framework.Communications.Cache | |||
400 | } | 409 | } |
401 | } | 410 | } |
402 | 411 | ||
412 | /// <summary> | ||
413 | /// Request the inventory data for the given user. | ||
414 | /// </summary> | ||
415 | /// <param name="userID"></param> | ||
416 | /// <param name="userInfo"></param> | ||
403 | private void RequestInventoryForUser(LLUUID userID, CachedUserInfo userInfo) | 417 | private void RequestInventoryForUser(LLUUID userID, CachedUserInfo userInfo) |
404 | { | 418 | { |
405 | m_parent.InventoryService.RequestInventoryForUser(userID, userInfo.FolderReceive, userInfo.ItemReceive); | 419 | m_parent.InventoryService.RequestInventoryForUser(userID, userInfo.FolderReceive, userInfo.ItemReceive); |
diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs index e30c31e..1ae5243 100644 --- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs +++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs | |||
@@ -27,7 +27,10 @@ | |||
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Threading; | ||
31 | |||
30 | using libsecondlife; | 32 | using libsecondlife; |
33 | |||
31 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
32 | using OpenSim.Framework.Communications; | 35 | using OpenSim.Framework.Communications; |
33 | using OpenSim.Framework.Console; | 36 | using OpenSim.Framework.Console; |
@@ -103,6 +106,9 @@ namespace OpenSim.Grid.InventoryServer | |||
103 | /// <returns>The user's inventory. If an inventory cannot be found then an empty collection is returned.</returns> | 106 | /// <returns>The user's inventory. If an inventory cannot be found then an empty collection is returned.</returns> |
104 | public InventoryCollection GetUserInventory(Guid rawUserID) | 107 | public InventoryCollection GetUserInventory(Guid rawUserID) |
105 | { | 108 | { |
109 | // uncomment me to simulate an overloaded inventory server | ||
110 | //Thread.Sleep(40000); | ||
111 | |||
106 | LLUUID userID = new LLUUID(rawUserID); | 112 | LLUUID userID = new LLUUID(rawUserID); |
107 | 113 | ||
108 | m_log.InfoFormat("[AGENT INVENTORY]: Processing request for inventory of {0}", userID); | 114 | m_log.InfoFormat("[AGENT INVENTORY]: Processing request for inventory of {0}", userID); |