From 17e422bc673940ffe33b80c29378af65e66501ec Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 1 Jun 2007 23:48:52 +0000 Subject: * DB4o Storage provider is now well documented * Added try/catch over user creation (should allow multiple logins on Db4o) --- .../OpenGrid.Framework.Data.DB4o/DB4oGridData.cs | 77 +++++++++++++++ .../OpenGrid.Framework.Data.DB4o/DB4oManager.cs | 54 +++++++++++ .../OpenGrid.Framework.Data.DB4o/DB4oUserData.cs | 108 ++++++++++++++++++++- 3 files changed, 237 insertions(+), 2 deletions(-) (limited to 'OpenGridServices') diff --git a/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oGridData.cs b/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oGridData.cs index 546713e..723ff69 100644 --- a/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oGridData.cs +++ b/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oGridData.cs @@ -1,3 +1,30 @@ +/* +* Copyright (c) OpenSim project, http://sim.opensecondlife.org/ +* +* 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 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 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.Text; @@ -7,19 +34,41 @@ using libsecondlife; namespace OpenGrid.Framework.Data.DB4o { + /// + /// A grid server storage mechanism employing the DB4o database system + /// class DB4oGridData : IGridData { + /// + /// The database manager object + /// DB4oGridManager manager; + /// + /// Called when the plugin is first loaded (as constructors are not called) + /// public void Initialise() { manager = new DB4oGridManager("gridserver.yap"); } + /// + /// Returns a list of regions within the specified ranges + /// + /// minimum X coordinate + /// minimum Y coordinate + /// maximum X coordinate + /// maximum Y coordinate + /// An array of region profiles public SimProfileData[] GetProfilesInRange(uint a, uint b, uint c, uint d) { return null; } + /// + /// Returns a region located at the specified regionHandle (warning multiple regions may occupy the one spot, first found is returned) + /// + /// The handle to search for + /// A region profile public SimProfileData GetProfileByHandle(ulong handle) { lock (manager.simProfiles) { @@ -34,6 +83,11 @@ namespace OpenGrid.Framework.Data.DB4o throw new Exception("Unable to find profile with handle (" + handle.ToString() + ")"); } + /// + /// Returns a specific region + /// + /// The region ID code + /// A region profile public SimProfileData GetProfileByLLUUID(LLUUID uuid) { lock (manager.simProfiles) @@ -44,6 +98,11 @@ namespace OpenGrid.Framework.Data.DB4o throw new Exception("Unable to find profile with UUID (" + uuid.ToStringHyphenated() + ")"); } + /// + /// Adds a new specified region to the database + /// + /// The profile to add + /// A dataresponse enum indicating success public DataResponse AddProfile(SimProfileData profile) { lock (manager.simProfiles) @@ -59,22 +118,40 @@ namespace OpenGrid.Framework.Data.DB4o } } + /// + /// Authenticates a new region using the shared secrets. NOT SECURE. + /// + /// The UUID the region is authenticating with + /// The location the region is logging into (unused in Db4o) + /// The shared secret + /// Authenticated? public bool AuthenticateSim(LLUUID uuid, ulong handle, string key) { if (manager.simProfiles[uuid].regionRecvKey == key) return true; return false; } + /// + /// Shuts down the database + /// public void Close() { manager = null; } + /// + /// Returns the providers name + /// + /// The name of the storage system public string getName() { return "DB4o Grid Provider"; } + /// + /// Returns the providers version + /// + /// The version of the storage system public string getVersion() { return "0.1"; diff --git a/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oManager.cs b/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oManager.cs index b30f889..408b213 100644 --- a/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oManager.cs +++ b/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oManager.cs @@ -1,3 +1,29 @@ +/* +* Copyright (c) OpenSim project, http://sim.opensecondlife.org/ +* +* 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 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 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.Text; @@ -7,17 +33,31 @@ using libsecondlife; namespace OpenGrid.Framework.Data.DB4o { + /// + /// A Database manager for Db4o + /// class DB4oGridManager { + /// + /// A list of the current regions connected (in-memory cache) + /// public Dictionary simProfiles = new Dictionary(); + /// + /// Database File Name + /// string dbfl; + /// + /// Creates a new grid storage manager + /// + /// Filename to the database file public DB4oGridManager(string db4odb) { dbfl = db4odb; IObjectContainer database; database = Db4oFactory.OpenFile(dbfl); IObjectSet result = database.Get(typeof(SimProfileData)); + // Loads the file into the in-memory cache foreach(SimProfileData row in result) { simProfiles.Add(row.UUID, row); } @@ -57,16 +97,30 @@ namespace OpenGrid.Framework.Data.DB4o } + /// + /// A manager for the DB4o database (user profiles) + /// class DB4oUserManager { + /// + /// A list of the user profiles (in memory cache) + /// public Dictionary userProfiles = new Dictionary(); + /// + /// Database filename + /// string dbfl; + /// + /// Initialises a new DB manager + /// + /// The filename to the database public DB4oUserManager(string db4odb) { dbfl = db4odb; IObjectContainer database; database = Db4oFactory.OpenFile(dbfl); + // Load to cache IObjectSet result = database.Get(typeof(UserProfileData)); foreach (UserProfileData row in result) { diff --git a/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oUserData.cs b/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oUserData.cs index b95219c..db4deb8 100644 --- a/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oUserData.cs +++ b/OpenGridServices/OpenGrid.Framework.Data.DB4o/DB4oUserData.cs @@ -1,3 +1,29 @@ +/* +* Copyright (c) OpenSim project, http://sim.opensecondlife.org/ +* +* 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 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 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.Text; @@ -6,15 +32,29 @@ using libsecondlife; namespace OpenGrid.Framework.Data.DB4o { + /// + /// A User storage interface for the DB4o database system + /// public class DB4oUserData : IUserData { + /// + /// The database manager + /// DB4oUserManager manager; + /// + /// Artificial constructor called upon plugin load + /// public void Initialise() { manager = new DB4oUserManager("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)) @@ -22,11 +62,22 @@ namespace OpenGrid.Framework.Data.DB4o 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) @@ -37,6 +88,11 @@ namespace OpenGrid.Framework.Data.DB4o return null; } + /// + /// Returns a user by UUID direct + /// + /// The users account ID + /// A matching users profile public UserAgentData getAgentByUUID(LLUUID uuid) { try @@ -49,11 +105,22 @@ namespace OpenGrid.Framework.Data.DB4o } } + /// + /// 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 @@ -66,32 +133,69 @@ namespace OpenGrid.Framework.Data.DB4o } } + /// + /// Creates a new user profile + /// + /// The profile to add to the database public void addNewUserProfile(UserProfileData user) { - manager.AddRow(user); + try + { + manager.AddRow(user); + } + catch (Exception e) + { + Console.WriteLine(e.ToString()); + } } + /// + /// 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 + /// Recievers 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"; -- cgit v1.1