diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 3d7ada3b5e..9a7ce42b1c 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -332,6 +332,29 @@ namespace OpenSim.Framework.Communications.Cache /// public interface IInventoryRequest { + /// + /// This is the method executed once we have received the user's inventory by which the request can be fulfilled. + /// void Execute(); } + + /// + /// Generic inventory request + /// + public class InventoryRequest : IInventoryRequest + { + private Delegate m_delegat; + private Object[] m_args; + + internal InventoryRequest(Delegate delegat, Object[] args) + { + m_delegat = delegat; + m_args = args; + } + + public void Execute() + { + m_delegat.DynamicInvoke(m_args); + } + } } diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs index cbf2dedc80..eb85ec8b5c 100644 --- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs +++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs @@ -25,14 +25,19 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System; using System.Collections.Generic; using System.Reflection; using System.Threading; + using libsecondlife; using log4net; namespace OpenSim.Framework.Communications.Cache { + internal delegate void UpdateInventoryFolderDelegate( + IClientAPI remoteClient, LLUUID folderID, ushort type, string name, LLUUID parentID); + /// /// Holds user profile information and retrieves it from backend services. /// @@ -221,7 +226,10 @@ namespace OpenSim.Framework.Communications.Cache } else { - userProfile.AddRequest(new UpdateFolderRequest(this, remoteClient, folderID, type, name, parentID)); + userProfile.AddRequest( + new InventoryRequest( + Delegate.CreateDelegate(typeof(UpdateInventoryFolderDelegate), this, "HandleUpdateInventoryFolder"), + new object[] { remoteClient, folderID, type, name, parentID })); } } } @@ -234,6 +242,10 @@ namespace OpenSim.Framework.Communications.Cache /// public void HandleMoveInventoryFolder(IClientAPI remoteClient, LLUUID folderID, LLUUID parentID) { + m_log.DebugFormat( + "[AGENT INVENTORY] Moving inventory folder {0} into folder {1} for {2} {3}", + parentID, remoteClient.Name, remoteClient.AgentId); + CachedUserInfo userProfile; if (m_userProfiles.TryGetValue(remoteClient.AgentId, out userProfile)) @@ -246,6 +258,10 @@ namespace OpenSim.Framework.Communications.Cache baseFolder.ParentID = parentID; m_commsManager.InventoryService.MoveInventoryFolder(remoteClient.AgentId, baseFolder); } +// else +// { +// userProfile.AddRequest(new MoveFolderRequest(remoteClient, folderID, parentID)); +// } } } @@ -499,33 +515,4 @@ namespace OpenSim.Framework.Communications.Cache } } } - - /// - /// Used to create an update folder request if we haven't yet received the user's inventory - /// - internal class UpdateFolderRequest : IInventoryRequest - { - private UserProfileCacheService m_userProfileCacheService; - private IClientAPI m_client; - private LLUUID m_folderID; - private ushort m_type; - private string m_name; - private LLUUID m_parentID; - - internal UpdateFolderRequest( - UserProfileCacheService cacheService, IClientAPI client, LLUUID folderID, ushort type, string name, LLUUID parentID) - { - m_userProfileCacheService = cacheService; - m_client = client; - m_folderID = folderID; - m_type = type; - m_name = name; - m_parentID = parentID; - } - - public void Execute() - { - m_userProfileCacheService.HandleUpdateInventoryFolder(m_client, m_folderID, m_type, m_name, m_parentID); - } - } }