From c52c68f314c67c76c7181a6d0828f476290fbd66 Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Wed, 2 Apr 2008 15:24:31 +0000
Subject: whole lot more moving
---
OpenSim/Data/DB4o/DB4oManager.cs | 170 +++++++++++++++++++++++++++++++++++++++
1 file changed, 170 insertions(+)
create mode 100644 OpenSim/Data/DB4o/DB4oManager.cs
(limited to 'OpenSim/Data/DB4o/DB4oManager.cs')
diff --git a/OpenSim/Data/DB4o/DB4oManager.cs b/OpenSim/Data/DB4o/DB4oManager.cs
new file mode 100644
index 0000000..9cacb5e
--- /dev/null
+++ b/OpenSim/Data/DB4o/DB4oManager.cs
@@ -0,0 +1,170 @@
+/*
+ * 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 Db4objects.Db4o;
+using libsecondlife;
+
+namespace OpenSim.Framework.Data.DB4o
+{
+ ///
+ /// A Database manager for Db4o
+ ///
+ internal class DB4oGridManager
+ {
+ ///
+ /// A list of the current regions connected (in-memory cache)
+ ///
+ public Dictionary simProfiles = new Dictionary();
+
+ ///
+ /// Database File Name
+ ///
+ private 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 (RegionProfileData));
+ // Loads the file into the in-memory cache
+ foreach (RegionProfileData row in result)
+ {
+ simProfiles.Add(row.UUID, row);
+ }
+ database.Close();
+ }
+
+ ///
+ /// Adds a new profile to the database (Warning: Probably slow.)
+ ///
+ /// The profile to add
+ /// Successful?
+ public bool AddRow(RegionProfileData row)
+ {
+ if (simProfiles.ContainsKey(row.UUID))
+ {
+ simProfiles[row.UUID] = row;
+ }
+ else
+ {
+ simProfiles.Add(row.UUID, row);
+ }
+
+ try
+ {
+ IObjectContainer database;
+ database = Db4oFactory.OpenFile(dbfl);
+ database.Set(row);
+ database.Close();
+ return true;
+ }
+ catch (Exception)
+ {
+ return false;
+ }
+ }
+ }
+
+ ///
+ /// A manager for the DB4o database (user profiles)
+ ///
+ internal class DB4oUserManager
+ {
+ ///
+ /// A list of the user profiles (in memory cache)
+ ///
+ public Dictionary userProfiles = new Dictionary();
+
+ ///
+ /// Database filename
+ ///
+ private 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)
+ {
+ if (userProfiles.ContainsKey(row.UUID))
+ userProfiles[row.UUID] = row;
+ else
+ userProfiles.Add(row.UUID, row);
+ }
+ database.Close();
+ }
+
+ ///
+ /// Adds or updates a record to the user database. Do this when changes are needed
+ /// in the user profile that need to be persistant.
+ ///
+ /// TODO: the logic here is not ACID, the local cache will be
+ /// updated even if the persistant data is not. This may lead
+ /// to unexpected results.
+ ///
+ /// The profile to update
+ /// true on success, false on fail to persist to db
+ public bool UpdateRecord(UserProfileData record)
+ {
+ if (userProfiles.ContainsKey(record.UUID))
+ {
+ userProfiles[record.UUID] = record;
+ }
+ else
+ {
+ userProfiles.Add(record.UUID, record);
+ }
+
+ try
+ {
+ IObjectContainer database;
+ database = Db4oFactory.OpenFile(dbfl);
+ database.Set(record);
+ database.Close();
+ return true;
+ }
+ catch (Exception)
+ {
+ return false;
+ }
+ }
+ }
+}
--
cgit v1.1