From 8b9f8be512ac47a52e5b7df1a5f3d150c92eda39 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Tue, 5 May 2009 05:35:22 +0000 Subject: [PATCH] Some refactoring. Database is now active in the new user server --- ...nector.cs => LocalUserServiceConnector.cs} | 4 +- OpenSim/Servers/User/UserServerConnector.cs | 4 +- .../{IUserServices.cs => IUserService.cs} | 2 +- OpenSim/Services/UserService/UserService.cs | 8 +- .../Services/UserService/UserServiceBase.cs | 85 +++++++++++++++++++ 5 files changed, 94 insertions(+), 9 deletions(-) rename OpenSim/Region/CoreModules/ServiceConnectors/User/{LocalUserServicesConnector.cs => LocalUserServiceConnector.cs} (96%) rename OpenSim/Services/Interfaces/{IUserServices.cs => IUserService.cs} (60%) create mode 100644 OpenSim/Services/UserService/UserServiceBase.cs diff --git a/OpenSim/Region/CoreModules/ServiceConnectors/User/LocalUserServicesConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectors/User/LocalUserServiceConnector.cs similarity index 96% rename from OpenSim/Region/CoreModules/ServiceConnectors/User/LocalUserServicesConnector.cs rename to OpenSim/Region/CoreModules/ServiceConnectors/User/LocalUserServiceConnector.cs index 38f32ed28b..70d440d37b 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectors/User/LocalUserServicesConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectors/User/LocalUserServiceConnector.cs @@ -35,7 +35,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.User { public class LocalUserServicesConnector : INonSharedRegionModule { - private IUserServices m_UserServices; + private IUserService m_UserService; private bool m_Enabled = false; @@ -53,7 +53,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectors.User if (name == Name) { m_Enabled = true; - m_UserServices = new UserService(source); + m_UserService = new UserService(source); } } } diff --git a/OpenSim/Servers/User/UserServerConnector.cs b/OpenSim/Servers/User/UserServerConnector.cs index b86fdb7a0a..c20cc31754 100644 --- a/OpenSim/Servers/User/UserServerConnector.cs +++ b/OpenSim/Servers/User/UserServerConnector.cs @@ -34,11 +34,11 @@ namespace OpenSim.Servers.UserServer { public class UserServiceConnector { - private IUserServices m_UserServices; + private IUserService m_UserService; public UserServiceConnector(IConfigSource config, IHttpServer server) { - m_UserServices = new UserService(config); + m_UserService = new UserService(config); } } } diff --git a/OpenSim/Services/Interfaces/IUserServices.cs b/OpenSim/Services/Interfaces/IUserService.cs similarity index 60% rename from OpenSim/Services/Interfaces/IUserServices.cs rename to OpenSim/Services/Interfaces/IUserService.cs index 9eccc3cb60..0e8191f62c 100644 --- a/OpenSim/Services/Interfaces/IUserServices.cs +++ b/OpenSim/Services/Interfaces/IUserService.cs @@ -1,6 +1,6 @@ namespace OpenSim.Services.Interfaces { - public interface IUserServices + public interface IUserService { } } diff --git a/OpenSim/Services/UserService/UserService.cs b/OpenSim/Services/UserService/UserService.cs index 1e29fc9d1c..6948606b7f 100644 --- a/OpenSim/Services/UserService/UserService.cs +++ b/OpenSim/Services/UserService/UserService.cs @@ -25,17 +25,17 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System; +using System.Reflection; using Nini.Config; using OpenSim.Data; using OpenSim.Services.Interfaces; namespace OpenSim.Services.UserService { - public class UserService : IUserServices + public class UserService : UserServiceBase, IUserService { - private UserDataBase m_DataBase = null; - - public UserService(IConfigSource config) + public UserService(IConfigSource config) : base(config) { } } diff --git a/OpenSim/Services/UserService/UserServiceBase.cs b/OpenSim/Services/UserService/UserServiceBase.cs new file mode 100644 index 0000000000..6a20670d83 --- /dev/null +++ b/OpenSim/Services/UserService/UserServiceBase.cs @@ -0,0 +1,85 @@ +/* + * 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 OpenSim 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.Reflection; +using Nini.Config; +using OpenSim.Data; +using OpenSim.Services.Interfaces; + +namespace OpenSim.Services.UserService +{ + public class UserServiceBase + { + protected IUserDataPlugin m_Database = null; + + public UserServiceBase(IConfigSource config) + { + IConfig userConfig = config.Configs["UserService"]; + if (userConfig == null) + throw new Exception("No userService configuration"); + + string dllName = userConfig.GetString("StorageProvider", + String.Empty); + + if (dllName == String.Empty) + throw new Exception("No StorageProvider configured"); + + string connString = userConfig.GetString("ConnectionString", + String.Empty); + + try + { + Assembly pluginAssembly = Assembly.LoadFrom(dllName); + + foreach (Type pluginType in pluginAssembly.GetTypes()) + { + if (pluginType.IsPublic) + { + Type typeInterface = + pluginType.GetInterface("IUserDataPlugin", true); + if (typeInterface != null) + { + IUserDataPlugin plug = + (IUserDataPlugin)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); + plug.Initialise(connString); + + m_Database = plug; + } + } + } + + if (m_Database == null) + throw new Exception("Could not find a storage interface in the given module"); + } + catch (Exception e) + { + throw new Exception("Can't open database module: "+e.Message); + } + } + } +}