From b7ae8701ce6881991fbacf28cdbb0d09f220f6ec Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Mon, 14 Apr 2008 18:43:23 +0000
Subject: * Working towards notifying the client if the inventory service has
failed, rather than simply returning 0 items. * This is very early support
which would only be triggered in a rather unlikely case (if the user server
correctly received an inventory skeleton, but later on failed to return the
whole inventory in a timely manner. Also, this only applies to the 1.19.1.4
client onwards * Code cleanup and support for other failure cases (failure of
inventory caching on region crossing, failure to actually add a folder/item,
etc, should follow.
---
.../Cache/UserProfileCacheService.cs | 6 ++--
.../Framework/Communications/Capabilities/Caps.cs | 35 ++++++++++++++++++++--
2 files changed, 35 insertions(+), 6 deletions(-)
(limited to 'OpenSim/Framework')
diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
index 7995841..f746e8b 100644
--- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
+++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
@@ -340,7 +340,7 @@ namespace OpenSim.Framework.Communications.Cache
///
///
///
- ///
+ /// null if the inventory look up failed
public List HandleFetchInventoryDescendentsCAPS(LLUUID agentID, LLUUID folderID, LLUUID ownerID,
bool fetchFolders, bool fetchItems, int sortOrder)
{
@@ -403,7 +403,7 @@ namespace OpenSim.Framework.Communications.Cache
{
m_log.ErrorFormat("[INVENTORY CACHE]: Could not find root folder for user {0}", agentID.ToString());
- return new List(); ;
+ return null;
}
}
else
@@ -412,7 +412,7 @@ namespace OpenSim.Framework.Communications.Cache
"[USER CACHE]: HandleFetchInventoryDescendentsCAPS() Could not find user profile for {0}",
agentID);
- return new List();
+ return null;
}
// If we've reached this point then we couldn't find the folder, even though the client thinks
diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs
index f164208..46f50ad 100644
--- a/OpenSim/Framework/Communications/Capabilities/Caps.cs
+++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs
@@ -56,6 +56,13 @@ namespace OpenSim.Region.Capabilities
public delegate List FetchInventoryDescendentsCAPS(LLUUID agentID, LLUUID folderID, LLUUID ownerID,
bool fetchFolders, bool fetchItems, int sortOrder);
+
+ ///
+ /// XXX Probably not a particularly nice way of allow us to get the scene presence from the scene (chiefly so that
+ /// we can popup a message on the user's client if the inventory service has permanently failed). But I didn't want
+ /// to just pass the whole Scene into CAPS.
+ ///
+ public delegate IClientAPI GetClientDelegate(LLUUID agentID);
public class Caps
{
@@ -99,8 +106,8 @@ namespace OpenSim.Region.Capabilities
public NewInventoryItem AddNewInventoryItem = null;
public ItemUpdatedCallback ItemUpdatedCall = null;
public TaskScriptUpdatedCallback TaskScriptUpdatedCall = null;
- //
public FetchInventoryDescendentsCAPS CAPSFetchInventoryDescendents = null;
+ public GetClientDelegate GetClient = null;
public Caps(AssetCache assetCache, BaseHttpServer httpServer, string httpListen, uint httpPort, string capsPath,
LLUUID agent, bool dumpAssetsToFile)
@@ -240,7 +247,7 @@ namespace OpenSim.Region.Capabilities
LLSDFetchInventoryDescendents llsdRequest = new LLSDFetchInventoryDescendents();
LLSDHelpers.DeserialiseLLSDMap(inventoryhash, llsdRequest);
- LLSDInventoryDescendents reply = FetchInventory(llsdRequest);
+ LLSDInventoryDescendents reply = FetchInventoryReply(llsdRequest);
inventoryitemstr = LLSDHelpers.SerialiseLLSDReply(reply);
inventoryitemstr = inventoryitemstr.Replace("