From 27a7391d6b3df7d5e3d688ae27fa3ff21dcf421f Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Sat, 3 May 2008 23:33:20 +0000 Subject: * Add ability to defer item actions for AddItem() and DeleteItem(). This won't be useful until we let the client cache (again?) --- .../Communications/Cache/CachedUserInfo.cs | 26 +++++++++++++++++----- .../Grid/InventoryServer/GridInventoryService.cs | 2 +- .../Region/Environment/Scenes/Scene.Inventory.cs | 3 +++ 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 84e42a3..6f7c4da 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -35,6 +35,8 @@ using log4net; namespace OpenSim.Framework.Communications.Cache { + internal delegate void AddItemDelegate(InventoryItemBase itemInfo); + internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo); internal delegate void DeleteItemDelegate(LLUUID itemID); internal delegate void CreateFolderDelegate(string folderName, LLUUID folderID, ushort folderType, LLUUID parentID); @@ -532,13 +534,20 @@ namespace OpenSim.Framework.Communications.Cache /// Add an item to the user's inventory /// /// - public void AddItem(InventoryItemBase itemInfo) + public void AddItem(InventoryItemBase item) { if (HasInventory) { - ItemReceive(itemInfo); - m_commsManager.InventoryService.AddItem(itemInfo); + ItemReceive(item); + m_commsManager.InventoryService.AddItem(item); } + else + { + AddRequest( + new InventoryRequest( + Delegate.CreateDelegate(typeof(AddItemDelegate), this, "AddItem"), + new object[] { item })); + } } /// @@ -546,12 +555,19 @@ namespace OpenSim.Framework.Communications.Cache /// /// /// - public void UpdateItem(InventoryItemBase itemInfo) + public void UpdateItem(InventoryItemBase item) { if (HasInventory) { - m_commsManager.InventoryService.UpdateItem(itemInfo); + m_commsManager.InventoryService.UpdateItem(item); } + else + { + AddRequest( + new InventoryRequest( + Delegate.CreateDelegate(typeof(UpdateItemDelegate), this, "UpdateItem"), + new object[] { item })); + } } /// diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs index 5c1902f..4864185 100644 --- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs +++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs @@ -62,7 +62,7 @@ namespace OpenSim.Grid.InventoryServer m_log.InfoFormat("[GRID AGENT INVENTORY]: Processing request for inventory of {0}", userID); // uncomment me to simulate an overloaded inventory server - Thread.Sleep(18000); + //Thread.Sleep(18000); InventoryCollection invCollection = new InventoryCollection(); diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index 490457d..1c7e98e 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -486,6 +486,7 @@ namespace OpenSim.Region.Environment.Scenes if (userInfo == null) { m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString()); + return; } @@ -509,12 +510,14 @@ namespace OpenSim.Region.Environment.Scenes else { m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString()); + return; } } else { m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString() + ", no root folder"); + return; } } -- cgit v1.1