From 31ca3a8d4d53fc82a3b4cb62ad4edaebc4111302 Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Thu, 12 Feb 2009 17:07:44 +0000 Subject: [PATCH] * refactor: Move RequestInventoryForUser() from service to CachedUserInfo * This simplifies callers in most cases - CachedUserInfo is already handling the rest of the fetch inventory work anyway --- .../Communications/Cache/CachedUserInfo.cs | 19 ++++++++++++ .../Cache/UserProfileCacheService.cs | 30 ------------------- .../Cache/UserProfileCacheServiceTests.cs | 2 +- .../Tests/Cache/UserProfileTestUtils.cs | 5 ++-- .../Framework/Scenes/Scene.Inventory.cs | 8 ++--- .../Region/Framework/Scenes/ScenePresence.cs | 13 ++++++-- 6 files changed, 37 insertions(+), 40 deletions(-) diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 15066cd734..c5bbd6a22b 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -202,6 +202,25 @@ namespace OpenSim.Framework.Communications.Cache m_rootFolder = null; } } + + /// + /// Fetch inventory for this user. + /// + /// This has to be executed as a separate step once user information is retreived. + /// This will occur synchronously if the inventory service is in the same process as this class, and + /// asynchronously otherwise. + public void FetchInventory() + { + if (m_commsManager.SecureInventoryService != null) + { + m_commsManager.SecureInventoryService.RequestInventoryForUser( + UserProfile.ID, SessionID, InventoryReceive); + } + else + { + m_commsManager.InventoryService.RequestInventoryForUser(UserProfile.ID, InventoryReceive); + } + } /// /// Callback invoked when the inventory is received from an async request to the inventory service diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs index ef190c8970..b1ce3e78c4 100644 --- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs +++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs @@ -104,36 +104,6 @@ namespace OpenSim.Framework.Communications.Cache return false; } - /// - /// Request the inventory data for the given user. This will occur asynchronously if running on a grid - /// - /// - /// - public void RequestInventoryForUser(UUID userID) - { - CachedUserInfo userInfo = GetUserDetails(userID); - if (userInfo != null) - { - if (m_commsManager.SecureInventoryService != null) - { - m_commsManager.SecureInventoryService.RequestInventoryForUser(userID, userInfo.SessionID, userInfo.InventoryReceive); - } - else - { - m_commsManager.InventoryService.RequestInventoryForUser(userID, userInfo.InventoryReceive); - } - //IInventoryServices invService = userInfo.GetInventoryService(); - //if (invService != null) - //{ - // invService.RequestInventoryForUser(userID, userInfo.InventoryReceive); - //} - } - else - { - m_log.ErrorFormat("[USER CACHE]: RequestInventoryForUser() - user profile for user {0} not found", userID); - } - } - /// /// Get cached details of the given user. If the user isn't in cache then the user is requested from the /// profile service. diff --git a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs index cda9d5c66f..e2576ef86f 100644 --- a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs @@ -64,7 +64,7 @@ namespace OpenSim.Framework.Communications.Tests /// Test requesting inventory for a user /// [Test] - public void TestRequestInventoryForUser() + public void TestFetchInventory() { TestCommunicationsManager commsManager = new TestCommunicationsManager(); CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(commsManager); diff --git a/OpenSim/Framework/Communications/Tests/Cache/UserProfileTestUtils.cs b/OpenSim/Framework/Communications/Tests/Cache/UserProfileTestUtils.cs index 85cc940881..93ce9167bf 100644 --- a/OpenSim/Framework/Communications/Tests/Cache/UserProfileTestUtils.cs +++ b/OpenSim/Framework/Communications/Tests/Cache/UserProfileTestUtils.cs @@ -59,9 +59,10 @@ namespace OpenSim.Framework.Communications.Tests lus.AddUser("Bill", "Bailey", "troll", "bill@bailey.com", 1000, 1000, userId); - commsManager.UserProfileCacheService.RequestInventoryForUser(userId); + CachedUserInfo userInfo = commsManager.UserProfileCacheService.GetUserDetails(userId); + userInfo.FetchInventory(); - return commsManager.UserProfileCacheService.GetUserDetails(userId); + return userInfo; } } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index e366c791fb..847d32d3df 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -472,7 +472,7 @@ namespace OpenSim.Region.Framework.Scenes if (recipientUserInfo != null) { if (!recipientUserInfo.HasReceivedInventory) - CommsManager.UserProfileCacheService.RequestInventoryForUser(recipient); + recipientUserInfo.FetchInventory(); // Insert a copy of the item into the recipient InventoryItemBase itemCopy = new InventoryItemBase(); @@ -1202,7 +1202,8 @@ namespace OpenSim.Region.Framework.Scenes avatarId); } if (!profile.HasReceivedInventory) - CommsManager.UserProfileCacheService.RequestInventoryForUser(avatarId); + profile.FetchInventory(); + InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(avatarId, part, itemId); if (agentItem == null) @@ -1841,8 +1842,7 @@ namespace OpenSim.Region.Framework.Scenes // Async inventory requests will queue, but they will never // execute unless inventory is actually fetched // - CommsManager.UserProfileCacheService.RequestInventoryForUser( - userInfo.UserProfile.ID); + userInfo.FetchInventory(); } if (userInfo != null) diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 0ed35afe68..2dd305a916 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -847,7 +847,13 @@ namespace OpenSim.Region.Framework.Scenes //SendAnimPack(); m_scene.SwapRootAgentCount(false); - m_scene.CommsManager.UserProfileCacheService.RequestInventoryForUser(m_uuid); + + CachedUserInfo userInfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(m_uuid); + if (userInfo != null) + userInfo.FetchInventory(); + else + m_log.ErrorFormat("[SCENE]: Could not find user info for {0} when making it a root agent", m_uuid); + //m_scene.CapsModule.AddCapsHandler(m_uuid); // On the next prim update, all objects will be sent @@ -2504,8 +2510,9 @@ namespace OpenSim.Region.Framework.Scenes } else { - // Restore the user structures that we needed to delete before asking the receiving region to complete the crossing - m_scene.CommsManager.UserProfileCacheService.RequestInventoryForUser(UUID); + // Restore the user structures that we needed to delete before asking the receiving region + // to complete the crossing + userInfo.FetchInventory(); m_scene.CapsModule.AddCapsHandler(UUID); } }