From 6abffedab5646c0c9d76a308cb9d7a722613fe14 Mon Sep 17 00:00:00 2001 From: diva Date: Sun, 14 Jun 2009 19:44:56 +0000 Subject: Renamed Region/CoreModules/ServiceConnectors to Region/CoreModules/ServiceConnectorsOut. No functional changes. --- .../Inventory/HGInventoryBroker.cs | 401 +++++++++++++++++++++ .../Inventory/LocalInventoryServiceConnector.cs | 286 +++++++++++++++ .../Inventory/RemoteInventoryServiceConnector.cs | 279 ++++++++++++++ 3 files changed, 966 insertions(+) create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs (limited to 'OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory') diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs new file mode 100644 index 0000000..9f6c1a2 --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -0,0 +1,401 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using log4net; +using Nini.Config; +using System; +using System.Collections.Generic; +using System.Reflection; +using OpenSim.Framework; +using OpenSim.Framework.Communications.Cache; +using OpenSim.Server.Base; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; +using OpenSim.Services.Connectors; +using OpenMetaverse; + +namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory +{ + public class HGInventoryBroker : ISharedRegionModule, IInventoryService + { + private static readonly ILog m_log = + LogManager.GetLogger( + MethodBase.GetCurrentMethod().DeclaringType); + + private bool m_Enabled = false; + private bool m_Initialized = false; + private Scene m_Scene; + private UserProfileCacheService m_UserProfileService; // This should change to IUserProfileService + + private IInventoryService m_GridService; + private ISessionAuthInventoryService m_HGService; + + private string m_LocalGridInventoryURI = string.Empty; + public string Name + { + get { return "HGInventoryBroker"; } + } + + public void Initialise(IConfigSource source) + { + IConfig moduleConfig = source.Configs["Modules"]; + if (moduleConfig != null) + { + string name = moduleConfig.GetString("InventoryServices", ""); + if (name == Name) + { + IConfig inventoryConfig = source.Configs["InventoryService"]; + if (inventoryConfig == null) + { + m_log.Error("[HG INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); + return; + } + + string localDll = inventoryConfig.GetString("LocalGridInventoryService", + String.Empty); + string HGDll = inventoryConfig.GetString("HypergridInventoryService", + String.Empty); + + if (localDll == String.Empty) + { + m_log.Error("[HG INVENTORY CONNECTOR]: No LocalGridInventoryService named in section InventoryService"); + //return; + throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); + } + + if (HGDll == String.Empty) + { + m_log.Error("[HG INVENTORY CONNECTOR]: No HypergridInventoryService named in section InventoryService"); + //return; + throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); + } + + Object[] args = new Object[] { source }; + m_GridService = + ServerUtils.LoadPlugin(localDll, + args); + + m_HGService = + ServerUtils.LoadPlugin(HGDll, + args); + + if (m_GridService == null) + { + m_log.Error("[HG INVENTORY CONNECTOR]: Can't load local inventory service"); + return; + } + if (m_HGService == null) + { + m_log.Error("[HG INVENTORY CONNECTOR]: Can't load hypergrid inventory service"); + return; + } + + m_LocalGridInventoryURI = inventoryConfig.GetString("InventoryServerURI", string.Empty); + + m_Enabled = true; + m_log.Info("[HG INVENTORY CONNECTOR]: HG inventory broker enabled"); + } + } + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + if (!m_Initialized) + { + m_Scene = scene; + // HACK for now. Ugh! + m_UserProfileService = m_Scene.CommsManager.UserProfileCacheService; + // ugh! + m_UserProfileService.SetInventoryService(this); + scene.CommsManager.UserService.SetInventoryService(this); + + m_Initialized = true; + } + + scene.RegisterModuleInterface(this); + } + + public void RemoveRegion(Scene scene) + { + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + + m_log.InfoFormat("[INVENTORY CONNECTOR]: Enabled HG inventory for region {0}", scene.RegionInfo.RegionName); + + } + + #region IInventoryService + + public bool CreateUserInventory(UUID userID) + { + return m_GridService.CreateUserInventory(userID); + } + + public List GetInventorySkeleton(UUID userId) + { + return m_GridService.GetInventorySkeleton(userId); + } + + public InventoryCollection GetUserInventory(UUID userID) + { + if (IsLocalGridUser(userID)) + return m_GridService.GetUserInventory(userID); + else + return null; + } + + public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) + { + if (IsLocalGridUser(userID)) + m_GridService.GetUserInventory(userID, callback); + else + { + UUID sessionID = GetSessionID(userID); + string uri = GetUserInventoryURI(userID) + "/" + userID.ToString(); + m_HGService.GetUserInventory(uri, sessionID, callback); + } + } + + public List GetFolderItems(UUID userID, UUID folderID) + { + return new List(); + } + + public bool AddFolder(InventoryFolderBase folder) + { + if (folder == null) + return false; + + if (IsLocalGridUser(folder.Owner)) + return m_GridService.AddFolder(folder); + else + { + UUID sessionID = GetSessionID(folder.Owner); + string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); + return m_HGService.AddFolder(uri, folder, sessionID); + } + } + + public bool UpdateFolder(InventoryFolderBase folder) + { + if (folder == null) + return false; + + if (IsLocalGridUser(folder.Owner)) + return m_GridService.UpdateFolder(folder); + else + { + UUID sessionID = GetSessionID(folder.Owner); + string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); + return m_HGService.UpdateFolder(uri, folder, sessionID); + } + } + + public bool MoveFolder(InventoryFolderBase folder) + { + if (folder == null) + return false; + + if (IsLocalGridUser(folder.Owner)) + return m_GridService.MoveFolder(folder); + else + { + UUID sessionID = GetSessionID(folder.Owner); + string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); + return m_HGService.MoveFolder(uri, folder, sessionID); + } + } + + public bool PurgeFolder(InventoryFolderBase folder) + { + if (folder == null) + return false; + + if (IsLocalGridUser(folder.Owner)) + return m_GridService.PurgeFolder(folder); + else + { + UUID sessionID = GetSessionID(folder.Owner); + string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); + return m_HGService.PurgeFolder(uri, folder, sessionID); + } + } + + public bool AddItem(InventoryItemBase item) + { + if (item == null) + return false; + + if (IsLocalGridUser(item.Owner)) + return m_GridService.AddItem(item); + else + { + UUID sessionID = GetSessionID(item.Owner); + string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString(); + return m_HGService.AddItem(uri, item, sessionID); + } + } + + public bool UpdateItem(InventoryItemBase item) + { + if (item == null) + return false; + + if (IsLocalGridUser(item.Owner)) + return m_GridService.UpdateItem(item); + else + { + UUID sessionID = GetSessionID(item.Owner); + string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString(); + return m_HGService.UpdateItem(uri, item, sessionID); + } + } + + public bool DeleteItem(InventoryItemBase item) + { + if (item == null) + return false; + + if (IsLocalGridUser(item.Owner)) + return m_GridService.DeleteItem(item); + else + { + UUID sessionID = GetSessionID(item.Owner); + string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString(); + return m_HGService.DeleteItem(uri, item, sessionID); + } + } + + public InventoryItemBase QueryItem(InventoryItemBase item) + { + if (item == null) + return null; + + if (IsLocalGridUser(item.Owner)) + return m_GridService.QueryItem(item); + else + { + UUID sessionID = GetSessionID(item.Owner); + string uri = GetUserInventoryURI(item.Owner) + "/" + item.Owner.ToString(); + return m_HGService.QueryItem(uri, item, sessionID); + } + } + + public InventoryFolderBase QueryFolder(InventoryFolderBase folder) + { + if (folder == null) + return null; + + if (IsLocalGridUser(folder.Owner)) + return m_GridService.QueryFolder(folder); + else + { + UUID sessionID = GetSessionID(folder.Owner); + string uri = GetUserInventoryURI(folder.Owner) + "/" + folder.Owner.ToString(); + return m_HGService.QueryFolder(uri, folder, sessionID); + } + } + + public bool HasInventoryForUser(UUID userID) + { + return false; + } + + public InventoryFolderBase RequestRootFolder(UUID userID) + { + return null; + } + + public List GetActiveGestures(UUID userId) + { + return new List(); + } + + #endregion + + private UUID GetSessionID(UUID userID) + { + ScenePresence sp = m_Scene.GetScenePresence(userID); + if (sp != null) + return sp.ControllingClient.SessionId; + + return UUID.Zero; + } + + private bool IsLocalGridUser(UUID userID) + { + if (m_UserProfileService == null) + return false; + + CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); + if (uinfo == null) + return true; + + string userInventoryServerURI = HGNetworkServersInfo.ServerURI(uinfo.UserProfile.UserInventoryURI); + + if ((userInventoryServerURI == m_LocalGridInventoryURI) || (userInventoryServerURI == "")) + { + return true; + } + return false; + } + + private string GetUserInventoryURI(UUID userID) + { + string invURI = m_LocalGridInventoryURI; + + CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); + if ((uinfo == null) || (uinfo.UserProfile == null)) + return invURI; + + string userInventoryServerURI = HGNetworkServersInfo.ServerURI(uinfo.UserProfile.UserInventoryURI); + + if ((userInventoryServerURI != null) && + (userInventoryServerURI != "")) + invURI = userInventoryServerURI; + return invURI; + } + + + } +} diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs new file mode 100644 index 0000000..8f04025 --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -0,0 +1,286 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using log4net; +using Nini.Config; + +using System; +using System.Collections.Generic; +using System.Reflection; +using OpenSim.Framework; +using OpenSim.Data; +using OpenSim.Server.Base; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; +using OpenMetaverse; + + +namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory +{ + public class LocalInventoryServicesConnector : ISharedRegionModule, IInventoryService + { + private static readonly ILog m_log = + LogManager.GetLogger( + MethodBase.GetCurrentMethod().DeclaringType); + + private IInventoryService m_InventoryService; + + private bool m_Enabled = false; + private bool m_Initialized = false; + + public string Name + { + get { return "LocalInventoryServicesConnector"; } + } + + public void Initialise(IConfigSource source) + { + IConfig moduleConfig = source.Configs["Modules"]; + if (moduleConfig != null) + { + string name = moduleConfig.GetString("InventoryServices", ""); + if (name == Name) + { + IConfig inventoryConfig = source.Configs["InventoryService"]; + if (inventoryConfig == null) + { + m_log.Error("[INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); + return; + } + + string serviceDll = inventoryConfig.GetString("LocalServiceModule", String.Empty); + + if (serviceDll == String.Empty) + { + m_log.Error("[INVENTORY CONNECTOR]: No LocalServiceModule named in section InventoryService"); + return; + } + + Object[] args = new Object[] { source }; + m_log.DebugFormat("[INVENTORY CONNECTOR]: Service dll = {0}", serviceDll); + + m_InventoryService = ServerUtils.LoadPlugin(serviceDll, args); + + if (m_InventoryService == null) + { + m_log.Error("[INVENTORY CONNECTOR]: Can't load inventory service"); + //return; + throw new Exception("Unable to proceed. Please make sure your ini files in config-include are updated according to .example's"); + } + + //List plugins + // = DataPluginFactory.LoadDataPlugins( + // configSettings.StandaloneInventoryPlugin, + // configSettings.StandaloneInventorySource); + + //foreach (IInventoryDataPlugin plugin in plugins) + //{ + // // Using the OSP wrapper plugin for database plugins should be made configurable at some point + // m_InventoryService.AddPlugin(new OspInventoryWrapperPlugin(plugin, this)); + //} + + m_Enabled = true; + m_log.Info("[INVENTORY CONNECTOR]: Local inventory connector enabled"); + } + } + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + if (!m_Initialized) + { + // ugh! + scene.CommsManager.UserProfileCacheService.SetInventoryService(this); + scene.CommsManager.UserService.SetInventoryService(this); + m_Initialized = true; + } + +// m_log.DebugFormat( +// "[INVENTORY CONNECTOR]: Registering IInventoryService to scene {0}", scene.RegionInfo.RegionName); + + scene.RegisterModuleInterface(this); + } + + public void RemoveRegion(Scene scene) + { + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + + m_log.InfoFormat( + "[INVENTORY CONNECTOR]: Enabled local invnetory for region {0}", scene.RegionInfo.RegionName); + } + + #region IInventoryService + + public bool CreateUserInventory(UUID user) + { + return m_InventoryService.CreateUserInventory(user); + } + + public List GetInventorySkeleton(UUID userId) + { + return m_InventoryService.GetInventorySkeleton(userId); + } + + public InventoryCollection GetUserInventory(UUID id) + { + return m_InventoryService.GetUserInventory(id); + } + + public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) + { + m_InventoryService.GetUserInventory(userID, callback); + } + + public List GetFolderItems(UUID userID, UUID folderID) + { + return m_InventoryService.GetFolderItems(userID, folderID); + } + + /// + /// Add a new folder to the user's inventory + /// + /// + /// true if the folder was successfully added + public bool AddFolder(InventoryFolderBase folder) + { + return m_InventoryService.AddFolder(folder); + } + + /// + /// Update a folder in the user's inventory + /// + /// + /// true if the folder was successfully updated + public bool UpdateFolder(InventoryFolderBase folder) + { + return m_InventoryService.UpdateFolder(folder); + } + + /// + /// Move an inventory folder to a new location + /// + /// A folder containing the details of the new location + /// true if the folder was successfully moved + public bool MoveFolder(InventoryFolderBase folder) + { + return m_InventoryService.MoveFolder(folder); + } + + /// + /// Purge an inventory folder of all its items and subfolders. + /// + /// + /// true if the folder was successfully purged + public bool PurgeFolder(InventoryFolderBase folder) + { + return m_InventoryService.PurgeFolder(folder); + } + + /// + /// Add a new item to the user's inventory + /// + /// + /// true if the item was successfully added + public bool AddItem(InventoryItemBase item) + { + return m_InventoryService.AddItem(item); + } + + /// + /// Update an item in the user's inventory + /// + /// + /// true if the item was successfully updated + public bool UpdateItem(InventoryItemBase item) + { + return m_InventoryService.UpdateItem(item); + } + + /// + /// Delete an item from the user's inventory + /// + /// + /// true if the item was successfully deleted + public bool DeleteItem(InventoryItemBase item) + { + return m_InventoryService.DeleteItem(item); + } + + public InventoryItemBase QueryItem(InventoryItemBase item) + { + return m_InventoryService.QueryItem(item); + } + + public InventoryFolderBase QueryFolder(InventoryFolderBase folder) + { + return m_InventoryService.QueryFolder(folder); + } + + /// + /// Does the given user have an inventory structure? + /// + /// + /// + public bool HasInventoryForUser(UUID userID) + { + return m_InventoryService.HasInventoryForUser(userID); + } + + /// + /// Retrieve the root inventory folder for the given user. + /// + /// + /// null if no root folder was found + public InventoryFolderBase RequestRootFolder(UUID userID) + { + return m_InventoryService.RequestRootFolder(userID); + } + + public List GetActiveGestures(UUID userId) + { + return m_InventoryService.GetActiveGestures(userId); + } + #endregion IInventoryService + } +} diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs new file mode 100644 index 0000000..9b51da7 --- /dev/null +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -0,0 +1,279 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSimulator Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using log4net; +using System; +using System.Collections.Generic; +using System.Reflection; +using Nini.Config; +using OpenSim.Framework; +using OpenSim.Framework.Statistics; +using OpenSim.Services.Connectors; +using OpenSim.Region.Framework.Interfaces; +using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; +using OpenMetaverse; + +namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory +{ + public class RemoteInventoryServicesConnector : ISharedRegionModule, IInventoryService + { + private static readonly ILog m_log = + LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private bool m_Enabled = false; + private bool m_Initialized = false; + private Scene m_Scene; + private InventoryServicesConnector m_RemoteConnector; + + public string Name + { + get { return "RemoteInventoryServicesConnector"; } + } + + public RemoteInventoryServicesConnector() + { + } + + public RemoteInventoryServicesConnector(IConfigSource source) + { + Init(source); + } + + private void Init(IConfigSource source) + { + m_RemoteConnector = new InventoryServicesConnector(source); + } + + + #region ISharedRegionModule + + public void Initialise(IConfigSource source) + { + IConfig moduleConfig = source.Configs["Modules"]; + if (moduleConfig != null) + { + string name = moduleConfig.GetString("InventoryServices", ""); + if (name == Name) + { + Init(source); + m_Enabled = true; + + m_log.Info("[INVENTORY CONNECTOR]: Remote inventory enabled"); + } + } + } + + public void PostInitialise() + { + } + + public void Close() + { + } + + public void AddRegion(Scene scene) + { + if (!m_Enabled) + return; + + if (!m_Initialized) + { + m_Scene = scene; + // ugh! + scene.CommsManager.UserProfileCacheService.SetInventoryService(this); + scene.CommsManager.UserService.SetInventoryService(this); + m_Initialized = true; + } + + scene.RegisterModuleInterface(this); + } + + public void RemoveRegion(Scene scene) + { + } + + public void RegionLoaded(Scene scene) + { + if (!m_Enabled) + return; + + m_log.InfoFormat("[INVENTORY CONNECTOR]: Enabled remote inventory for region {0}", scene.RegionInfo.RegionName); + + } + + #endregion ISharedRegionModule + + #region IInventoryService + + public bool CreateUserInventory(UUID user) + { + return false; + } + + public List GetInventorySkeleton(UUID userId) + { + return new List(); + } + + public InventoryCollection GetUserInventory(UUID userID) + { + return null; + } + + public void GetUserInventory(UUID userID, InventoryReceiptCallback callback) + { + UUID sessionID = GetSessionID(userID); + try + { + m_RemoteConnector.GetUserInventory(userID.ToString(), sessionID, callback); + } + catch (Exception e) + { + if (StatsManager.SimExtraStats != null) + StatsManager.SimExtraStats.AddInventoryServiceRetrievalFailure(); + + m_log.ErrorFormat("[INVENTORY CONNECTOR]: Request inventory operation failed, {0} {1}", + e.Source, e.Message); + } + + } + + public List GetFolderItems(UUID userID, UUID folderID) + { + return new List(); + } + + public bool AddFolder(InventoryFolderBase folder) + { + if (folder == null) + return false; + + UUID sessionID = GetSessionID(folder.Owner); + return m_RemoteConnector.AddFolder(folder.Owner.ToString(), folder, sessionID); + } + + public bool UpdateFolder(InventoryFolderBase folder) + { + if (folder == null) + return false; + + UUID sessionID = GetSessionID(folder.Owner); + return m_RemoteConnector.UpdateFolder(folder.Owner.ToString(), folder, sessionID); + } + + public bool MoveFolder(InventoryFolderBase folder) + { + if (folder == null) + return false; + + UUID sessionID = GetSessionID(folder.Owner); + return m_RemoteConnector.MoveFolder(folder.Owner.ToString(), folder, sessionID); + } + + public bool PurgeFolder(InventoryFolderBase folder) + { + if (folder == null) + return false; + + UUID sessionID = GetSessionID(folder.Owner); + return m_RemoteConnector.PurgeFolder(folder.Owner.ToString(), folder, sessionID); + } + + public bool AddItem(InventoryItemBase item) + { + if (item == null) + return false; + + UUID sessionID = GetSessionID(item.Owner); + return m_RemoteConnector.AddItem(item.Owner.ToString(), item, sessionID); + } + + public bool UpdateItem(InventoryItemBase item) + { + if (item == null) + return false; + + UUID sessionID = GetSessionID(item.Owner); + return m_RemoteConnector.UpdateItem(item.Owner.ToString(), item, sessionID); + } + + public bool DeleteItem(InventoryItemBase item) + { + if (item == null) + return false; + + UUID sessionID = GetSessionID(item.Owner); + return m_RemoteConnector.DeleteItem(item.Owner.ToString(), item, sessionID); + } + + public InventoryItemBase QueryItem(InventoryItemBase item) + { + if (item == null) + return null; + + UUID sessionID = GetSessionID(item.Owner); + return m_RemoteConnector.QueryItem(item.Owner.ToString(), item, sessionID); + } + + public InventoryFolderBase QueryFolder(InventoryFolderBase folder) + { + if (folder == null) + return null; + + UUID sessionID = GetSessionID(folder.Owner); + return m_RemoteConnector.QueryFolder(folder.Owner.ToString(), folder, sessionID); + } + + public bool HasInventoryForUser(UUID userID) + { + return false; + } + + public InventoryFolderBase RequestRootFolder(UUID userID) + { + return null; + } + + public List GetActiveGestures(UUID userId) + { + return new List(); + } + + #endregion + + private UUID GetSessionID(UUID userID) + { + ScenePresence sp = m_Scene.GetScenePresence(userID); + if (sp != null) + return sp.ControllingClient.SessionId; + + return UUID.Zero; + } + + } +} -- cgit v1.1