clockwerk-opensim – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 vero 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  
28 using System;
29 using System.Collections;
30 using System.Collections.Generic;
31 using System.Reflection;
32 using System.Threading;
33 using log4net;
34 using OpenMetaverse;
35 using OpenSim.Framework;
36 using OpenSim.Data;
37  
38 namespace OpenSim.Data.Null
39 {
40 public class NullFriendsData : IFriendsData
41 {
42 // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
43  
44 private static List<FriendsData> m_Data = new List<FriendsData>();
45  
46 public NullFriendsData(string connectionString, string realm)
47 {
48 }
49  
50 /// <summary>
51 /// Clear all friends data
52 /// </summary>
53 /// <remarks>
54 /// This is required by unit tests to clear the static data between test runs.
55 /// </remarks>
56 public static void Clear()
57 {
58 lock (m_Data)
59 m_Data.Clear();
60 }
61  
62 public FriendsData[] GetFriends(UUID principalID)
63 {
64 return GetFriends(principalID.ToString());
65 }
66  
67 /// <summary>
68 /// Tries to implement the Get [] semantics, but it cuts corners.
69 /// Specifically, it gets all friendships even if they weren't accepted yet.
70 /// </summary>
71 /// <param name="fields"></param>
72 /// <param name="values"></param>
73 /// <returns></returns>
74 public FriendsData[] GetFriends(string userID)
75 {
76 lock (m_Data)
77 {
78 List<FriendsData> lst = m_Data.FindAll(fdata =>
79 {
80 return fdata.PrincipalID == userID.ToString();
81 });
82  
83 if (lst != null)
84 {
85 lst.ForEach(f =>
86 {
87 FriendsData f2 = m_Data.Find(candidateF2 => f.Friend == candidateF2.PrincipalID);
88 if (f2 != null)
89 f.Data["TheirFlags"] = f2.Data["Flags"];
90  
91 // m_log.DebugFormat(
92 // "[NULL FRIENDS DATA]: Got {0} {1} {2} for {3}",
93 // f.Friend, f.Data["Flags"], f2 != null ? f.Data["TheirFlags"] : "not found!", f.PrincipalID);
94 });
95  
96 // m_log.DebugFormat("[NULL FRIENDS DATA]: Got {0} friends for {1}", lst.Count, userID);
97  
98 return lst.ToArray();
99 }
100 }
101  
102 return new FriendsData[0];
103 }
104  
105 public bool Store(FriendsData data)
106 {
107 if (data == null)
108 return false;
109  
110 // m_log.DebugFormat(
111 // "[NULL FRIENDS DATA]: Storing {0} {1} {2}", data.PrincipalID, data.Friend, data.Data["Flags"]);
112  
113 lock (m_Data)
114 m_Data.Add(data);
115  
116 return true;
117 }
118  
119 public bool Delete(UUID principalID, string friend)
120 {
121 return Delete(principalID.ToString(), friend);
122 }
123  
124 public bool Delete(string userID, string friendID)
125 {
126 lock (m_Data)
127 {
128 List<FriendsData> lst = m_Data.FindAll(delegate(FriendsData fdata) { return fdata.PrincipalID == userID.ToString(); });
129 if (lst != null)
130 {
131 FriendsData friend = lst.Find(delegate(FriendsData fdata) { return fdata.Friend == friendID; });
132 if (friendID != null)
133 {
134 // m_log.DebugFormat(
135 // "[NULL FRIENDS DATA]: Deleting friend {0} {1} for {2}",
136 // friend.Friend, friend.Data["Flags"], friend.PrincipalID);
137  
138 m_Data.Remove(friend);
139 return true;
140 }
141 }
142 }
143  
144 return false;
145 }
146  
147 }
148 }