From 10875427058e68784ca6f5538a00a0cafd46a72b Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Sat, 3 May 2008 18:57:02 +0000
Subject: * Refactor: Move bulk of CreateFolder from UserProfileCacheService
into CachedUserInfo * Remove unused/superseded methods from
GridInventoryService
---
.../Communications/Cache/CachedUserInfo.cs | 100 ++++++++++++++++++++-
.../Cache/UserProfileCacheService.cs | 76 ++--------------
.../Communications/InventoryServiceBase.cs | 12 ++-
.../Grid/InventoryServer/GridInventoryService.cs | 66 ++------------
.../Region/Environment/Scenes/Scene.Inventory.cs | 1 +
5 files changed, 124 insertions(+), 131 deletions(-)
(limited to 'OpenSim')
diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
index 86c24bc..f55b492 100644
--- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
+++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
@@ -28,11 +28,16 @@
using System;
using System.Collections.Generic;
using System.Reflection;
+using System.Threading;
+
using libsecondlife;
using log4net;
namespace OpenSim.Framework.Communications.Cache
{
+ internal delegate void CreateInventoryFolderDelegate(
+ string folderName, LLUUID folderID, ushort folderType, LLUUID parentID);
+
///
/// Stores user profile and inventory data received from backend services for a particular user.
///
@@ -297,6 +302,99 @@ namespace OpenSim.Framework.Communications.Cache
}
}
}
+
+ ///
+ /// Create a folder in this agent's inventory
+ ///
+ ///
+ ///
+ public bool CreateFolder(string folderName, LLUUID folderID, ushort folderType, LLUUID parentID)
+ {
+// m_log.DebugFormat(
+// "[AGENT INVENTORY]: Creating inventory folder {0} {1} for {2} {3}", folderID, folderName, remoteClient.Name, remoteClient.AgentId);
+
+ if (HasInventory)
+ {
+ if (RootFolder.ID == parentID)
+ {
+ InventoryFolderImpl createdFolder = RootFolder.CreateNewSubFolder(folderID, folderName, folderType);
+
+ if (createdFolder != null)
+ {
+ InventoryFolderBase createdBaseFolder = new InventoryFolderBase();
+ createdBaseFolder.Owner = createdFolder.Owner;
+ createdBaseFolder.ID = createdFolder.ID;
+ createdBaseFolder.Name = createdFolder.Name;
+ createdBaseFolder.ParentID = createdFolder.ParentID;
+ createdBaseFolder.Type = createdFolder.Type;
+ createdBaseFolder.Version = createdFolder.Version;
+
+ m_commsManager.InventoryService.AddFolder(createdBaseFolder);
+
+ return true;
+ }
+ else
+ {
+ m_log.WarnFormat(
+ "[INVENTORY CACHE]: Tried to create folder {0} {1} but the folder already exists",
+ folderName, folderID);
+
+ return false;
+ }
+ }
+ else
+ {
+ InventoryFolderImpl folder = RootFolder.GetDescendentFolder(parentID);
+
+ if (folder != null)
+ {
+ InventoryFolderImpl createdFolder = folder.CreateNewSubFolder(folderID, folderName, folderType);
+
+ if (createdFolder != null)
+ {
+ InventoryFolderBase createdBaseFolder = new InventoryFolderBase();
+ createdBaseFolder.Owner = createdFolder.Owner;
+ createdBaseFolder.ID = createdFolder.ID;
+ createdBaseFolder.Name = createdFolder.Name;
+ createdBaseFolder.ParentID = createdFolder.ParentID;
+ createdBaseFolder.Type = createdFolder.Type;
+ createdBaseFolder.Version = createdFolder.Version;
+
+ m_commsManager.InventoryService.AddFolder(createdBaseFolder);
+
+ return true;
+ }
+ else
+ {
+ m_log.WarnFormat(
+ "[INVENTORY CACHE]: Tried to create folder {0} {1} but the folder already exists",
+ folderName, folderID);
+
+ return false;
+ }
+ }
+ else
+ {
+ m_log.WarnFormat(
+ "[INVENTORY CACHE]: Could not find parent folder with id {0} in order to create folder {1} {2}",
+ parentID, folderName, folderID);
+
+ return false;
+ }
+ }
+ }
+ else
+ {
+ AddRequest(
+ new InventoryRequest(
+ Delegate.CreateDelegate(typeof(CreateInventoryFolderDelegate), this, "CreateFolder"),
+ new object[] { folderName, folderID, folderType, parentID }));
+
+ return true;
+ }
+
+ return false;
+ }
///
/// Add an item to the user's inventory
@@ -360,7 +458,7 @@ namespace OpenSim.Framework.Communications.Cache
///
/// Generic inventory request
///
- public class InventoryRequest : IInventoryRequest
+ class InventoryRequest : IInventoryRequest
{
private Delegate m_delegat;
private Object[] m_args;
diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
index befb6c7..f1929c8 100644
--- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
+++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
@@ -34,8 +34,6 @@ using log4net;
namespace OpenSim.Framework.Communications.Cache
{
- internal delegate void CreateInventoryFolderDelegate(
- IClientAPI remoteClient, LLUUID folderID, ushort folderType, string folderName, LLUUID parentID);
internal delegate void MoveInventoryFolderDelegate(IClientAPI remoteClient, LLUUID folderID, LLUUID parentID);
internal delegate void PurgeInventoryDescendentsDelegate(IClientAPI remoteClient, LLUUID folderID);
internal delegate void UpdateInventoryFolderDelegate(
@@ -157,80 +155,16 @@ namespace OpenSim.Framework.Communications.Cache
///
public void HandleCreateInventoryFolder(IClientAPI remoteClient, LLUUID folderID, ushort folderType,
string folderName, LLUUID parentID)
- {
-// m_log.DebugFormat(
-// "[AGENT INVENTORY]: Creating inventory folder {0} {1} for {2} {3}", folderID, folderName, remoteClient.Name, remoteClient.AgentId);
-
+ {
CachedUserInfo userProfile;
if (m_userProfiles.TryGetValue(remoteClient.AgentId, out userProfile))
{
- if (userProfile.HasInventory)
+ if (!userProfile.CreateFolder(folderName, folderID, folderType, parentID))
{
- if (userProfile.RootFolder.ID == parentID)
- {
- InventoryFolderImpl createdFolder =
- userProfile.RootFolder.CreateNewSubFolder(folderID, folderName, folderType);
-
- if (createdFolder != null)
- {
- InventoryFolderBase createdBaseFolder = new InventoryFolderBase();
- createdBaseFolder.Owner = createdFolder.Owner;
- createdBaseFolder.ID = createdFolder.ID;
- createdBaseFolder.Name = createdFolder.Name;
- createdBaseFolder.ParentID = createdFolder.ParentID;
- createdBaseFolder.Type = createdFolder.Type;
- createdBaseFolder.Version = createdFolder.Version;
-
- m_commsManager.InventoryService.AddFolder(createdBaseFolder);
- }
- else
- {
- m_log.WarnFormat(
- "[INVENTORY CACHE]: Tried to create folder {0} {1} for user {2} {3} but the folder already exists",
- folderName, folderID, remoteClient.Name, remoteClient.AgentId);
- }
- }
- else
- {
- InventoryFolderImpl folder = userProfile.RootFolder.GetDescendentFolder(parentID);
- if (folder != null)
- {
- InventoryFolderImpl createdFolder = folder.CreateNewSubFolder(folderID, folderName, folderType);
-
- if (createdFolder != null)
- {
- InventoryFolderBase createdBaseFolder = new InventoryFolderBase();
- createdBaseFolder.Owner = createdFolder.Owner;
- createdBaseFolder.ID = createdFolder.ID;
- createdBaseFolder.Name = createdFolder.Name;
- createdBaseFolder.ParentID = createdFolder.ParentID;
- createdBaseFolder.Type = createdFolder.Type;
- createdBaseFolder.Version = createdFolder.Version;
-
- m_commsManager.InventoryService.AddFolder(createdBaseFolder);
- }
- else
- {
- m_log.WarnFormat(
- "[INVENTORY CACHE]: Tried to create folder {0} {1} for user {2} {3} but the folder already exists",
- folderName, folderID, remoteClient.Name, remoteClient.AgentId);
- }
- }
- else
- {
- m_log.WarnFormat(
- "[INVENTORY CACHE]: Could not find parent folder with id {0} in order to create folder {1} {2} for user {3} {4}",
- parentID, folderName, folderID, remoteClient.Name, remoteClient.AgentId);
- }
- }
- }
- else
- {
- userProfile.AddRequest(
- new InventoryRequest(
- Delegate.CreateDelegate(typeof(CreateInventoryFolderDelegate), this, "HandleCreateInventoryFolder"),
- new object[] { remoteClient, folderID, folderType, folderName, parentID }));
+ m_log.WarnFormat(
+ "[AGENT INVENTORY]: Failed to create folder for user {0} {1}",
+ remoteClient.Name, remoteClient.AgentId);
}
}
}
diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Framework/Communications/InventoryServiceBase.cs
index 1601963..e81d8c4 100644
--- a/OpenSim/Framework/Communications/InventoryServiceBase.cs
+++ b/OpenSim/Framework/Communications/InventoryServiceBase.cs
@@ -28,11 +28,16 @@
using System;
using System.Collections.Generic;
using System.Reflection;
+using System.Threading;
+
using libsecondlife;
using log4net;
namespace OpenSim.Framework.Communications
{
+ ///
+ /// Abstract base class used by local and grid implementations of an inventory service.
+ ///
public abstract class InventoryServiceBase : IInventoryServices
{
private static readonly ILog m_log
@@ -178,10 +183,11 @@ namespace OpenSim.Framework.Communications
#endregion
+ // See IInventoryServices
public bool AddFolder(InventoryFolderBase folder)
{
m_log.DebugFormat(
- "[AGENT INVENTORY]: Adding folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID);
+ "[AGENT INVENTORY]: Adding folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID);
foreach (KeyValuePair plugin in m_plugins)
{
@@ -192,6 +198,7 @@ namespace OpenSim.Framework.Communications
return true;
}
+ // See IInventoryServices
public bool MoveFolder(InventoryFolderBase folder)
{
m_log.DebugFormat(
@@ -206,6 +213,7 @@ namespace OpenSim.Framework.Communications
return true;
}
+ // See IInventoryServices
public bool AddItem(InventoryItemBase item)
{
m_log.DebugFormat(
@@ -220,6 +228,7 @@ namespace OpenSim.Framework.Communications
return true;
}
+ // See IInventoryServices
public bool UpdateItem(InventoryItemBase item)
{
m_log.InfoFormat(
@@ -234,6 +243,7 @@ namespace OpenSim.Framework.Communications
return true;
}
+ // See IInventoryServices
public bool DeleteItem(InventoryItemBase item)
{
m_log.InfoFormat(
diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs
index d9510e9..f0eef31 100644
--- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs
+++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs
@@ -28,8 +28,11 @@
using System;
using System.Collections.Generic;
using System.Reflection;
+using System.Threading;
+
using libsecondlife;
using log4net;
+
using OpenSim.Framework;
using OpenSim.Framework.Communications;
@@ -48,71 +51,18 @@ namespace OpenSim.Grid.InventoryServer
}
///
- /// Get a user's inventory.
- ///
- ///
- ///
- ///
- /// true if the inventory was retrieved, false otherwise
- private bool GetUsersInventory(LLUUID userID, out List folderList,
- out List itemsList)
- {
- List allFolders = GetInventorySkeleton(userID);
- List allItems = new List();
-
- foreach (InventoryFolderBase folder in allFolders)
- {
- List items = RequestFolderItems(folder.ID);
- if (items != null)
- {
- allItems.InsertRange(0, items);
- }
- }
-
- folderList = allFolders;
- itemsList = allItems;
- if (folderList != null)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
-
- private List GetAllFolders(LLUUID folder)
- {
- List allFolders = new List();
- List folders = RequestSubFolders(folder);
- if (folders != null)
- {
- allFolders.InsertRange(0, folders);
- foreach (InventoryFolderBase subfolder in folders)
- {
- List subFolders = GetAllFolders(subfolder.ID);
- if (subFolders != null)
- {
- allFolders.InsertRange(0, subFolders);
- }
- }
- }
- return allFolders;
- }
-
- ///
/// Return a user's entire inventory
///
///
/// The user's inventory. If an inventory cannot be found then an empty collection is returned.
public InventoryCollection GetUserInventory(Guid rawUserID)
- {
- // uncomment me to simulate an overloaded inventory server
- //Thread.Sleep(20000);
-
+ {
LLUUID userID = new LLUUID(rawUserID);
- m_log.InfoFormat("[GRID AGENT INVENTORY]: Processing request for inventory of {0}", userID);
+ m_log.InfoFormat("[GRID AGENT INVENTORY]: Processing request for inventory of {0}", userID);
+
+ // uncomment me to simulate an overloaded inventory server
+ //Thread.Sleep(20000);
InventoryCollection invCollection = new InventoryCollection();
diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
index 59c45fa..0715b64 100644
--- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
@@ -645,6 +645,7 @@ namespace OpenSim.Region.Environment.Scenes
{
CachedUserInfo userInfo
= CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
+
if (userInfo == null)
{
m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString());
--
cgit v1.1