aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs')
-rw-r--r--src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs119
1 files changed, 119 insertions, 0 deletions
diff --git a/src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs b/src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs
new file mode 100644
index 0000000..9dc81a1
--- /dev/null
+++ b/src/LocalStorage/Db4LocalStorage/Db4LocalStorage.cs
@@ -0,0 +1,119 @@
1/*
2* Copyright (c) OpenSim project, http://sim.opensecondlife.org/
3*
4* Redistribution and use in source and binary forms, with or without
5* modification, are permitted provided that the following conditions are met:
6* * Redistributions of source code must retain the above copyright
7* notice, this list of conditions and the following disclaimer.
8* * Redistributions in binary form must reproduce the above copyright
9* notice, this list of conditions and the following disclaimer in the
10* documentation and/or other materials provided with the distribution.
11* * Neither the name of the <organization> nor the
12* names of its contributors may be used to endorse or promote products
13* derived from this software without specific prior written permission.
14*
15* THIS SOFTWARE IS PROVIDED BY <copyright holder> ``AS IS'' AND ANY
16* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18* DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
19* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25*
26*/
27using System;
28using System.Collections.Generic;
29using Db4objects.Db4o;
30using Db4objects.Db4o.Query;
31using libsecondlife;
32using GridInterfaces;
33
34namespace Db4LocalStorage
35{
36 /// <summary>
37 ///
38 /// </summary>
39 public class Db4LocalStorage : ILocalStorage
40 {
41 private IObjectContainer db;
42
43 public Db4LocalStorage()
44 {
45 try
46 {
47 db = Db4oFactory.OpenFile("localworld.yap");
48 ServerConsole.MainConsole.Instance.WriteLine("Db4LocalStorage creation");
49 }
50 catch(Exception e)
51 {
52 db.Close();
53 ServerConsole.MainConsole.Instance.WriteLine("Db4LocalStorage :Constructor - Exception occured");
54 ServerConsole.MainConsole.Instance.WriteLine(e.ToString());
55 }
56 }
57
58 public void StorePrim(PrimStorage prim)
59 {
60 IObjectSet result = db.Query(new UUIDQuery(prim.FullID));
61 if(result.Count>0)
62 {
63 //prim already in storage
64 //so update it
65 PrimStorage found = (PrimStorage) result.Next();
66 found.Data = prim.Data;
67 found.Position = prim.Position;
68 found.Rotation = prim.Rotation;
69 db.Set(found);
70 }
71 else
72 {
73 //not in storage
74 db.Set(prim);
75 }
76 }
77
78 public void RemovePrim(LLUUID primID)
79 {
80 IObjectSet result = db.Query(new UUIDQuery(primID));
81 if(result.Count>0)
82 {
83 PrimStorage found = (PrimStorage) result.Next();
84 db.Delete(found);
85 }
86 }
87
88
89 public void LoadPrimitives(ILocalStorageReceiver receiver)
90 {
91 IObjectSet result = db.Get(typeof(PrimStorage));
92 ServerConsole.MainConsole.Instance.WriteLine("Db4LocalStorage.cs: LoadPrimitives() - number of prims in storages is "+result.Count);
93 foreach (PrimStorage prim in result) {
94 receiver.PrimFromStorage(prim);
95 }
96 }
97
98 public void ShutDown()
99 {
100 db.Commit();
101 db.Close();
102 }
103 }
104
105 public class UUIDQuery : Predicate
106 {
107 private LLUUID _findID;
108
109 public UUIDQuery(LLUUID find)
110 {
111 _findID = find;
112 }
113 public bool Match(PrimStorage prim)
114 {
115 return (prim.FullID == _findID);
116 }
117 }
118
119}