From 1d2a332b96794e2011b0527cf590c3ceedcd8af4 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Wed, 30 Dec 2009 14:17:18 -0800 Subject: Unit tests for presence. They helped fix a couple of wrongnesses. --- OpenSim/Data/Null/NullPresenceData.cs | 223 ++++++++++++++++++++++++++++++++++ 1 file changed, 223 insertions(+) create mode 100644 OpenSim/Data/Null/NullPresenceData.cs (limited to 'OpenSim/Data/Null') diff --git a/OpenSim/Data/Null/NullPresenceData.cs b/OpenSim/Data/Null/NullPresenceData.cs new file mode 100644 index 0000000..52fdc6f --- /dev/null +++ b/OpenSim/Data/Null/NullPresenceData.cs @@ -0,0 +1,223 @@ +/* + * 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 OpenSimulator 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; +using System.Collections.Generic; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Data; + +namespace OpenSim.Data.Null +{ + public class NullPresenceData : IPresenceData + { + Dictionary m_presenceData = new Dictionary(); + + public NullPresenceData(string connectionString, string realm) + { + //Console.WriteLine("[XXX] NullRegionData constructor"); + // Let's stick in a test presence + PresenceData p = new PresenceData(); + p.SessionID = UUID.Zero; + p.UserID = UUID.Zero.ToString(); + p.Data = new Dictionary(); + p.Data["Online"] = "true"; + m_presenceData.Add(UUID.Zero, p); + } + + public bool Store(PresenceData data) + { + m_presenceData[data.SessionID] = data; + return true; + } + + public PresenceData Get(UUID sessionID) + { + if (m_presenceData.ContainsKey(sessionID)) + return m_presenceData[sessionID]; + + return null; + } + + public void LogoutRegionAgents(UUID regionID) + { + List toBeDeleted = new List(); + foreach (KeyValuePair kvp in m_presenceData) + if (kvp.Value.RegionID == regionID) + toBeDeleted.Add(kvp.Key); + + foreach (UUID u in toBeDeleted) + m_presenceData.Remove(u); + } + + public bool ReportAgent(UUID sessionID, UUID regionID, string position, string lookAt) + { + if (m_presenceData.ContainsKey(sessionID)) + { + m_presenceData[sessionID].RegionID = regionID; + m_presenceData[sessionID].Data["Position"] = position; + m_presenceData[sessionID].Data["LookAt"] = lookAt; + return true; + } + + return false; + } + + public bool SetHomeLocation(string userID, UUID regionID, Vector3 position, Vector3 lookAt) + { + bool foundone = false; + foreach (PresenceData p in m_presenceData.Values) + { + if (p.UserID == userID) + { + p.Data["HomeRegionID"] = regionID.ToString(); + p.Data["HomePosition"] = position.ToString(); + p.Data["HomeLookAt"] = lookAt.ToString(); + foundone = true; + } + } + + return foundone; + } + + public PresenceData[] Get(string field, string data) + { + List presences = new List(); + if (field == "UserID") + { + foreach (PresenceData p in m_presenceData.Values) + if (p.UserID == data) + presences.Add(p); + return presences.ToArray(); + } + else if (field == "SessionID") + { + UUID session = UUID.Zero; + if (!UUID.TryParse(data, out session)) + return presences.ToArray(); + + if (m_presenceData.ContainsKey(session)) + { + presences.Add(m_presenceData[session]); + return presences.ToArray(); + } + } + else if (field == "RegionID") + { + UUID region = UUID.Zero; + if (!UUID.TryParse(data, out region)) + return presences.ToArray(); + foreach (PresenceData p in m_presenceData.Values) + if (p.RegionID == region) + presences.Add(p); + return presences.ToArray(); + } + else + { + foreach (PresenceData p in m_presenceData.Values) + { + if (p.Data.ContainsKey(field) && p.Data[field] == data) + presences.Add(p); + } + return presences.ToArray(); + } + + return presences.ToArray(); + } + + public void Prune(string userID) + { + List deleteSessions = new List(); + int online = 0; + + foreach (KeyValuePair kvp in m_presenceData) + { + bool on = false; + if (bool.TryParse(kvp.Value.Data["Online"], out on) && on) + online++; + else + deleteSessions.Add(kvp.Key); + } + if (online == 0 && deleteSessions.Count > 0) + deleteSessions.RemoveAt(0); + + foreach (UUID s in deleteSessions) + m_presenceData.Remove(s); + + } + + public bool Delete(string field, string data) + { + List presences = new List(); + if (field == "UserID") + { + foreach (KeyValuePair p in m_presenceData) + if (p.Value.UserID == data) + presences.Add(p.Key); + } + else if (field == "SessionID") + { + UUID session = UUID.Zero; + if (UUID.TryParse(data, out session)) + { + if (m_presenceData.ContainsKey(session)) + { + presences.Add(session); + } + } + } + else if (field == "RegionID") + { + UUID region = UUID.Zero; + if (UUID.TryParse(data, out region)) + { + foreach (KeyValuePair p in m_presenceData) + if (p.Value.RegionID == region) + presences.Add(p.Key); + } + } + else + { + foreach (KeyValuePair p in m_presenceData) + { + if (p.Value.Data.ContainsKey(field) && p.Value.Data[field] == data) + presences.Add(p.Key); + } + } + + foreach (UUID u in presences) + m_presenceData.Remove(u); + + if (presences.Count == 0) + return false; + + return true; + } + + } +} -- cgit v1.1 From 28d6705358c2e383fb46c57f064de4dcff144e33 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sat, 9 Jan 2010 20:46:32 +0000 Subject: Preliminary work on the new default region setting mechanism --- OpenSim/Data/Null/NullRegionData.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'OpenSim/Data/Null') diff --git a/OpenSim/Data/Null/NullRegionData.cs b/OpenSim/Data/Null/NullRegionData.cs index e8263ea..92db87a 100644 --- a/OpenSim/Data/Null/NullRegionData.cs +++ b/OpenSim/Data/Null/NullRegionData.cs @@ -130,5 +130,15 @@ namespace OpenSim.Data.Null return true; } + + public List GetDefaultRegions(UUID scopeID) + { + return null; + } + + public List GetFallbackRegions(UUID scopeID, int x, int y) + { + return null; + } } } -- cgit v1.1 From 35a245b67a44eaa62dbf7951646ad9818caa8b02 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 31 Jan 2010 22:35:23 -0800 Subject: Assorted bug fixes related to hyperlinking --- OpenSim/Data/Null/NullRegionData.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'OpenSim/Data/Null') diff --git a/OpenSim/Data/Null/NullRegionData.cs b/OpenSim/Data/Null/NullRegionData.cs index 92db87a..dc68edb 100644 --- a/OpenSim/Data/Null/NullRegionData.cs +++ b/OpenSim/Data/Null/NullRegionData.cs @@ -133,12 +133,12 @@ namespace OpenSim.Data.Null public List GetDefaultRegions(UUID scopeID) { - return null; + return new List(); } public List GetFallbackRegions(UUID scopeID, int x, int y) { - return null; + return new List(); } } } -- cgit v1.1 From d8bab61af424d22c35519557f343145f3c685edc Mon Sep 17 00:00:00 2001 From: Melanie Date: Mon, 8 Feb 2010 21:24:04 +0000 Subject: Convert NullRegionData to a singleton pattern, since that is required for a standalone --- OpenSim/Data/Null/NullRegionData.cs | 55 +++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) (limited to 'OpenSim/Data/Null') diff --git a/OpenSim/Data/Null/NullRegionData.cs b/OpenSim/Data/Null/NullRegionData.cs index dc68edb..5b9898c 100644 --- a/OpenSim/Data/Null/NullRegionData.cs +++ b/OpenSim/Data/Null/NullRegionData.cs @@ -31,20 +31,31 @@ using System.Collections.Generic; using OpenMetaverse; using OpenSim.Framework; using OpenSim.Data; +using System.Reflection; +using log4net; namespace OpenSim.Data.Null { public class NullRegionData : IRegionData { + private static NullRegionData Instance = null; + + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + Dictionary m_regionData = new Dictionary(); public NullRegionData(string connectionString, string realm) { + if (Instance == null) + Instance = this; //Console.WriteLine("[XXX] NullRegionData constructor"); } public List Get(string regionName, UUID scopeID) { + if (Instance != this) + return Instance.Get(regionName, scopeID); + List ret = new List(); foreach (RegionData r in m_regionData.Values) @@ -69,6 +80,9 @@ namespace OpenSim.Data.Null public RegionData Get(int posX, int posY, UUID scopeID) { + if (Instance != this) + return Instance.Get(posX, posY, scopeID); + List ret = new List(); foreach (RegionData r in m_regionData.Values) @@ -85,6 +99,9 @@ namespace OpenSim.Data.Null public RegionData Get(UUID regionID, UUID scopeID) { + if (Instance != this) + return Instance.Get(regionID, scopeID); + if (m_regionData.ContainsKey(regionID)) return m_regionData[regionID]; @@ -93,6 +110,9 @@ namespace OpenSim.Data.Null public List Get(int startX, int startY, int endX, int endY, UUID scopeID) { + if (Instance != this) + return Instance.Get(startX, startY, endX, endY, scopeID); + List ret = new List(); foreach (RegionData r in m_regionData.Values) @@ -106,6 +126,9 @@ namespace OpenSim.Data.Null public bool Store(RegionData data) { + if (Instance != this) + return Instance.Store(data); + m_regionData[data.RegionID] = data; return true; @@ -113,6 +136,9 @@ namespace OpenSim.Data.Null public bool SetDataItem(UUID regionID, string item, string value) { + if (Instance != this) + return Instance.SetDataItem(regionID, item, value); + if (!m_regionData.ContainsKey(regionID)) return false; @@ -123,6 +149,9 @@ namespace OpenSim.Data.Null public bool Delete(UUID regionID) { + if (Instance != this) + return Instance.Delete(regionID); + if (!m_regionData.ContainsKey(regionID)) return false; @@ -133,12 +162,34 @@ namespace OpenSim.Data.Null public List GetDefaultRegions(UUID scopeID) { - return new List(); + if (Instance != this) + return Instance.GetDefaultRegions(scopeID); + + List ret = new List(); + + foreach (RegionData r in m_regionData.Values) + { + if ((Convert.ToInt32(r.Data["flags"]) & 1) != 0) + ret.Add(r); + } + + return ret; } public List GetFallbackRegions(UUID scopeID, int x, int y) { - return new List(); + if (Instance != this) + return Instance.GetFallbackRegions(scopeID, x, y); + + List ret = new List(); + + foreach (RegionData r in m_regionData.Values) + { + if ((Convert.ToInt32(r.Data["flags"]) & 2) != 0) + ret.Add(r); + } + + return ret; } } } -- cgit v1.1 From ef8b2d2f90794f845772fc55dede46b6312af251 Mon Sep 17 00:00:00 2001 From: Melanie Date: Mon, 8 Feb 2010 21:38:49 +0000 Subject: Convert null presence data to a singleton as well. Standalone logins now work --- OpenSim/Data/Null/NullPresenceData.cs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'OpenSim/Data/Null') diff --git a/OpenSim/Data/Null/NullPresenceData.cs b/OpenSim/Data/Null/NullPresenceData.cs index 52fdc6f..40700cf 100644 --- a/OpenSim/Data/Null/NullPresenceData.cs +++ b/OpenSim/Data/Null/NullPresenceData.cs @@ -36,10 +36,15 @@ namespace OpenSim.Data.Null { public class NullPresenceData : IPresenceData { + private static NullPresenceData Instance; + Dictionary m_presenceData = new Dictionary(); public NullPresenceData(string connectionString, string realm) { + if (Instance == null) + Instance = this; + //Console.WriteLine("[XXX] NullRegionData constructor"); // Let's stick in a test presence PresenceData p = new PresenceData(); @@ -52,12 +57,18 @@ namespace OpenSim.Data.Null public bool Store(PresenceData data) { + if (Instance != this) + return Instance.Store(data); + m_presenceData[data.SessionID] = data; return true; } public PresenceData Get(UUID sessionID) { + if (Instance != this) + return Instance.Get(sessionID); + if (m_presenceData.ContainsKey(sessionID)) return m_presenceData[sessionID]; @@ -66,6 +77,12 @@ namespace OpenSim.Data.Null public void LogoutRegionAgents(UUID regionID) { + if (Instance != this) + { + Instance.LogoutRegionAgents(regionID); + return; + } + List toBeDeleted = new List(); foreach (KeyValuePair kvp in m_presenceData) if (kvp.Value.RegionID == regionID) @@ -77,6 +94,8 @@ namespace OpenSim.Data.Null public bool ReportAgent(UUID sessionID, UUID regionID, string position, string lookAt) { + if (Instance != this) + return Instance.ReportAgent(sessionID, regionID, position, lookAt); if (m_presenceData.ContainsKey(sessionID)) { m_presenceData[sessionID].RegionID = regionID; @@ -90,6 +109,9 @@ namespace OpenSim.Data.Null public bool SetHomeLocation(string userID, UUID regionID, Vector3 position, Vector3 lookAt) { + if (Instance != this) + return Instance.SetHomeLocation(userID, regionID, position, lookAt); + bool foundone = false; foreach (PresenceData p in m_presenceData.Values) { @@ -107,6 +129,9 @@ namespace OpenSim.Data.Null public PresenceData[] Get(string field, string data) { + if (Instance != this) + return Instance.Get(field, data); + List presences = new List(); if (field == "UserID") { @@ -152,6 +177,12 @@ namespace OpenSim.Data.Null public void Prune(string userID) { + if (Instance != this) + { + Instance.Prune(userID); + return; + } + List deleteSessions = new List(); int online = 0; @@ -173,6 +204,9 @@ namespace OpenSim.Data.Null public bool Delete(string field, string data) { + if (Instance != this) + return Delete(field, data); + List presences = new List(); if (field == "UserID") { -- cgit v1.1 From dc197856727c06b0b06488ab839409831af84865 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 14 Feb 2010 16:57:02 -0800 Subject: Added UserAccount, Avatar and Authentication to Data.Null, so that OpenSim can run out-of-the-box. #WaitingForSQLite --- OpenSim/Data/Null/NullAuthenticationData.cs | 81 ++++++++++++++++ OpenSim/Data/Null/NullAvatarData.cs | 93 +++++++++++++++++++ OpenSim/Data/Null/NullUserAccountData.cs | 139 ++++++++++++++++++++++++++++ 3 files changed, 313 insertions(+) create mode 100644 OpenSim/Data/Null/NullAuthenticationData.cs create mode 100644 OpenSim/Data/Null/NullAvatarData.cs create mode 100644 OpenSim/Data/Null/NullUserAccountData.cs (limited to 'OpenSim/Data/Null') diff --git a/OpenSim/Data/Null/NullAuthenticationData.cs b/OpenSim/Data/Null/NullAuthenticationData.cs new file mode 100644 index 0000000..3fb3105 --- /dev/null +++ b/OpenSim/Data/Null/NullAuthenticationData.cs @@ -0,0 +1,81 @@ +/* + * 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 OpenSimulator 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; +using System.Collections.Generic; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Data; + +namespace OpenSim.Data.Null +{ + public class NullAuthenticationData : IAuthenticationData + { + private static Dictionary m_DataByUUID = new Dictionary(); + private static Dictionary m_Tokens = new Dictionary(); + + public NullAuthenticationData(string connectionString, string realm) + { + } + + public AuthenticationData Get(UUID principalID) + { + if (m_DataByUUID.ContainsKey(principalID)) + return m_DataByUUID[principalID]; + + return null; + } + + public bool Store(AuthenticationData data) + { + m_DataByUUID[data.PrincipalID] = data; + return true; + } + + public bool SetDataItem(UUID principalID, string item, string value) + { + // Not implemented + return false; + } + + public bool SetToken(UUID principalID, string token, int lifetime) + { + m_Tokens[principalID] = token; + return true; + } + + public bool CheckToken(UUID principalID, string token, int lifetime) + { + if (m_Tokens.ContainsKey(principalID)) + return m_Tokens[principalID] == token; + + return false; + } + + } +} diff --git a/OpenSim/Data/Null/NullAvatarData.cs b/OpenSim/Data/Null/NullAvatarData.cs new file mode 100644 index 0000000..c81ba43 --- /dev/null +++ b/OpenSim/Data/Null/NullAvatarData.cs @@ -0,0 +1,93 @@ +/* + * 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 OpenSimulator 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; +using System.Collections.Generic; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Data; + +namespace OpenSim.Data.Null +{ + public class NullAvatarData : IAvatarData + { + private static Dictionary m_DataByUUID = new Dictionary(); + + public NullAvatarData(string connectionString, string realm) + { + } + + public AvatarBaseData[] Get(string field, string val) + { + if (field == "PrincipalID") + { + UUID id = UUID.Zero; + if (UUID.TryParse(val, out id)) + if (m_DataByUUID.ContainsKey(id)) + return new AvatarBaseData[] { m_DataByUUID[id] }; + } + + // Fail + return new AvatarBaseData[0]; + } + + public bool Store(AvatarBaseData data) + { + m_DataByUUID[data.PrincipalID] = data; + return true; + } + + public bool Delete(UUID principalID, string name) + { + if (m_DataByUUID.ContainsKey(principalID) && m_DataByUUID[principalID].Data.ContainsKey(name)) + { + m_DataByUUID[principalID].Data.Remove(name); + return true; + } + + return false; + } + + public bool Delete(string field, string val) + { + if (field == "PrincipalID") + { + UUID id = UUID.Zero; + if (UUID.TryParse(val, out id)) + if (m_DataByUUID.ContainsKey(id)) + { + m_DataByUUID.Remove(id); + return true; + } + } + + return false; + } + + } +} diff --git a/OpenSim/Data/Null/NullUserAccountData.cs b/OpenSim/Data/Null/NullUserAccountData.cs new file mode 100644 index 0000000..fc2c5d5 --- /dev/null +++ b/OpenSim/Data/Null/NullUserAccountData.cs @@ -0,0 +1,139 @@ +/* + * 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 OpenSimulator 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; +using System.Collections.Generic; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Data; + +namespace OpenSim.Data.Null +{ + public class NullUserAccountData : IUserAccountData + { + private static Dictionary m_DataByUUID = new Dictionary(); + private static Dictionary m_DataByName = new Dictionary(); + private static Dictionary m_DataByEmail = new Dictionary(); + + public NullUserAccountData(string connectionString, string realm) + { + } + + /// + /// Tries to implement the Get [] semantics, but it cuts corners like crazy. + /// Specifically, it relies on the knowledge that the only Gets used are + /// keyed on PrincipalID, Email, and FirstName+LastName. + /// + /// + /// + /// + public UserAccountData[] Get(string[] fields, string[] values) + { + List fieldsLst = new List(fields); + if (fieldsLst.Contains("PrincipalID")) + { + int i = fieldsLst.IndexOf("PrincipalID"); + UUID id = UUID.Zero; + if (UUID.TryParse(values[i], out id)) + if (m_DataByUUID.ContainsKey(id)) + return new UserAccountData[] { m_DataByUUID[id] }; + } + if (fieldsLst.Contains("FirstName") && fieldsLst.Contains("LastName")) + { + int findex = fieldsLst.IndexOf("FirstName"); + int lindex = fieldsLst.IndexOf("LastName"); + if (m_DataByName.ContainsKey(values[findex] + " " + values[lindex])) + return new UserAccountData[] { m_DataByName[values[findex] + " " + values[lindex]] }; + } + if (fieldsLst.Contains("Email")) + { + int i = fieldsLst.IndexOf("Email"); + if (m_DataByEmail.ContainsKey(values[i])) + return new UserAccountData[] { m_DataByEmail[values[i]] }; + } + + // Fail + return new UserAccountData[0]; + } + + public bool Store(UserAccountData data) + { + if (data == null) + return false; + + m_DataByUUID[data.PrincipalID] = data; + m_DataByName[data.FirstName + " " + data.LastName] = data; + if (data.Data.ContainsKey("Email") && data.Data["Email"] != string.Empty) + m_DataByEmail[data.Data["Email"]] = data; + + return true; + } + + public UserAccountData[] GetUsers(UUID scopeID, string query) + { + string[] words = query.Split(new char[] { ' ' }); + + for (int i = 0; i < words.Length; i++) + { + if (words[i].Length < 3) + { + if (i != words.Length - 1) + Array.Copy(words, i + 1, words, i, words.Length - i - 1); + Array.Resize(ref words, words.Length - 1); + } + } + + if (words.Length == 0) + return new UserAccountData[0]; + + if (words.Length > 2) + return new UserAccountData[0]; + + List lst = new List(m_DataByName.Keys); + if (words.Length == 1) + { + lst = lst.FindAll(delegate(string s) { return s.StartsWith(words[0]); }); + } + else + { + lst = lst.FindAll(delegate(string s) { return s.Contains(words[0]) || s.Contains(words[1]); }); + } + + if (lst == null || (lst != null && lst.Count == 0)) + return new UserAccountData[0]; + + UserAccountData[] result = new UserAccountData[lst.Count]; + int n = 0; + foreach (string key in lst) + result[n++] = m_DataByName[key]; + + return result; + } + + } +} -- cgit v1.1 From 70de6956ff6a3d833149156b6293122ef734b73d Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 21 Feb 2010 18:56:44 -0800 Subject: Small bug fixes for making tests work. --- OpenSim/Data/Null/NullPresenceData.cs | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'OpenSim/Data/Null') diff --git a/OpenSim/Data/Null/NullPresenceData.cs b/OpenSim/Data/Null/NullPresenceData.cs index 40700cf..5f78691 100644 --- a/OpenSim/Data/Null/NullPresenceData.cs +++ b/OpenSim/Data/Null/NullPresenceData.cs @@ -43,16 +43,18 @@ namespace OpenSim.Data.Null public NullPresenceData(string connectionString, string realm) { if (Instance == null) + { Instance = this; - //Console.WriteLine("[XXX] NullRegionData constructor"); - // Let's stick in a test presence - PresenceData p = new PresenceData(); - p.SessionID = UUID.Zero; - p.UserID = UUID.Zero.ToString(); - p.Data = new Dictionary(); - p.Data["Online"] = "true"; - m_presenceData.Add(UUID.Zero, p); + //Console.WriteLine("[XXX] NullRegionData constructor"); + // Let's stick in a test presence + PresenceData p = new PresenceData(); + p.SessionID = UUID.Zero; + p.UserID = UUID.Zero.ToString(); + p.Data = new Dictionary(); + p.Data["Online"] = true.ToString(); + m_presenceData.Add(UUID.Zero, p); + } } public bool Store(PresenceData data) @@ -70,7 +72,9 @@ namespace OpenSim.Data.Null return Instance.Get(sessionID); if (m_presenceData.ContainsKey(sessionID)) + { return m_presenceData[sessionID]; + } return null; } -- cgit v1.1 From 774958bbbf639090e73204be1d5b6d5c7653441a Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sun, 28 Feb 2010 16:09:06 -0800 Subject: Added FriendsData to both Null storage and SQLite. Untested. --- OpenSim/Data/Null/NullFriendsData.cs | 92 ++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 OpenSim/Data/Null/NullFriendsData.cs (limited to 'OpenSim/Data/Null') diff --git a/OpenSim/Data/Null/NullFriendsData.cs b/OpenSim/Data/Null/NullFriendsData.cs new file mode 100644 index 0000000..e7f7fd3 --- /dev/null +++ b/OpenSim/Data/Null/NullFriendsData.cs @@ -0,0 +1,92 @@ +/* + * 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 OpenSimulator 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; +using System.Collections.Generic; +using OpenMetaverse; +using OpenSim.Framework; +using OpenSim.Data; + +namespace OpenSim.Data.Null +{ + public class NullFriendsData : IFriendsData + { + private static List m_Data = new List(); + + public NullFriendsData(string connectionString, string realm) + { + } + + /// + /// Tries to implement the Get [] semantics, but it cuts corners. + /// Specifically, it gets all friendships even if they weren't accepted yet. + /// + /// + /// + /// + public FriendsData[] GetFriends(UUID userID) + { + List lst = m_Data.FindAll(delegate (FriendsData fdata) + { + return fdata.PrincipalID == userID; + }); + + if (lst != null) + return lst.ToArray(); + + return new FriendsData[0]; + } + + public bool Store(FriendsData data) + { + if (data == null) + return false; + + m_Data.Add(data); + + return true; + } + + public bool Delete(UUID userID, string friendID) + { + List lst = m_Data.FindAll(delegate(FriendsData fdata) { return fdata.PrincipalID == userID; }); + if (lst != null) + { + FriendsData friend = lst.Find(delegate(FriendsData fdata) { return fdata.Friend == friendID; }); + if (friendID != null) + { + m_Data.Remove(friend); + return true; + } + } + + return false; + } + + } +} -- cgit v1.1