From ff08d4d016c048d78cc6de86e62d8e94748bf968 Mon Sep 17 00:00:00 2001 From: MW Date: Tue, 14 Aug 2007 14:57:52 +0000 Subject: [PATCH] More inventory work, should be able to now create new inventory folders and them be stored in database (so are there on next login). Again only works in standalone mode with Account/password authentication turned on. [Creating new inventory items should be working very soon.] The test is to make sure that it hasn't broke grid mode at all. --- .../Communications/Cache/CachedUserInfo.cs | 4 +- .../Communications/Cache/UserProfileCache.cs | 59 +++++++++++-------- .../Communications/IInventoryServices.cs | 1 + .../Local/LocalInventoryService.cs | 5 ++ .../Communications/OGS1/CommunicationsOGS1.cs | 7 ++- .../OGS1/OGS1InventoryService.cs | 28 +++++++++ OpenSim/Region/Environment/Scenes/Scene.cs | 4 +- 7 files changed, 80 insertions(+), 28 deletions(-) create mode 100644 OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index d850305e2f..fc2f9487ad 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -41,8 +41,8 @@ namespace OpenSim.Framework.Communications.Caches public class CachedUserInfo { // Fields - public InventoryFolder RootFolder; - public UserProfileData UserProfile; + public InventoryFolder RootFolder = null; + public UserProfileData UserProfile = null; // Methods public void FolderReceive(LLUUID userID, InventoryFolder folderInfo) diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCache.cs b/OpenSim/Framework/Communications/Cache/UserProfileCache.cs index 2271550e91..e65b6b2dcd 100644 --- a/OpenSim/Framework/Communications/Cache/UserProfileCache.cs +++ b/OpenSim/Framework/Communications/Cache/UserProfileCache.cs @@ -98,17 +98,24 @@ namespace OpenSim.Framework.Communications.Caches { if (this.UserProfiles.ContainsKey(remoteClient.AgentId)) { - CachedUserInfo info = this.UserProfiles[remoteClient.AgentId]; - if (info.RootFolder.folderID == parentID) + if (this.UserProfiles[remoteClient.AgentId].RootFolder != null) { - info.RootFolder.CreateNewSubFolder(folderID, folderName, folderType); - } - else - { - InventoryFolder folder = info.RootFolder.HasSubFolder(parentID); - if (folder != null) + CachedUserInfo info = this.UserProfiles[remoteClient.AgentId]; + if (info.RootFolder.folderID == parentID) { - folder.CreateNewSubFolder(folderID, folderName, folderType); + InventoryFolder createdFolder = info.RootFolder.CreateNewSubFolder(folderID, folderName, folderType); + if (createdFolder != null) + { + this.m_parent.InventoryServer.AddNewInventoryFolder(remoteClient.AgentId, createdFolder); + } + } + else + { + InventoryFolder folder = info.RootFolder.HasSubFolder(parentID); + if (folder != null) + { + folder.CreateNewSubFolder(folderID, folderName, folderType); + } } } } @@ -127,20 +134,23 @@ namespace OpenSim.Framework.Communications.Caches } else if (this.UserProfiles.ContainsKey(remoteClient.AgentId)) { - CachedUserInfo info = this.UserProfiles[remoteClient.AgentId]; - if (info.RootFolder.folderID == folderID) + if (this.UserProfiles[remoteClient.AgentId].RootFolder != null) { - if (fetchItems) + CachedUserInfo info = this.UserProfiles[remoteClient.AgentId]; + if (info.RootFolder.folderID == folderID) { - remoteClient.SendInventoryFolderDetails(remoteClient.AgentId, folderID, info.RootFolder.RequestListOfItems()); + if (fetchItems) + { + remoteClient.SendInventoryFolderDetails(remoteClient.AgentId, folderID, info.RootFolder.RequestListOfItems()); + } } - } - else - { - InventoryFolder folder = info.RootFolder.HasSubFolder(folderID); - if ((folder != null) && fetchItems) + else { - remoteClient.SendInventoryFolderDetails(remoteClient.AgentId, folderID, folder.RequestListOfItems()); + InventoryFolder folder = info.RootFolder.HasSubFolder(folderID); + if ((folder != null) && fetchItems) + { + remoteClient.SendInventoryFolderDetails(remoteClient.AgentId, folderID, folder.RequestListOfItems()); + } } } } @@ -154,10 +164,13 @@ namespace OpenSim.Framework.Communications.Caches } else if (this.UserProfiles.ContainsKey(remoteClient.AgentId)) { - InventoryItemBase item = this.UserProfiles[remoteClient.AgentId].RootFolder.HasItem(itemID); - if (item != null) + if (this.UserProfiles[remoteClient.AgentId].RootFolder != null) { - remoteClient.SendInventoryItemDetails(ownerID, item); + InventoryItemBase item = this.UserProfiles[remoteClient.AgentId].RootFolder.HasItem(itemID); + if (item != null) + { + remoteClient.SendInventoryItemDetails(ownerID, item); + } } } } @@ -168,7 +181,7 @@ namespace OpenSim.Framework.Communications.Caches /// private void RequestInventoryForUser(LLUUID userID, CachedUserInfo userInfo) { - //this.m_parent.InventoryServer.RequestInventoryForUser(userID, userInfo.FolderReceive, userInfo.ItemReceive); + this.m_parent.InventoryServer.RequestInventoryForUser(userID, userInfo.FolderReceive, userInfo.ItemReceive); //for now we manually create the root folder, // but should be requesting all inventory from inventory server. diff --git a/OpenSim/Framework/Communications/IInventoryServices.cs b/OpenSim/Framework/Communications/IInventoryServices.cs index b78cba1544..777dbe23ad 100644 --- a/OpenSim/Framework/Communications/IInventoryServices.cs +++ b/OpenSim/Framework/Communications/IInventoryServices.cs @@ -14,5 +14,6 @@ namespace OpenSim.Framework.Communications public interface IInventoryServices { void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack); + void AddNewInventoryFolder(LLUUID userID, InventoryFolder folder); } } diff --git a/OpenSim/Region/Communications/Local/LocalInventoryService.cs b/OpenSim/Region/Communications/Local/LocalInventoryService.cs index 35c2c8cf01..6ba024a978 100644 --- a/OpenSim/Region/Communications/Local/LocalInventoryService.cs +++ b/OpenSim/Region/Communications/Local/LocalInventoryService.cs @@ -47,5 +47,10 @@ namespace OpenSim.Region.Communications.Local } } } + + public void AddNewInventoryFolder(LLUUID userID, InventoryFolder folder) + { + this.AddFolder(folder); + } } } diff --git a/OpenSim/Region/Communications/OGS1/CommunicationsOGS1.cs b/OpenSim/Region/Communications/OGS1/CommunicationsOGS1.cs index 47d3148582..af239f7fc1 100644 --- a/OpenSim/Region/Communications/OGS1/CommunicationsOGS1.cs +++ b/OpenSim/Region/Communications/OGS1/CommunicationsOGS1.cs @@ -8,12 +8,17 @@ namespace OpenSim.Region.Communications.OGS1 { public class CommunicationsOGS1 : CommunicationsManager { - + public OGS1InventoryService InvenService; + public CommunicationsOGS1(NetworkServersInfo serversInfo, BaseHttpServer httpServer, AssetCache assetCache ) :base(serversInfo, httpServer, assetCache) { OGS1GridServices gridInterComms = new OGS1GridServices(serversInfo, httpServer); GridServer = gridInterComms; InterRegion = gridInterComms; + + InvenService = new OGS1InventoryService(); + InventoryServer = InvenService; + UserServer = new OGS1UserServices(this); } } diff --git a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs new file mode 100644 index 0000000000..e8355c6802 --- /dev/null +++ b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using libsecondlife; +using OpenSim.Framework.Communications; +using OpenSim.Framework.Data; +using InventoryFolder = OpenSim.Framework.Communications.Caches.InventoryFolder; + +namespace OpenSim.Region.Communications.OGS1 +{ + public class OGS1InventoryService : IInventoryServices + { + + public OGS1InventoryService() + { + + } + + public void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack) + { + + } + + public void AddNewInventoryFolder(LLUUID userID, InventoryFolder folder) + { + + } + } +} diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index f24def2c15..5123048f2a 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -564,7 +564,7 @@ namespace OpenSim.Region.Environment.Scenes m_estateManager.sendRegionHandshake(client); CreateAndAddScenePresence(client); m_LandManager.sendParcelOverlay(client); - //commsManager.UserProfiles.AddNewUser(client.AgentId); + commsManager.UserProfiles.AddNewUser(client.AgentId); } protected virtual void SubscribeToClientEvents(IClientAPI client) @@ -609,7 +609,7 @@ namespace OpenSim.Region.Environment.Scenes client.OnEstateOwnerMessage += new EstateOwnerMessageRequest(m_estateManager.handleEstateOwnerMessage); //client.OnCreateNewInventoryItem += CreateNewInventoryItem; - //client.OnCreateNewInventoryFolder += commsManager.UserProfiles.HandleCreateInventoryFolder; + client.OnCreateNewInventoryFolder += commsManager.UserProfiles.HandleCreateInventoryFolder; client.OnFetchInventoryDescendents += commsManager.UserProfiles.HandleFecthInventoryDescendents; client.OnRequestTaskInventory += RequestTaskInventory;