diff --git a/OpenSim/Addons/OfflineIM/Service/OfflineIMService.cs b/OpenSim/Addons/OfflineIM/Service/OfflineIMService.cs index bf578a0b9e..57c724a171 100644 --- a/OpenSim/Addons/OfflineIM/Service/OfflineIMService.cs +++ b/OpenSim/Addons/OfflineIM/Service/OfflineIMService.cs @@ -28,10 +28,7 @@ using System; using System.Collections.Generic; using System.IO; -using System.Reflection; -using System.Runtime.Serialization; using System.Text; -using System.Timers; using System.Xml; using System.Xml.Serialization; using log4net; @@ -40,21 +37,59 @@ using Nini.Config; using OpenMetaverse; using OpenSim.Data; using OpenSim.Framework; +using OpenSim.Services.Base; using OpenSim.Services.Interfaces; namespace OpenSim.OfflineIM { - public class OfflineIMService : OfflineIMServiceBase, IOfflineIMService + public class OfflineIMService : ServiceBase, IOfflineIMService { -// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private const int MAX_IM = 25; - + //private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private IOfflineIMData m_Database = null; + private int m_MaxOfflineIMs = 25; private XmlSerializer m_serializer; private static bool m_Initialized = false; - public OfflineIMService(IConfigSource config) - : base(config) + public OfflineIMService(IConfigSource config) : base(config) { + string dllName = string.Empty; + string connString = string.Empty; + string realm = "im_offline"; + + // + // Try reading the [DatabaseService] section, if it exists + // + IConfig dbConfig = config.Configs["DatabaseService"]; + if (dbConfig is not null) + { + if (dllName.Length == 0) + dllName = dbConfig.GetString("StorageProvider", string.Empty); + if (connString.Length == 0) + connString = dbConfig.GetString("ConnectionString", string.Empty); + } + + // + // [Messaging] section overrides [DatabaseService], if it exists + // + IConfig imConfig = config.Configs["Messaging"]; + if (imConfig is not null) + { + dllName = imConfig.GetString("StorageProvider", dllName); + connString = imConfig.GetString("ConnectionString", connString); + realm = imConfig.GetString("Realm", realm); + m_MaxOfflineIMs = imConfig.GetInt("MaxOfflineIMs", m_MaxOfflineIMs); + } + + // + // We tried, but this doesn't exist. We can't proceed. + // + if (string.IsNullOrEmpty(dllName)) + throw new Exception("No StorageProvider configured"); + + m_Database = LoadPlugin(dllName, new Object[] { connString, realm }); + if (m_Database is null) + throw new Exception("Could not find a storage interface in the given module " + dllName); + m_serializer = new XmlSerializer(typeof(GridInstantMessage)); if (!m_Initialized) { @@ -68,8 +103,7 @@ namespace OpenSim.OfflineIM List ims = new List(); OfflineIMData[] messages = m_Database.Get("PrincipalID", principalID.ToString()); - - if (messages == null || (messages != null && messages.Length == 0)) + if (messages is null || messages.Length == 0) return ims; foreach (OfflineIMData m in messages) @@ -94,7 +128,7 @@ namespace OpenSim.OfflineIM // Check limits UUID principalID = new UUID(im.toAgentID); long count = m_Database.GetCount("PrincipalID", principalID.ToString()); - if (count >= MAX_IM) + if (count >= m_MaxOfflineIMs) { reason = "Number of offline IMs has maxed out"; return false; diff --git a/OpenSim/Addons/OfflineIM/Service/OfflineIMServiceBase.cs b/OpenSim/Addons/OfflineIM/Service/OfflineIMServiceBase.cs deleted file mode 100644 index d68ae3d7c5..0000000000 --- a/OpenSim/Addons/OfflineIM/Service/OfflineIMServiceBase.cs +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 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 System; -using System.Collections.Generic; -using System.Reflection; -using Nini.Config; -using OpenSim.Framework; -using OpenSim.Data; -using OpenSim.Services.Interfaces; -using OpenSim.Services.Base; - -namespace OpenSim.OfflineIM -{ - public class OfflineIMServiceBase : ServiceBase - { - protected IOfflineIMData m_Database = null; - - public OfflineIMServiceBase(IConfigSource config) - : base(config) - { - string dllName = String.Empty; - string connString = String.Empty; - string realm = "im_offline"; - - // - // Try reading the [DatabaseService] section, if it exists - // - IConfig dbConfig = config.Configs["DatabaseService"]; - if (dbConfig != null) - { - if (dllName.Length == 0) - dllName = dbConfig.GetString("StorageProvider", String.Empty); - if (connString.Length == 0) - connString = dbConfig.GetString("ConnectionString", String.Empty); - } - - // - // [Messaging] section overrides [DatabaseService], if it exists - // - IConfig imConfig = config.Configs["Messaging"]; - if (imConfig != null) - { - dllName = imConfig.GetString("StorageProvider", dllName); - connString = imConfig.GetString("ConnectionString", connString); - realm = imConfig.GetString("Realm", realm); - } - - // - // We tried, but this doesn't exist. We can't proceed. - // - if (string.IsNullOrEmpty(dllName)) - throw new Exception("No StorageProvider configured"); - - m_Database = LoadPlugin(dllName, new Object[] { connString, realm }); - if (m_Database == null) - throw new Exception("Could not find a storage interface in the given module " + dllName); - } - } -} diff --git a/OpenSim/Services/Base/ServiceBase.cs b/OpenSim/Services/Base/ServiceBase.cs index 2017f50cbf..9cbe7cb59e 100644 --- a/OpenSim/Services/Base/ServiceBase.cs +++ b/OpenSim/Services/Base/ServiceBase.cs @@ -31,7 +31,6 @@ using System.Collections.Generic; using System.Reflection; using log4net; using Nini.Config; -using OpenSim.Services.Interfaces; namespace OpenSim.Services.Base { @@ -73,27 +72,22 @@ namespace OpenSim.Services.Base { Assembly pluginAssembly = Assembly.LoadFrom(dllName); -// m_log.DebugFormat("[SERVICE BASE]: Found assembly {0}", dllName); + //m_log.DebugFormat("[SERVICE BASE]: Found assembly {0}", dllName); foreach (Type pluginType in pluginAssembly.GetTypes()) { -// m_log.DebugFormat("[SERVICE BASE]: Found type {0}", pluginType); + //m_log.DebugFormat("[SERVICE BASE]: Found type {0}", pluginType); if (pluginType.IsPublic) { - if (className != String.Empty && - pluginType.ToString() != - pluginType.Namespace + "." + className) + if (!string.IsNullOrEmpty(className) && + pluginType.ToString() != pluginType.Namespace + "." + className) continue; - Type typeInterface = - pluginType.GetInterface(interfaceName); - if (typeInterface != null) + Type typeInterface = pluginType.GetInterface(interfaceName); + if (typeInterface is not null) { - T plug = (T)Activator.CreateInstance(pluginType, - args); - - return plug; + return (T)Activator.CreateInstance(pluginType, args); } } } @@ -106,10 +100,9 @@ namespace OpenSim.Services.Base foreach (Object arg in args) strArgs.Add(arg.ToString()); - m_log.Error( - string.Format( + m_log.ErrorFormat( "[SERVICE BASE]: Failed to load plugin {0} from {1} with args {2}", - interfaceName, dllName, string.Join(", ", strArgs.ToArray())), e); + interfaceName, dllName, string.Join(", ", strArgs.ToArray()), e); return null; } diff --git a/bin/Robust.HG.ini.example b/bin/Robust.HG.ini.example index fb98ed43c5..d3bc92fca7 100644 --- a/bin/Robust.HG.ini.example +++ b/bin/Robust.HG.ini.example @@ -821,6 +821,8 @@ [Messaging] ; OfflineIM OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" + ; maximum number of offline ims per user, default 25 + ;MaxOfflineIMs = 25; [Groups] diff --git a/bin/Robust.ini.example b/bin/Robust.ini.example index 52b0a42da0..bb8df149a8 100644 --- a/bin/Robust.ini.example +++ b/bin/Robust.ini.example @@ -579,6 +579,8 @@ [Messaging] ; OfflineIM OfflineIMService = "OpenSim.Addons.OfflineIM.dll:OfflineIMService" + ; maximum number of offline ims per user, default 25 + ;MaxOfflineIMs = 25; [Groups]