OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
NullFriendsData.cs
Go to the documentation of this file.
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 {
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 
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 
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 }
static void Clear()
Clear all friends data
An interface for connecting to the friends datastore
Definition: IFriendsData.cs:45
NullFriendsData(string connectionString, string realm)
FriendsData[] GetFriends(UUID principalID)
bool Delete(UUID principalID, string friend)
bool Delete(string userID, string friendID)
FriendsData[] GetFriends(string userID)
Tries to implement the Get [] semantics, but it cuts corners. Specifically, it gets all friendships e...