From 8b9f8be512ac47a52e5b7df1a5f3d150c92eda39 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Tue, 5 May 2009 05:35:22 +0000 Subject: Some refactoring. Database is now active in the new user server --- OpenSim/Services/UserService/UserService.cs | 8 +-- OpenSim/Services/UserService/UserServiceBase.cs | 85 +++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 OpenSim/Services/UserService/UserServiceBase.cs (limited to 'OpenSim/Services/UserService') diff --git a/OpenSim/Services/UserService/UserService.cs b/OpenSim/Services/UserService/UserService.cs index 1e29fc9..6948606 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 0000000..6a20670 --- /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); + } + } + } +} -- cgit v1.1