/* * 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.Collections.Generic; using System.IO; using libsecondlife; using OpenSim.Framework; namespace OpenSim.Data.DB4o { /// /// A User storage interface for the DB4o database system /// public class DB4oUserData : IUserData { //private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); /// /// The database manager /// private DB4oUserManager manager; /// /// Artificial constructor called upon plugin load /// public void Initialise() { manager = new DB4oUserManager(Path.Combine(Util.dataDir(), "userprofiles.yap")); } /// /// Loads a specified user profile from a UUID /// /// The users UUID /// A user profile public UserProfileData GetUserByUUID(LLUUID uuid) { if (manager.userProfiles.ContainsKey(uuid)) return manager.userProfiles[uuid]; return null; } /// /// Returns a user by searching for its name /// /// The users account name /// A matching users profile public UserProfileData GetUserByName(string name) { return GetUserByName(name.Split(' ')[0], name.Split(' ')[1]); } /// /// Returns a user by searching for its name /// /// The first part of the users account name /// The second part of the users account name /// A matching users profile public UserProfileData GetUserByName(string fname, string lname) { foreach (UserProfileData profile in manager.userProfiles.Values) { if (profile.FirstName == fname && profile.SurName == lname) return profile; } return null; } /// /// Returns a user by UUID direct /// /// The users account ID /// A matching users profile public UserAgentData GetAgentByUUID(LLUUID uuid) { try { return GetUserByUUID(uuid).CurrentAgent; } catch (Exception) { return null; } } /// /// Returns a session by account name /// /// The account name /// The users session agent public UserAgentData GetAgentByName(string name) { return GetAgentByName(name.Split(' ')[0], name.Split(' ')[1]); } /// /// Returns a session by account name /// /// The first part of the users account name /// The second part of the users account name /// A user agent public UserAgentData GetAgentByName(string fname, string lname) { try { return GetUserByName(fname, lname).CurrentAgent; } catch (Exception) { return null; } } public void StoreWebLoginKey(LLUUID AgentID, LLUUID WebLoginKey) { UserProfileData user = GetUserByUUID(AgentID); user.WebLoginKey = WebLoginKey; UpdateUserProfile(user); } #region User Friends List Data public void AddNewUserFriend(LLUUID friendlistowner, LLUUID friend, uint perms) { //m_log.Info("[FRIEND]: Stub AddNewUserFriend called"); } public void RemoveUserFriend(LLUUID friendlistowner, LLUUID friend) { //m_log.Info("[FRIEND]: Stub RemoveUserFriend called"); } public void UpdateUserFriendPerms(LLUUID friendlistowner, LLUUID friend, uint perms) { //m_log.Info("[FRIEND]: Stub UpdateUserFriendPerms called"); } public List GetUserFriendList(LLUUID friendlistowner) { //m_log.Info("[FRIEND]: Stub GetUserFriendList called"); return new List(); } #endregion public void UpdateUserCurrentRegion(LLUUID avatarid, LLUUID regionuuid) { //m_log.Info("[USER]: Stub UpdateUserCUrrentRegion called"); } public List GeneratePickerResults(LLUUID queryID, string query) { //Do nothing yet List returnlist = new List(); return returnlist; } /// /// Creates a new user profile /// /// The profile to add to the database public void AddNewUserProfile(UserProfileData user) { try { manager.UpdateRecord(user); } catch (Exception e) { Console.WriteLine(e.ToString()); } } /// /// Creates a new user profile /// /// The profile to add to the database /// True on success, false on error public bool UpdateUserProfile(UserProfileData user) { try { return manager.UpdateRecord(user); } catch (Exception e) { Console.WriteLine(e.ToString()); return false; } } /// /// Creates a new user agent /// /// The agent to add to the database public void AddNewUserAgent(UserAgentData agent) { // Do nothing. yet. } /// /// Transfers money between two user accounts /// /// Starting account /// End account /// The amount to move /// Success? public bool MoneyTransferRequest(LLUUID from, LLUUID to, uint amount) { return true; } /// /// Transfers inventory between two accounts /// /// Move to inventory server /// Senders account /// Receivers account /// Inventory item /// Success? public bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID item) { return true; } /// /// Returns the name of the storage provider /// /// Storage provider name public string getName() { return "DB4o Userdata"; } /// /// Returns the version of the storage provider /// /// Storage provider version public string GetVersion() { return "0.1"; } } }