aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/Null
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Data/Null')
-rw-r--r--OpenSim/Data/Null/NullPresenceData.cs257
-rw-r--r--OpenSim/Data/Null/NullRegionData.cs61
2 files changed, 318 insertions, 0 deletions
diff --git a/OpenSim/Data/Null/NullPresenceData.cs b/OpenSim/Data/Null/NullPresenceData.cs
new file mode 100644
index 0000000..40700cf
--- /dev/null
+++ b/OpenSim/Data/Null/NullPresenceData.cs
@@ -0,0 +1,257 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28using System;
29using System.Collections;
30using System.Collections.Generic;
31using OpenMetaverse;
32using OpenSim.Framework;
33using OpenSim.Data;
34
35namespace OpenSim.Data.Null
36{
37 public class NullPresenceData : IPresenceData
38 {
39 private static NullPresenceData Instance;
40
41 Dictionary<UUID, PresenceData> m_presenceData = new Dictionary<UUID, PresenceData>();
42
43 public NullPresenceData(string connectionString, string realm)
44 {
45 if (Instance == null)
46 Instance = this;
47
48 //Console.WriteLine("[XXX] NullRegionData constructor");
49 // Let's stick in a test presence
50 PresenceData p = new PresenceData();
51 p.SessionID = UUID.Zero;
52 p.UserID = UUID.Zero.ToString();
53 p.Data = new Dictionary<string, string>();
54 p.Data["Online"] = "true";
55 m_presenceData.Add(UUID.Zero, p);
56 }
57
58 public bool Store(PresenceData data)
59 {
60 if (Instance != this)
61 return Instance.Store(data);
62
63 m_presenceData[data.SessionID] = data;
64 return true;
65 }
66
67 public PresenceData Get(UUID sessionID)
68 {
69 if (Instance != this)
70 return Instance.Get(sessionID);
71
72 if (m_presenceData.ContainsKey(sessionID))
73 return m_presenceData[sessionID];
74
75 return null;
76 }
77
78 public void LogoutRegionAgents(UUID regionID)
79 {
80 if (Instance != this)
81 {
82 Instance.LogoutRegionAgents(regionID);
83 return;
84 }
85
86 List<UUID> toBeDeleted = new List<UUID>();
87 foreach (KeyValuePair<UUID, PresenceData> kvp in m_presenceData)
88 if (kvp.Value.RegionID == regionID)
89 toBeDeleted.Add(kvp.Key);
90
91 foreach (UUID u in toBeDeleted)
92 m_presenceData.Remove(u);
93 }
94
95 public bool ReportAgent(UUID sessionID, UUID regionID, string position, string lookAt)
96 {
97 if (Instance != this)
98 return Instance.ReportAgent(sessionID, regionID, position, lookAt);
99 if (m_presenceData.ContainsKey(sessionID))
100 {
101 m_presenceData[sessionID].RegionID = regionID;
102 m_presenceData[sessionID].Data["Position"] = position;
103 m_presenceData[sessionID].Data["LookAt"] = lookAt;
104 return true;
105 }
106
107 return false;
108 }
109
110 public bool SetHomeLocation(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
111 {
112 if (Instance != this)
113 return Instance.SetHomeLocation(userID, regionID, position, lookAt);
114
115 bool foundone = false;
116 foreach (PresenceData p in m_presenceData.Values)
117 {
118 if (p.UserID == userID)
119 {
120 p.Data["HomeRegionID"] = regionID.ToString();
121 p.Data["HomePosition"] = position.ToString();
122 p.Data["HomeLookAt"] = lookAt.ToString();
123 foundone = true;
124 }
125 }
126
127 return foundone;
128 }
129
130 public PresenceData[] Get(string field, string data)
131 {
132 if (Instance != this)
133 return Instance.Get(field, data);
134
135 List<PresenceData> presences = new List<PresenceData>();
136 if (field == "UserID")
137 {
138 foreach (PresenceData p in m_presenceData.Values)
139 if (p.UserID == data)
140 presences.Add(p);
141 return presences.ToArray();
142 }
143 else if (field == "SessionID")
144 {
145 UUID session = UUID.Zero;
146 if (!UUID.TryParse(data, out session))
147 return presences.ToArray();
148
149 if (m_presenceData.ContainsKey(session))
150 {
151 presences.Add(m_presenceData[session]);
152 return presences.ToArray();
153 }
154 }
155 else if (field == "RegionID")
156 {
157 UUID region = UUID.Zero;
158 if (!UUID.TryParse(data, out region))
159 return presences.ToArray();
160 foreach (PresenceData p in m_presenceData.Values)
161 if (p.RegionID == region)
162 presences.Add(p);
163 return presences.ToArray();
164 }
165 else
166 {
167 foreach (PresenceData p in m_presenceData.Values)
168 {
169 if (p.Data.ContainsKey(field) && p.Data[field] == data)
170 presences.Add(p);
171 }
172 return presences.ToArray();
173 }
174
175 return presences.ToArray();
176 }
177
178 public void Prune(string userID)
179 {
180 if (Instance != this)
181 {
182 Instance.Prune(userID);
183 return;
184 }
185
186 List<UUID> deleteSessions = new List<UUID>();
187 int online = 0;
188
189 foreach (KeyValuePair<UUID, PresenceData> kvp in m_presenceData)
190 {
191 bool on = false;
192 if (bool.TryParse(kvp.Value.Data["Online"], out on) && on)
193 online++;
194 else
195 deleteSessions.Add(kvp.Key);
196 }
197 if (online == 0 && deleteSessions.Count > 0)
198 deleteSessions.RemoveAt(0);
199
200 foreach (UUID s in deleteSessions)
201 m_presenceData.Remove(s);
202
203 }
204
205 public bool Delete(string field, string data)
206 {
207 if (Instance != this)
208 return Delete(field, data);
209
210 List<UUID> presences = new List<UUID>();
211 if (field == "UserID")
212 {
213 foreach (KeyValuePair<UUID, PresenceData> p in m_presenceData)
214 if (p.Value.UserID == data)
215 presences.Add(p.Key);
216 }
217 else if (field == "SessionID")
218 {
219 UUID session = UUID.Zero;
220 if (UUID.TryParse(data, out session))
221 {
222 if (m_presenceData.ContainsKey(session))
223 {
224 presences.Add(session);
225 }
226 }
227 }
228 else if (field == "RegionID")
229 {
230 UUID region = UUID.Zero;
231 if (UUID.TryParse(data, out region))
232 {
233 foreach (KeyValuePair<UUID, PresenceData> p in m_presenceData)
234 if (p.Value.RegionID == region)
235 presences.Add(p.Key);
236 }
237 }
238 else
239 {
240 foreach (KeyValuePair<UUID, PresenceData> p in m_presenceData)
241 {
242 if (p.Value.Data.ContainsKey(field) && p.Value.Data[field] == data)
243 presences.Add(p.Key);
244 }
245 }
246
247 foreach (UUID u in presences)
248 m_presenceData.Remove(u);
249
250 if (presences.Count == 0)
251 return false;
252
253 return true;
254 }
255
256 }
257}
diff --git a/OpenSim/Data/Null/NullRegionData.cs b/OpenSim/Data/Null/NullRegionData.cs
index e8263ea..5b9898c 100644
--- a/OpenSim/Data/Null/NullRegionData.cs
+++ b/OpenSim/Data/Null/NullRegionData.cs
@@ -31,20 +31,31 @@ using System.Collections.Generic;
31using OpenMetaverse; 31using OpenMetaverse;
32using OpenSim.Framework; 32using OpenSim.Framework;
33using OpenSim.Data; 33using OpenSim.Data;
34using System.Reflection;
35using log4net;
34 36
35namespace OpenSim.Data.Null 37namespace OpenSim.Data.Null
36{ 38{
37 public class NullRegionData : IRegionData 39 public class NullRegionData : IRegionData
38 { 40 {
41 private static NullRegionData Instance = null;
42
43 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
44
39 Dictionary<UUID, RegionData> m_regionData = new Dictionary<UUID, RegionData>(); 45 Dictionary<UUID, RegionData> m_regionData = new Dictionary<UUID, RegionData>();
40 46
41 public NullRegionData(string connectionString, string realm) 47 public NullRegionData(string connectionString, string realm)
42 { 48 {
49 if (Instance == null)
50 Instance = this;
43 //Console.WriteLine("[XXX] NullRegionData constructor"); 51 //Console.WriteLine("[XXX] NullRegionData constructor");
44 } 52 }
45 53
46 public List<RegionData> Get(string regionName, UUID scopeID) 54 public List<RegionData> Get(string regionName, UUID scopeID)
47 { 55 {
56 if (Instance != this)
57 return Instance.Get(regionName, scopeID);
58
48 List<RegionData> ret = new List<RegionData>(); 59 List<RegionData> ret = new List<RegionData>();
49 60
50 foreach (RegionData r in m_regionData.Values) 61 foreach (RegionData r in m_regionData.Values)
@@ -69,6 +80,9 @@ namespace OpenSim.Data.Null
69 80
70 public RegionData Get(int posX, int posY, UUID scopeID) 81 public RegionData Get(int posX, int posY, UUID scopeID)
71 { 82 {
83 if (Instance != this)
84 return Instance.Get(posX, posY, scopeID);
85
72 List<RegionData> ret = new List<RegionData>(); 86 List<RegionData> ret = new List<RegionData>();
73 87
74 foreach (RegionData r in m_regionData.Values) 88 foreach (RegionData r in m_regionData.Values)
@@ -85,6 +99,9 @@ namespace OpenSim.Data.Null
85 99
86 public RegionData Get(UUID regionID, UUID scopeID) 100 public RegionData Get(UUID regionID, UUID scopeID)
87 { 101 {
102 if (Instance != this)
103 return Instance.Get(regionID, scopeID);
104
88 if (m_regionData.ContainsKey(regionID)) 105 if (m_regionData.ContainsKey(regionID))
89 return m_regionData[regionID]; 106 return m_regionData[regionID];
90 107
@@ -93,6 +110,9 @@ namespace OpenSim.Data.Null
93 110
94 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID) 111 public List<RegionData> Get(int startX, int startY, int endX, int endY, UUID scopeID)
95 { 112 {
113 if (Instance != this)
114 return Instance.Get(startX, startY, endX, endY, scopeID);
115
96 List<RegionData> ret = new List<RegionData>(); 116 List<RegionData> ret = new List<RegionData>();
97 117
98 foreach (RegionData r in m_regionData.Values) 118 foreach (RegionData r in m_regionData.Values)
@@ -106,6 +126,9 @@ namespace OpenSim.Data.Null
106 126
107 public bool Store(RegionData data) 127 public bool Store(RegionData data)
108 { 128 {
129 if (Instance != this)
130 return Instance.Store(data);
131
109 m_regionData[data.RegionID] = data; 132 m_regionData[data.RegionID] = data;
110 133
111 return true; 134 return true;
@@ -113,6 +136,9 @@ namespace OpenSim.Data.Null
113 136
114 public bool SetDataItem(UUID regionID, string item, string value) 137 public bool SetDataItem(UUID regionID, string item, string value)
115 { 138 {
139 if (Instance != this)
140 return Instance.SetDataItem(regionID, item, value);
141
116 if (!m_regionData.ContainsKey(regionID)) 142 if (!m_regionData.ContainsKey(regionID))
117 return false; 143 return false;
118 144
@@ -123,6 +149,9 @@ namespace OpenSim.Data.Null
123 149
124 public bool Delete(UUID regionID) 150 public bool Delete(UUID regionID)
125 { 151 {
152 if (Instance != this)
153 return Instance.Delete(regionID);
154
126 if (!m_regionData.ContainsKey(regionID)) 155 if (!m_regionData.ContainsKey(regionID))
127 return false; 156 return false;
128 157
@@ -130,5 +159,37 @@ namespace OpenSim.Data.Null
130 159
131 return true; 160 return true;
132 } 161 }
162
163 public List<RegionData> GetDefaultRegions(UUID scopeID)
164 {
165 if (Instance != this)
166 return Instance.GetDefaultRegions(scopeID);
167
168 List<RegionData> ret = new List<RegionData>();
169
170 foreach (RegionData r in m_regionData.Values)
171 {
172 if ((Convert.ToInt32(r.Data["flags"]) & 1) != 0)
173 ret.Add(r);
174 }
175
176 return ret;
177 }
178
179 public List<RegionData> GetFallbackRegions(UUID scopeID, int x, int y)
180 {
181 if (Instance != this)
182 return Instance.GetFallbackRegions(scopeID, x, y);
183
184 List<RegionData> ret = new List<RegionData>();
185
186 foreach (RegionData r in m_regionData.Values)
187 {
188 if ((Convert.ToInt32(r.Data["flags"]) & 2) != 0)
189 ret.Add(r);
190 }
191
192 return ret;
193 }
133 } 194 }
134} 195}