aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Data')
-rw-r--r--OpenSim/Data/IGridUserData.cs50
-rw-r--r--OpenSim/Data/MySQL/MySQLGenericTableHandler.cs3
-rw-r--r--OpenSim/Data/MySQL/MySQLGridUserData.cs64
-rw-r--r--OpenSim/Data/MySQL/MySQLPresenceData.cs4
-rw-r--r--OpenSim/Data/Null/NullPresenceData.cs56
5 files changed, 157 insertions, 20 deletions
diff --git a/OpenSim/Data/IGridUserData.cs b/OpenSim/Data/IGridUserData.cs
new file mode 100644
index 0000000..abd2cef
--- /dev/null
+++ b/OpenSim/Data/IGridUserData.cs
@@ -0,0 +1,50 @@
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.Generic;
30using OpenMetaverse;
31using OpenSim.Framework;
32
33namespace OpenSim.Data
34{
35 // This MUST be a ref type!
36 public class GridUserData
37 {
38 public string UserID;
39 public Dictionary<string, string> Data;
40 }
41
42 /// <summary>
43 /// An interface for connecting to the user grid datastore
44 /// </summary>
45 public interface IGridUserData
46 {
47 GridUserData GetGridUserData(string userID);
48 bool StoreGridUserData(GridUserData data);
49 }
50} \ No newline at end of file
diff --git a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
index b170dde..756b42d 100644
--- a/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
+++ b/OpenSim/Data/MySQL/MySQLGenericTableHandler.cs
@@ -197,8 +197,7 @@ namespace OpenSim.Data.MySQL
197 public virtual T[] Get(string where) 197 public virtual T[] Get(string where)
198 { 198 {
199 using (MySqlCommand cmd = new MySqlCommand()) 199 using (MySqlCommand cmd = new MySqlCommand())
200 { 200 {
201
202 string query = String.Format("select * from {0} where {1}", 201 string query = String.Format("select * from {0} where {1}",
203 m_Realm, where); 202 m_Realm, where);
204 203
diff --git a/OpenSim/Data/MySQL/MySQLGridUserData.cs b/OpenSim/Data/MySQL/MySQLGridUserData.cs
new file mode 100644
index 0000000..15834d2
--- /dev/null
+++ b/OpenSim/Data/MySQL/MySQLGridUserData.cs
@@ -0,0 +1,64 @@
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.Generic;
30using System.Data;
31using System.Reflection;
32using System.Threading;
33using log4net;
34using OpenMetaverse;
35using OpenSim.Framework;
36using MySql.Data.MySqlClient;
37
38namespace OpenSim.Data.MySQL
39{
40 /// <summary>
41 /// A MySQL Interface for user grid data
42 /// </summary>
43 public class MySQLGridUserData : MySQLGenericTableHandler<GridUserData>, IGridUserData
44 {
45// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
46
47 public MySQLGridUserData(string connectionString, string realm) : base(connectionString, realm, "UserGrid") {}
48
49 public GridUserData GetGridUserData(string userID)
50 {
51 GridUserData[] ret = Get("UserID", userID);
52
53 if (ret.Length == 0)
54 return null;
55
56 return ret[0];
57 }
58
59 public bool StoreGridUserData(GridUserData data)
60 {
61 return Store(data);
62 }
63 }
64} \ No newline at end of file
diff --git a/OpenSim/Data/MySQL/MySQLPresenceData.cs b/OpenSim/Data/MySQL/MySQLPresenceData.cs
index fcbe3d6..68a68af 100644
--- a/OpenSim/Data/MySQL/MySQLPresenceData.cs
+++ b/OpenSim/Data/MySQL/MySQLPresenceData.cs
@@ -122,7 +122,7 @@ namespace OpenSim.Data.MySQL
122 cmd.CommandText = String.Format("select * from {0} where UserID=?UserID", m_Realm); 122 cmd.CommandText = String.Format("select * from {0} where UserID=?UserID", m_Realm);
123 123
124 cmd.Parameters.AddWithValue("?UserID", userID); 124 cmd.Parameters.AddWithValue("?UserID", userID);
125; 125
126 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString)) 126 using (MySqlConnection dbcon = new MySqlConnection(m_connectionString))
127 { 127 {
128 dbcon.Open(); 128 dbcon.Open();
@@ -131,7 +131,6 @@ namespace OpenSim.Data.MySQL
131 131
132 using (IDataReader reader = cmd.ExecuteReader()) 132 using (IDataReader reader = cmd.ExecuteReader())
133 { 133 {
134
135 List<UUID> deleteSessions = new List<UUID>(); 134 List<UUID> deleteSessions = new List<UUID>();
136 int online = 0; 135 int online = 0;
137 136
@@ -143,6 +142,7 @@ namespace OpenSim.Data.MySQL
143 deleteSessions.Add(new UUID(reader["SessionID"].ToString())); 142 deleteSessions.Add(new UUID(reader["SessionID"].ToString()));
144 } 143 }
145 144
145 // Leave one session behind so that we can pick up details such as home location
146 if (online == 0 && deleteSessions.Count > 0) 146 if (online == 0 && deleteSessions.Count > 0)
147 deleteSessions.RemoveAt(0); 147 deleteSessions.RemoveAt(0);
148 148
diff --git a/OpenSim/Data/Null/NullPresenceData.cs b/OpenSim/Data/Null/NullPresenceData.cs
index 5f78691..9fc4595 100644
--- a/OpenSim/Data/Null/NullPresenceData.cs
+++ b/OpenSim/Data/Null/NullPresenceData.cs
@@ -28,6 +28,8 @@
28using System; 28using System;
29using System.Collections; 29using System.Collections;
30using System.Collections.Generic; 30using System.Collections.Generic;
31using System.Reflection;
32using log4net;
31using OpenMetaverse; 33using OpenMetaverse;
32using OpenSim.Framework; 34using OpenSim.Framework;
33using OpenSim.Data; 35using OpenSim.Data;
@@ -36,6 +38,8 @@ namespace OpenSim.Data.Null
36{ 38{
37 public class NullPresenceData : IPresenceData 39 public class NullPresenceData : IPresenceData
38 { 40 {
41// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
42
39 private static NullPresenceData Instance; 43 private static NullPresenceData Instance;
40 44
41 Dictionary<UUID, PresenceData> m_presenceData = new Dictionary<UUID, PresenceData>(); 45 Dictionary<UUID, PresenceData> m_presenceData = new Dictionary<UUID, PresenceData>();
@@ -47,21 +51,17 @@ namespace OpenSim.Data.Null
47 Instance = this; 51 Instance = this;
48 52
49 //Console.WriteLine("[XXX] NullRegionData constructor"); 53 //Console.WriteLine("[XXX] NullRegionData constructor");
50 // Let's stick in a test presence
51 PresenceData p = new PresenceData();
52 p.SessionID = UUID.Zero;
53 p.UserID = UUID.Zero.ToString();
54 p.Data = new Dictionary<string, string>();
55 p.Data["Online"] = true.ToString();
56 m_presenceData.Add(UUID.Zero, p);
57 } 54 }
58 } 55 }
59 56
60 public bool Store(PresenceData data) 57 public bool Store(PresenceData data)
61 { 58 {
62 if (Instance != this) 59 if (Instance != this)
63 return Instance.Store(data); 60 return Instance.Store(data);
64 61
62// m_log.DebugFormat("[NULL PRESENCE DATA]: Storing presence {0}", data.UserID);
63// Console.WriteLine("HOME for " + data.UserID + " is " + (data.Data.ContainsKey("HomeRegionID") ? data.Data["HomeRegionID"] : "Not found"));
64
65 m_presenceData[data.SessionID] = data; 65 m_presenceData[data.SessionID] = data;
66 return true; 66 return true;
67 } 67 }
@@ -100,6 +100,7 @@ namespace OpenSim.Data.Null
100 { 100 {
101 if (Instance != this) 101 if (Instance != this)
102 return Instance.ReportAgent(sessionID, regionID, position, lookAt); 102 return Instance.ReportAgent(sessionID, regionID, position, lookAt);
103
103 if (m_presenceData.ContainsKey(sessionID)) 104 if (m_presenceData.ContainsKey(sessionID))
104 { 105 {
105 m_presenceData[sessionID].RegionID = regionID; 106 m_presenceData[sessionID].RegionID = regionID;
@@ -112,7 +113,7 @@ namespace OpenSim.Data.Null
112 } 113 }
113 114
114 public bool SetHomeLocation(string userID, UUID regionID, Vector3 position, Vector3 lookAt) 115 public bool SetHomeLocation(string userID, UUID regionID, Vector3 position, Vector3 lookAt)
115 { 116 {
116 if (Instance != this) 117 if (Instance != this)
117 return Instance.SetHomeLocation(userID, regionID, position, lookAt); 118 return Instance.SetHomeLocation(userID, regionID, position, lookAt);
118 119
@@ -121,27 +122,40 @@ namespace OpenSim.Data.Null
121 { 122 {
122 if (p.UserID == userID) 123 if (p.UserID == userID)
123 { 124 {
125// m_log.DebugFormat(
126// "[NULL PRESENCE DATA]: Setting home location {0} {1} {2} for {3}",
127// regionID, position, lookAt, p.UserID);
128
124 p.Data["HomeRegionID"] = regionID.ToString(); 129 p.Data["HomeRegionID"] = regionID.ToString();
125 p.Data["HomePosition"] = position.ToString(); 130 p.Data["HomePosition"] = position.ToString();
126 p.Data["HomeLookAt"] = lookAt.ToString(); 131 p.Data["HomeLookAt"] = lookAt.ToString();
127 foundone = true; 132 foundone = true;
128 } 133 }
129 } 134 }
130 135
131 return foundone; 136 return foundone;
132 } 137 }
133 138
134 public PresenceData[] Get(string field, string data) 139 public PresenceData[] Get(string field, string data)
135 { 140 {
136 if (Instance != this) 141 if (Instance != this)
137 return Instance.Get(field, data); 142 return Instance.Get(field, data);
138 143
144// m_log.DebugFormat(
145// "[NULL PRESENCE DATA]: Getting presence data for field {0} with parameter {1}", field, data);
146
139 List<PresenceData> presences = new List<PresenceData>(); 147 List<PresenceData> presences = new List<PresenceData>();
140 if (field == "UserID") 148 if (field == "UserID")
141 { 149 {
142 foreach (PresenceData p in m_presenceData.Values) 150 foreach (PresenceData p in m_presenceData.Values)
143 if (p.UserID == data) 151 {
144 presences.Add(p); 152 if (p.UserID == data)
153 {
154 presences.Add(p);
155// Console.WriteLine("HOME for " + p.UserID + " is " + (p.Data.ContainsKey("HomeRegionID") ? p.Data["HomeRegionID"] : "Not found"));
156 }
157 }
158
145 return presences.ToArray(); 159 return presences.ToArray();
146 } 160 }
147 else if (field == "SessionID") 161 else if (field == "SessionID")
@@ -180,36 +194,46 @@ namespace OpenSim.Data.Null
180 } 194 }
181 195
182 public void Prune(string userID) 196 public void Prune(string userID)
183 { 197 {
184 if (Instance != this) 198 if (Instance != this)
185 { 199 {
186 Instance.Prune(userID); 200 Instance.Prune(userID);
187 return; 201 return;
188 } 202 }
189 203
204// m_log.DebugFormat("[NULL PRESENCE DATA]: Prune called for {0}", userID);
205
190 List<UUID> deleteSessions = new List<UUID>(); 206 List<UUID> deleteSessions = new List<UUID>();
191 int online = 0; 207 int online = 0;
192 208
193 foreach (KeyValuePair<UUID, PresenceData> kvp in m_presenceData) 209 foreach (KeyValuePair<UUID, PresenceData> kvp in m_presenceData)
194 { 210 {
211// m_log.DebugFormat("Online: {0}", kvp.Value.Data["Online"]);
212
195 bool on = false; 213 bool on = false;
196 if (bool.TryParse(kvp.Value.Data["Online"], out on) && on) 214 if (bool.TryParse(kvp.Value.Data["Online"], out on) && on)
197 online++; 215 online++;
198 else 216 else
199 deleteSessions.Add(kvp.Key); 217 deleteSessions.Add(kvp.Key);
200 } 218 }
219
220// m_log.DebugFormat("[NULL PRESENCE DATA]: online [{0}], deleteSession.Count [{1}]", online, deleteSessions.Count);
221
222 // Leave one session behind so that we can pick up details such as home location
201 if (online == 0 && deleteSessions.Count > 0) 223 if (online == 0 && deleteSessions.Count > 0)
202 deleteSessions.RemoveAt(0); 224 deleteSessions.RemoveAt(0);
203 225
204 foreach (UUID s in deleteSessions) 226 foreach (UUID s in deleteSessions)
205 m_presenceData.Remove(s); 227 m_presenceData.Remove(s);
206
207 } 228 }
208 229
209 public bool Delete(string field, string data) 230 public bool Delete(string field, string data)
210 { 231 {
232// m_log.DebugFormat(
233// "[NULL PRESENCE DATA]: Deleting presence data for field {0} with parameter {1}", field, data);
234
211 if (Instance != this) 235 if (Instance != this)
212 return Delete(field, data); 236 return Instance.Delete(field, data);
213 237
214 List<UUID> presences = new List<UUID>(); 238 List<UUID> presences = new List<UUID>();
215 if (field == "UserID") 239 if (field == "UserID")