diff options
Diffstat (limited to 'OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs')
-rw-r--r-- | OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs | 2102 |
1 files changed, 1051 insertions, 1051 deletions
diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs index 6a3aa06..a6f9ea1 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/XmlRpcGroupsModule.cs | |||
@@ -1,1051 +1,1051 @@ | |||
1 | /* | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ | 2 | * Copyright (c) Contributors, http://opensimulator.org/ |
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | 3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. |
4 | * | 4 | * |
5 | * Redistribution and use in source and binary forms, with or without | 5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions are met: | 6 | * modification, are permitted provided that the following conditions are met: |
7 | * * Redistributions of source code must retain the above copyright | 7 | * * Redistributions of source code must retain the above copyright |
8 | * notice, this list of conditions and the following disclaimer. | 8 | * notice, this list of conditions and the following disclaimer. |
9 | * * Redistributions in binary form must reproduce the above copyright | 9 | * * Redistributions in binary form must reproduce the above copyright |
10 | * notice, this list of conditions and the following disclaimer in the | 10 | * notice, this list of conditions and the following disclaimer in the |
11 | * documentation and/or other materials provided with the distribution. | 11 | * documentation and/or other materials provided with the distribution. |
12 | * * Neither the name of the OpenSim Project nor the | 12 | * * Neither the name of the OpenSim Project nor the |
13 | * names of its contributors may be used to endorse or promote products | 13 | * names of its contributors may be used to endorse or promote products |
14 | * derived from this software without specific prior written permission. | 14 | * derived from this software without specific prior written permission. |
15 | * | 15 | * |
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | 16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY |
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | 19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY |
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 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 | 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 | 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 | 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. | 25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Reflection; | 30 | using System.Reflection; |
31 | 31 | ||
32 | using System.Collections; | 32 | using System.Collections; |
33 | //using Nwc.XmlRpc; | 33 | //using Nwc.XmlRpc; |
34 | 34 | ||
35 | using log4net; | 35 | using log4net; |
36 | using Nini.Config; | 36 | using Nini.Config; |
37 | 37 | ||
38 | using OpenMetaverse; | 38 | using OpenMetaverse; |
39 | using OpenMetaverse.StructuredData; | 39 | using OpenMetaverse.StructuredData; |
40 | 40 | ||
41 | using OpenSim.Framework; | 41 | using OpenSim.Framework; |
42 | using OpenSim.Region.CoreModules.Framework.EventQueue; | 42 | using OpenSim.Region.CoreModules.Framework.EventQueue; |
43 | using OpenSim.Region.Framework.Interfaces; | 43 | using OpenSim.Region.Framework.Interfaces; |
44 | using OpenSim.Region.Framework.Scenes; | 44 | using OpenSim.Region.Framework.Scenes; |
45 | 45 | ||
46 | using Caps = OpenSim.Framework.Communications.Capabilities.Caps; | 46 | using Caps = OpenSim.Framework.Communications.Capabilities.Caps; |
47 | using DirFindFlags = OpenMetaverse.DirectoryManager.DirFindFlags; | 47 | using DirFindFlags = OpenMetaverse.DirectoryManager.DirFindFlags; |
48 | 48 | ||
49 | 49 | ||
50 | 50 | ||
51 | namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups | 51 | namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups |
52 | { | 52 | { |
53 | public class XmlRpcGroupsModule : INonSharedRegionModule, IGroupsModule | 53 | public class XmlRpcGroupsModule : INonSharedRegionModule, IGroupsModule |
54 | { | 54 | { |
55 | /// <summary> | 55 | /// <summary> |
56 | /// To use this module, you must specify the following in your OpenSim.ini | 56 | /// To use this module, you must specify the following in your OpenSim.ini |
57 | /// [GROUPS] | 57 | /// [GROUPS] |
58 | /// Enabled = true | 58 | /// Enabled = true |
59 | /// Module = XmlRpcGroups | 59 | /// Module = XmlRpcGroups |
60 | /// XmlRpcMessagingEnabled = true | 60 | /// XmlRpcMessagingEnabled = true |
61 | /// XmlRpcNoticesEnabled = true | 61 | /// XmlRpcNoticesEnabled = true |
62 | /// XmlRpcDebugEnabled = true | 62 | /// XmlRpcDebugEnabled = true |
63 | /// | 63 | /// |
64 | /// </summary> | 64 | /// </summary> |
65 | 65 | ||
66 | private static readonly ILog m_log = | 66 | private static readonly ILog m_log = |
67 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 67 | LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
68 | 68 | ||
69 | private List<Scene> m_SceneList = new List<Scene>(); | 69 | private List<Scene> m_SceneList = new List<Scene>(); |
70 | 70 | ||
71 | // This only works when running as non-Shared, in shared, there may be multiple IClientAPIs for a single client | 71 | // This only works when running as non-Shared, in shared, there may be multiple IClientAPIs for a single client |
72 | private Dictionary<UUID, IClientAPI> m_ActiveClients = new Dictionary<UUID, IClientAPI>(); | 72 | private Dictionary<UUID, IClientAPI> m_ActiveClients = new Dictionary<UUID, IClientAPI>(); |
73 | 73 | ||
74 | private IMessageTransferModule m_MsgTransferModule = null; | 74 | private IMessageTransferModule m_MsgTransferModule = null; |
75 | 75 | ||
76 | private IGroupDataProvider m_groupData = null; | 76 | private IGroupDataProvider m_groupData = null; |
77 | 77 | ||
78 | // Configuration settings | 78 | // Configuration settings |
79 | private const string m_defaultXmlRpcServiceURL = "http://osflotsam.org/xmlrpc.php"; | 79 | private const string m_defaultXmlRpcServiceURL = "http://osflotsam.org/xmlrpc.php"; |
80 | private bool m_GroupsEnabled = false; | 80 | private bool m_GroupsEnabled = false; |
81 | private bool m_GroupNoticesEnabled = true; | 81 | private bool m_GroupNoticesEnabled = true; |
82 | private bool m_debugEnabled = true; | 82 | private bool m_debugEnabled = true; |
83 | 83 | ||
84 | #region IRegionModule Members | 84 | #region IRegionModule Members |
85 | 85 | ||
86 | public void Initialise(IConfigSource config) | 86 | public void Initialise(IConfigSource config) |
87 | { | 87 | { |
88 | IConfig groupsConfig = config.Configs["Groups"]; | 88 | IConfig groupsConfig = config.Configs["Groups"]; |
89 | 89 | ||
90 | m_log.Info("[GROUPS]: Initializing XmlRpcGroups"); | 90 | m_log.Info("[GROUPS]: Initializing XmlRpcGroups"); |
91 | 91 | ||
92 | if (groupsConfig == null) | 92 | if (groupsConfig == null) |
93 | { | 93 | { |
94 | // Do not run this module by default. | 94 | // Do not run this module by default. |
95 | m_log.Info("[GROUPS]: No config found in OpenSim.ini -- not enabling XmlRpcGroups"); | 95 | m_log.Info("[GROUPS]: No config found in OpenSim.ini -- not enabling XmlRpcGroups"); |
96 | return; | 96 | return; |
97 | } | 97 | } |
98 | else | 98 | else |
99 | { | 99 | { |
100 | m_GroupsEnabled = groupsConfig.GetBoolean("Enabled", false); | 100 | m_GroupsEnabled = groupsConfig.GetBoolean("Enabled", false); |
101 | if (!m_GroupsEnabled) | 101 | if (!m_GroupsEnabled) |
102 | { | 102 | { |
103 | m_log.Info("[GROUPS]: Groups disabled in configuration"); | 103 | m_log.Info("[GROUPS]: Groups disabled in configuration"); |
104 | return; | 104 | return; |
105 | } | 105 | } |
106 | 106 | ||
107 | if (groupsConfig.GetString("Module", "Default") != "XmlRpcGroups") | 107 | if (groupsConfig.GetString("Module", "Default") != "XmlRpcGroups") |
108 | { | 108 | { |
109 | m_log.Info("[GROUPS]: Config Groups Module not set to XmlRpcGroups"); | 109 | m_log.Info("[GROUPS]: Config Groups Module not set to XmlRpcGroups"); |
110 | m_GroupsEnabled = false; | 110 | m_GroupsEnabled = false; |
111 | 111 | ||
112 | return; | 112 | return; |
113 | } | 113 | } |
114 | 114 | ||
115 | string ServiceURL = groupsConfig.GetString("XmlRpcServiceURL", m_defaultXmlRpcServiceURL); | 115 | string ServiceURL = groupsConfig.GetString("XmlRpcServiceURL", m_defaultXmlRpcServiceURL); |
116 | m_groupData = new XmlRpcGroupDataProvider(ServiceURL); | 116 | m_groupData = new XmlRpcGroupDataProvider(ServiceURL); |
117 | m_log.InfoFormat("[GROUPS]: XmlRpc Service URL set to: {0}", ServiceURL); | 117 | m_log.InfoFormat("[GROUPS]: XmlRpc Service URL set to: {0}", ServiceURL); |
118 | 118 | ||
119 | m_GroupNoticesEnabled = groupsConfig.GetBoolean("XmlRpcNoticesEnabled", true); | 119 | m_GroupNoticesEnabled = groupsConfig.GetBoolean("XmlRpcNoticesEnabled", true); |
120 | m_debugEnabled = groupsConfig.GetBoolean("XmlRpcDebugEnabled", true); | 120 | m_debugEnabled = groupsConfig.GetBoolean("XmlRpcDebugEnabled", true); |
121 | 121 | ||
122 | } | 122 | } |
123 | } | 123 | } |
124 | 124 | ||
125 | public void AddRegion(Scene scene) | 125 | public void AddRegion(Scene scene) |
126 | { | 126 | { |
127 | if (m_GroupsEnabled) | 127 | if (m_GroupsEnabled) |
128 | scene.RegisterModuleInterface<IGroupsModule>(this); | 128 | scene.RegisterModuleInterface<IGroupsModule>(this); |
129 | } | 129 | } |
130 | 130 | ||
131 | public void RegionLoaded(Scene scene) | 131 | public void RegionLoaded(Scene scene) |
132 | { | 132 | { |
133 | if (!m_GroupsEnabled) | 133 | if (!m_GroupsEnabled) |
134 | return; | 134 | return; |
135 | 135 | ||
136 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 136 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
137 | 137 | ||
138 | m_MsgTransferModule = scene.RequestModuleInterface<IMessageTransferModule>(); | 138 | m_MsgTransferModule = scene.RequestModuleInterface<IMessageTransferModule>(); |
139 | 139 | ||
140 | // No message transfer module, no notices, group invites, rejects, ejects, etc | 140 | // No message transfer module, no notices, group invites, rejects, ejects, etc |
141 | if (m_MsgTransferModule == null) | 141 | if (m_MsgTransferModule == null) |
142 | { | 142 | { |
143 | m_GroupsEnabled = false; | 143 | m_GroupsEnabled = false; |
144 | m_log.Info("[GROUPS]: Could not get MessageTransferModule"); | 144 | m_log.Info("[GROUPS]: Could not get MessageTransferModule"); |
145 | Close(); | 145 | Close(); |
146 | return; | 146 | return; |
147 | } | 147 | } |
148 | 148 | ||
149 | 149 | ||
150 | m_SceneList.Add(scene); | 150 | m_SceneList.Add(scene); |
151 | 151 | ||
152 | scene.EventManager.OnNewClient += OnNewClient; | 152 | scene.EventManager.OnNewClient += OnNewClient; |
153 | scene.EventManager.OnClientClosed += OnClientClosed; | 153 | scene.EventManager.OnClientClosed += OnClientClosed; |
154 | scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; | 154 | scene.EventManager.OnIncomingInstantMessage += OnGridInstantMessage; |
155 | 155 | ||
156 | } | 156 | } |
157 | 157 | ||
158 | public void RemoveRegion(Scene scene) | 158 | public void RemoveRegion(Scene scene) |
159 | { | 159 | { |
160 | if (!m_GroupsEnabled) | 160 | if (!m_GroupsEnabled) |
161 | return; | 161 | return; |
162 | 162 | ||
163 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 163 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
164 | 164 | ||
165 | m_SceneList.Remove(scene); | 165 | m_SceneList.Remove(scene); |
166 | } | 166 | } |
167 | 167 | ||
168 | public void Close() | 168 | public void Close() |
169 | { | 169 | { |
170 | if (!m_GroupsEnabled) | 170 | if (!m_GroupsEnabled) |
171 | return; | 171 | return; |
172 | m_log.Debug("[GROUPS]: Shutting down XmlRpcGroups module."); | 172 | m_log.Debug("[GROUPS]: Shutting down XmlRpcGroups module."); |
173 | } | 173 | } |
174 | 174 | ||
175 | public string Name | 175 | public string Name |
176 | { | 176 | { |
177 | get { return "XmlRpcGroupsModule"; } | 177 | get { return "XmlRpcGroupsModule"; } |
178 | } | 178 | } |
179 | 179 | ||
180 | #endregion | 180 | #endregion |
181 | 181 | ||
182 | private void UpdateAllClientsWithGroupInfo() | 182 | private void UpdateAllClientsWithGroupInfo() |
183 | { | 183 | { |
184 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 184 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
185 | foreach (IClientAPI client in m_ActiveClients.Values) | 185 | foreach (IClientAPI client in m_ActiveClients.Values) |
186 | { | 186 | { |
187 | UpdateClientWithGroupInfo(client); | 187 | UpdateClientWithGroupInfo(client); |
188 | } | 188 | } |
189 | } | 189 | } |
190 | 190 | ||
191 | private void UpdateClientWithGroupInfo(IClientAPI client) | 191 | private void UpdateClientWithGroupInfo(IClientAPI client) |
192 | { | 192 | { |
193 | m_log.InfoFormat("[GROUPS] {0} called for {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, client.Name); | 193 | m_log.InfoFormat("[GROUPS] {0} called for {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, client.Name); |
194 | OnAgentDataUpdateRequest(client, client.AgentId, UUID.Zero); | 194 | OnAgentDataUpdateRequest(client, client.AgentId, UUID.Zero); |
195 | 195 | ||
196 | 196 | ||
197 | // Need to send a group membership update to the client | 197 | // Need to send a group membership update to the client |
198 | // UDP version doesn't seem to behave nicely | 198 | // UDP version doesn't seem to behave nicely |
199 | // client.SendGroupMembership(GetMembershipData(client.AgentId)); | 199 | // client.SendGroupMembership(GetMembershipData(client.AgentId)); |
200 | 200 | ||
201 | GroupMembershipData[] membershipData = m_groupData.GetAgentGroupMemberships(client.AgentId).ToArray(); | 201 | GroupMembershipData[] membershipData = m_groupData.GetAgentGroupMemberships(client.AgentId).ToArray(); |
202 | 202 | ||
203 | SendGroupMembershipInfoViaCaps(client, membershipData); | 203 | SendGroupMembershipInfoViaCaps(client, membershipData); |
204 | client.SendAvatarGroupsReply(client.AgentId, membershipData); | 204 | client.SendAvatarGroupsReply(client.AgentId, membershipData); |
205 | 205 | ||
206 | } | 206 | } |
207 | 207 | ||
208 | #region EventHandlers | 208 | #region EventHandlers |
209 | private void OnNewClient(IClientAPI client) | 209 | private void OnNewClient(IClientAPI client) |
210 | { | 210 | { |
211 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 211 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
212 | 212 | ||
213 | 213 | ||
214 | lock (m_ActiveClients) | 214 | lock (m_ActiveClients) |
215 | { | 215 | { |
216 | if (!m_ActiveClients.ContainsKey(client.AgentId)) | 216 | if (!m_ActiveClients.ContainsKey(client.AgentId)) |
217 | { | 217 | { |
218 | client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; | 218 | client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; |
219 | client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; | 219 | client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; |
220 | client.OnDirFindQuery += OnDirFindQuery; | 220 | client.OnDirFindQuery += OnDirFindQuery; |
221 | client.OnInstantMessage += OnInstantMessage; | 221 | client.OnInstantMessage += OnInstantMessage; |
222 | 222 | ||
223 | m_ActiveClients.Add(client.AgentId, client); | 223 | m_ActiveClients.Add(client.AgentId, client); |
224 | } | 224 | } |
225 | } | 225 | } |
226 | 226 | ||
227 | UpdateClientWithGroupInfo(client); | 227 | UpdateClientWithGroupInfo(client); |
228 | } | 228 | } |
229 | private void OnClientClosed(UUID AgentId) | 229 | private void OnClientClosed(UUID AgentId) |
230 | { | 230 | { |
231 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 231 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
232 | 232 | ||
233 | lock (m_ActiveClients) | 233 | lock (m_ActiveClients) |
234 | { | 234 | { |
235 | if (m_ActiveClients.ContainsKey(AgentId)) | 235 | if (m_ActiveClients.ContainsKey(AgentId)) |
236 | { | 236 | { |
237 | IClientAPI client = m_ActiveClients[AgentId]; | 237 | IClientAPI client = m_ActiveClients[AgentId]; |
238 | client.OnUUIDGroupNameRequest -= HandleUUIDGroupNameRequest; | 238 | client.OnUUIDGroupNameRequest -= HandleUUIDGroupNameRequest; |
239 | client.OnAgentDataUpdateRequest -= OnAgentDataUpdateRequest; | 239 | client.OnAgentDataUpdateRequest -= OnAgentDataUpdateRequest; |
240 | client.OnDirFindQuery -= OnDirFindQuery; | 240 | client.OnDirFindQuery -= OnDirFindQuery; |
241 | client.OnInstantMessage -= OnInstantMessage; | 241 | client.OnInstantMessage -= OnInstantMessage; |
242 | 242 | ||
243 | m_ActiveClients.Remove(AgentId); | 243 | m_ActiveClients.Remove(AgentId); |
244 | } | 244 | } |
245 | else | 245 | else |
246 | { | 246 | { |
247 | m_log.InfoFormat("[GROUPS] Client closed that wasn't registered here."); | 247 | m_log.InfoFormat("[GROUPS] Client closed that wasn't registered here."); |
248 | } | 248 | } |
249 | 249 | ||
250 | 250 | ||
251 | } | 251 | } |
252 | 252 | ||
253 | } | 253 | } |
254 | 254 | ||
255 | 255 | ||
256 | void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart) | 256 | void OnDirFindQuery(IClientAPI remoteClient, UUID queryID, string queryText, uint queryFlags, int queryStart) |
257 | { | 257 | { |
258 | if (((DirFindFlags)queryFlags & DirFindFlags.Groups) == DirFindFlags.Groups) | 258 | if (((DirFindFlags)queryFlags & DirFindFlags.Groups) == DirFindFlags.Groups) |
259 | { | 259 | { |
260 | m_log.InfoFormat("[GROUPS] {0} called with queryText({1}) queryFlags({2}) queryStart({3})", System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart); | 260 | m_log.InfoFormat("[GROUPS] {0} called with queryText({1}) queryFlags({2}) queryStart({3})", System.Reflection.MethodBase.GetCurrentMethod().Name, queryText, (DirFindFlags)queryFlags, queryStart); |
261 | 261 | ||
262 | remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(queryText).ToArray()); | 262 | remoteClient.SendDirGroupsReply(queryID, m_groupData.FindGroups(queryText).ToArray()); |
263 | } | 263 | } |
264 | 264 | ||
265 | } | 265 | } |
266 | 266 | ||
267 | private void OnAgentDataUpdateRequest(IClientAPI remoteClient, | 267 | private void OnAgentDataUpdateRequest(IClientAPI remoteClient, |
268 | UUID AgentID, UUID SessionID) | 268 | UUID AgentID, UUID SessionID) |
269 | { | 269 | { |
270 | m_log.InfoFormat("[GROUPS] {0} called with SessionID :: {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, SessionID); | 270 | m_log.InfoFormat("[GROUPS] {0} called with SessionID :: {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, SessionID); |
271 | 271 | ||
272 | 272 | ||
273 | UUID ActiveGroupID = UUID.Zero; | 273 | UUID ActiveGroupID = UUID.Zero; |
274 | string ActiveGroupTitle = string.Empty; | 274 | string ActiveGroupTitle = string.Empty; |
275 | string ActiveGroupName = string.Empty; | 275 | string ActiveGroupName = string.Empty; |
276 | ulong ActiveGroupPowers = (ulong)GroupPowers.None; | 276 | ulong ActiveGroupPowers = (ulong)GroupPowers.None; |
277 | 277 | ||
278 | GroupMembershipData membership = m_groupData.GetAgentActiveMembership(AgentID); | 278 | GroupMembershipData membership = m_groupData.GetAgentActiveMembership(AgentID); |
279 | if (membership != null) | 279 | if (membership != null) |
280 | { | 280 | { |
281 | ActiveGroupID = membership.GroupID; | 281 | ActiveGroupID = membership.GroupID; |
282 | ActiveGroupTitle = membership.GroupTitle; | 282 | ActiveGroupTitle = membership.GroupTitle; |
283 | ActiveGroupPowers = membership.GroupPowers; | 283 | ActiveGroupPowers = membership.GroupPowers; |
284 | } | 284 | } |
285 | 285 | ||
286 | string firstname, lastname; | 286 | string firstname, lastname; |
287 | IClientAPI agent; | 287 | IClientAPI agent; |
288 | if( m_ActiveClients.TryGetValue(AgentID, out agent) ) | 288 | if( m_ActiveClients.TryGetValue(AgentID, out agent) ) |
289 | { | 289 | { |
290 | firstname = agent.FirstName; | 290 | firstname = agent.FirstName; |
291 | lastname = agent.LastName; | 291 | lastname = agent.LastName; |
292 | } else { | 292 | } else { |
293 | firstname = "Unknown"; | 293 | firstname = "Unknown"; |
294 | lastname = "Unknown"; | 294 | lastname = "Unknown"; |
295 | } | 295 | } |
296 | 296 | ||
297 | UpdateScenePresenceWithTitle(AgentID, ActiveGroupTitle); | 297 | UpdateScenePresenceWithTitle(AgentID, ActiveGroupTitle); |
298 | 298 | ||
299 | remoteClient.SendAgentDataUpdate(AgentID, ActiveGroupID, firstname, | 299 | remoteClient.SendAgentDataUpdate(AgentID, ActiveGroupID, firstname, |
300 | lastname, ActiveGroupPowers, ActiveGroupName, | 300 | lastname, ActiveGroupPowers, ActiveGroupName, |
301 | ActiveGroupTitle); | 301 | ActiveGroupTitle); |
302 | } | 302 | } |
303 | 303 | ||
304 | private void HandleUUIDGroupNameRequest(UUID GroupID,IClientAPI remote_client) | 304 | private void HandleUUIDGroupNameRequest(UUID GroupID,IClientAPI remote_client) |
305 | { | 305 | { |
306 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 306 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
307 | 307 | ||
308 | string GroupName; | 308 | string GroupName; |
309 | 309 | ||
310 | GroupRecord group = m_groupData.GetGroupRecord(GroupID, null); | 310 | GroupRecord group = m_groupData.GetGroupRecord(GroupID, null); |
311 | if (group != null) | 311 | if (group != null) |
312 | { | 312 | { |
313 | GroupName = group.GroupName; | 313 | GroupName = group.GroupName; |
314 | } | 314 | } |
315 | else | 315 | else |
316 | { | 316 | { |
317 | GroupName = "Unknown"; | 317 | GroupName = "Unknown"; |
318 | } | 318 | } |
319 | 319 | ||
320 | 320 | ||
321 | remote_client.SendGroupNameReply(GroupID, GroupName); | 321 | remote_client.SendGroupNameReply(GroupID, GroupName); |
322 | } | 322 | } |
323 | 323 | ||
324 | 324 | ||
325 | private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) | 325 | private void OnInstantMessage(IClientAPI remoteClient, GridInstantMessage im) |
326 | { | 326 | { |
327 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 327 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
328 | 328 | ||
329 | 329 | ||
330 | // Group invitations | 330 | // Group invitations |
331 | if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline)) | 331 | if ((im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) || (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline)) |
332 | { | 332 | { |
333 | m_log.WarnFormat("[GROUPS] Received an IIM for {0}.", ((InstantMessageDialog)im.dialog).ToString()); | 333 | m_log.WarnFormat("[GROUPS] Received an IIM for {0}.", ((InstantMessageDialog)im.dialog).ToString()); |
334 | 334 | ||
335 | 335 | ||
336 | UUID inviteID = new UUID(im.imSessionID); | 336 | UUID inviteID = new UUID(im.imSessionID); |
337 | GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(inviteID); | 337 | GroupInviteInfo inviteInfo = m_groupData.GetAgentToGroupInvite(inviteID); |
338 | 338 | ||
339 | m_log.WarnFormat("[GROUPS] Invite is for Agent {0} to Group {1}.", inviteInfo.AgentID, inviteInfo.GroupID); | 339 | m_log.WarnFormat("[GROUPS] Invite is for Agent {0} to Group {1}.", inviteInfo.AgentID, inviteInfo.GroupID); |
340 | 340 | ||
341 | UUID fromAgentID = new UUID(im.fromAgentID); | 341 | UUID fromAgentID = new UUID(im.fromAgentID); |
342 | if ((inviteInfo != null) && (fromAgentID == inviteInfo.AgentID)) | 342 | if ((inviteInfo != null) && (fromAgentID == inviteInfo.AgentID)) |
343 | { | 343 | { |
344 | 344 | ||
345 | // Accept | 345 | // Accept |
346 | if (im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) | 346 | if (im.dialog == (byte)InstantMessageDialog.GroupInvitationAccept) |
347 | { | 347 | { |
348 | m_log.WarnFormat("[GROUPS] Received an accept invite notice."); | 348 | m_log.WarnFormat("[GROUPS] Received an accept invite notice."); |
349 | 349 | ||
350 | // and the sessionid is the role | 350 | // and the sessionid is the role |
351 | m_groupData.AddAgentToGroup(inviteInfo.AgentID, inviteInfo.GroupID, inviteInfo.RoleID); | 351 | m_groupData.AddAgentToGroup(inviteInfo.AgentID, inviteInfo.GroupID, inviteInfo.RoleID); |
352 | 352 | ||
353 | if (m_MsgTransferModule != null) | 353 | if (m_MsgTransferModule != null) |
354 | { | 354 | { |
355 | GridInstantMessage msg = new GridInstantMessage(); | 355 | GridInstantMessage msg = new GridInstantMessage(); |
356 | msg.imSessionID = UUID.Zero.Guid; | 356 | msg.imSessionID = UUID.Zero.Guid; |
357 | msg.fromAgentID = UUID.Zero.Guid; | 357 | msg.fromAgentID = UUID.Zero.Guid; |
358 | msg.toAgentID = inviteInfo.AgentID.Guid; | 358 | msg.toAgentID = inviteInfo.AgentID.Guid; |
359 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | 359 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); |
360 | msg.fromAgentName = "Groups"; | 360 | msg.fromAgentName = "Groups"; |
361 | msg.message = string.Format("You have been added to the group."); | 361 | msg.message = string.Format("You have been added to the group."); |
362 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.MessageBox; | 362 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.MessageBox; |
363 | msg.fromGroup = false; | 363 | msg.fromGroup = false; |
364 | msg.offline = (byte)0; | 364 | msg.offline = (byte)0; |
365 | msg.ParentEstateID = 0; | 365 | msg.ParentEstateID = 0; |
366 | msg.Position = Vector3.Zero; | 366 | msg.Position = Vector3.Zero; |
367 | msg.RegionID = UUID.Zero.Guid; | 367 | msg.RegionID = UUID.Zero.Guid; |
368 | msg.binaryBucket = new byte[0]; | 368 | msg.binaryBucket = new byte[0]; |
369 | 369 | ||
370 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); | 370 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); |
371 | } | 371 | } |
372 | 372 | ||
373 | UpdateAllClientsWithGroupInfo(); | 373 | UpdateAllClientsWithGroupInfo(); |
374 | 374 | ||
375 | m_groupData.RemoveAgentToGroupInvite(inviteID); | 375 | m_groupData.RemoveAgentToGroupInvite(inviteID); |
376 | } | 376 | } |
377 | 377 | ||
378 | // Reject | 378 | // Reject |
379 | if (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline) | 379 | if (im.dialog == (byte)InstantMessageDialog.GroupInvitationDecline) |
380 | { | 380 | { |
381 | m_log.WarnFormat("[GROUPS] Received a reject invite notice."); | 381 | m_log.WarnFormat("[GROUPS] Received a reject invite notice."); |
382 | m_groupData.RemoveAgentToGroupInvite(inviteID); | 382 | m_groupData.RemoveAgentToGroupInvite(inviteID); |
383 | 383 | ||
384 | } | 384 | } |
385 | 385 | ||
386 | 386 | ||
387 | } | 387 | } |
388 | } | 388 | } |
389 | 389 | ||
390 | // Group notices | 390 | // Group notices |
391 | if ((im.dialog == (byte)InstantMessageDialog.GroupNotice)) | 391 | if ((im.dialog == (byte)InstantMessageDialog.GroupNotice)) |
392 | { | 392 | { |
393 | if (!m_GroupNoticesEnabled) | 393 | if (!m_GroupNoticesEnabled) |
394 | { | 394 | { |
395 | return; | 395 | return; |
396 | } | 396 | } |
397 | 397 | ||
398 | UUID GroupID = new UUID(im.toAgentID); | 398 | UUID GroupID = new UUID(im.toAgentID); |
399 | if( m_groupData.GetGroupRecord(GroupID, null) != null) | 399 | if( m_groupData.GetGroupRecord(GroupID, null) != null) |
400 | { | 400 | { |
401 | UUID NoticeID = UUID.Random(); | 401 | UUID NoticeID = UUID.Random(); |
402 | string Subject = im.message.Substring(0, im.message.IndexOf('|')); | 402 | string Subject = im.message.Substring(0, im.message.IndexOf('|')); |
403 | string Message = im.message.Substring(Subject.Length + 1); | 403 | string Message = im.message.Substring(Subject.Length + 1); |
404 | 404 | ||
405 | byte[] bucket; | 405 | byte[] bucket; |
406 | 406 | ||
407 | if ((im.binaryBucket.Length == 1) && (im.binaryBucket[0] == 0)) | 407 | if ((im.binaryBucket.Length == 1) && (im.binaryBucket[0] == 0)) |
408 | { | 408 | { |
409 | bucket = new byte[19]; | 409 | bucket = new byte[19]; |
410 | bucket[0] = 0; //dunno | 410 | bucket[0] = 0; //dunno |
411 | bucket[1] = 0; //dunno | 411 | bucket[1] = 0; //dunno |
412 | GroupID.ToBytes(bucket, 2); | 412 | GroupID.ToBytes(bucket, 2); |
413 | bucket[18] = 0; //dunno | 413 | bucket[18] = 0; //dunno |
414 | } | 414 | } |
415 | else | 415 | else |
416 | { | 416 | { |
417 | string binBucket = OpenMetaverse.Utils.BytesToString(im.binaryBucket); | 417 | string binBucket = OpenMetaverse.Utils.BytesToString(im.binaryBucket); |
418 | binBucket = binBucket.Remove(0, 14).Trim(); | 418 | binBucket = binBucket.Remove(0, 14).Trim(); |
419 | m_log.WarnFormat("I don't understand a group notice binary bucket of: {0}", binBucket); | 419 | m_log.WarnFormat("I don't understand a group notice binary bucket of: {0}", binBucket); |
420 | 420 | ||
421 | OSDMap binBucketOSD = (OSDMap)OSDParser.DeserializeLLSDXml(binBucket); | 421 | OSDMap binBucketOSD = (OSDMap)OSDParser.DeserializeLLSDXml(binBucket); |
422 | 422 | ||
423 | foreach (string key in binBucketOSD.Keys) | 423 | foreach (string key in binBucketOSD.Keys) |
424 | { | 424 | { |
425 | m_log.WarnFormat("{0}: {1}", key, binBucketOSD[key].ToString()); | 425 | m_log.WarnFormat("{0}: {1}", key, binBucketOSD[key].ToString()); |
426 | } | 426 | } |
427 | 427 | ||
428 | // treat as if no attachment | 428 | // treat as if no attachment |
429 | bucket = new byte[19]; | 429 | bucket = new byte[19]; |
430 | bucket[0] = 0; //dunno | 430 | bucket[0] = 0; //dunno |
431 | bucket[1] = 0; //dunno | 431 | bucket[1] = 0; //dunno |
432 | GroupID.ToBytes(bucket, 2); | 432 | GroupID.ToBytes(bucket, 2); |
433 | bucket[18] = 0; //dunno | 433 | bucket[18] = 0; //dunno |
434 | } | 434 | } |
435 | 435 | ||
436 | 436 | ||
437 | m_groupData.AddGroupNotice(GroupID, NoticeID, im.fromAgentName, Subject, Message, bucket); | 437 | m_groupData.AddGroupNotice(GroupID, NoticeID, im.fromAgentName, Subject, Message, bucket); |
438 | if (OnNewGroupNotice != null) | 438 | if (OnNewGroupNotice != null) |
439 | { | 439 | { |
440 | OnNewGroupNotice(GroupID, NoticeID); | 440 | OnNewGroupNotice(GroupID, NoticeID); |
441 | } | 441 | } |
442 | 442 | ||
443 | // Build notice IIM | 443 | // Build notice IIM |
444 | GridInstantMessage msg = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice); | 444 | GridInstantMessage msg = CreateGroupNoticeIM(UUID.Zero, NoticeID, (byte)OpenMetaverse.InstantMessageDialog.GroupNotice); |
445 | 445 | ||
446 | // Send notice out to everyone that wants notices | 446 | // Send notice out to everyone that wants notices |
447 | foreach( GroupMembersData member in m_groupData.GetGroupMembers(GroupID) ) | 447 | foreach( GroupMembersData member in m_groupData.GetGroupMembers(GroupID) ) |
448 | { | 448 | { |
449 | if( member.AcceptNotices ) | 449 | if( member.AcceptNotices ) |
450 | { | 450 | { |
451 | msg.toAgentID = member.AgentID.Guid; | 451 | msg.toAgentID = member.AgentID.Guid; |
452 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); | 452 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); |
453 | 453 | ||
454 | } | 454 | } |
455 | } | 455 | } |
456 | 456 | ||
457 | 457 | ||
458 | 458 | ||
459 | } | 459 | } |
460 | } | 460 | } |
461 | 461 | ||
462 | // Interop, received special 210 code for ejecting a group member | 462 | // Interop, received special 210 code for ejecting a group member |
463 | // this only works within the comms servers domain, and won't work hypergrid | 463 | // this only works within the comms servers domain, and won't work hypergrid |
464 | // TODO:FIXME: Use a presense server of some kind to find out where the | 464 | // TODO:FIXME: Use a presense server of some kind to find out where the |
465 | // client actually is, and try contacting that region directly to notify them, | 465 | // client actually is, and try contacting that region directly to notify them, |
466 | // or provide the notification via xmlrpc update queue | 466 | // or provide the notification via xmlrpc update queue |
467 | if ((im.dialog == 210)) | 467 | if ((im.dialog == 210)) |
468 | { | 468 | { |
469 | // This is sent from the region that the ejectee was ejected from | 469 | // This is sent from the region that the ejectee was ejected from |
470 | // if it's being delivered here, then the ejectee is here | 470 | // if it's being delivered here, then the ejectee is here |
471 | // so we need to send local updates to the agent. | 471 | // so we need to send local updates to the agent. |
472 | 472 | ||
473 | 473 | ||
474 | if (m_MsgTransferModule != null) | 474 | if (m_MsgTransferModule != null) |
475 | { | 475 | { |
476 | im.dialog = (byte)InstantMessageDialog.MessageFromAgent; | 476 | im.dialog = (byte)InstantMessageDialog.MessageFromAgent; |
477 | m_MsgTransferModule.SendInstantMessage(im, delegate(bool success) { }); | 477 | m_MsgTransferModule.SendInstantMessage(im, delegate(bool success) { }); |
478 | } | 478 | } |
479 | 479 | ||
480 | UUID ejecteeID = new UUID(im.toAgentID); | 480 | UUID ejecteeID = new UUID(im.toAgentID); |
481 | UUID groupID = new UUID(im.toAgentID); | 481 | UUID groupID = new UUID(im.toAgentID); |
482 | if (m_ActiveClients.ContainsKey(ejecteeID)) | 482 | if (m_ActiveClients.ContainsKey(ejecteeID)) |
483 | { | 483 | { |
484 | m_ActiveClients[ejecteeID].SendAgentDropGroup(groupID); | 484 | m_ActiveClients[ejecteeID].SendAgentDropGroup(groupID); |
485 | } | 485 | } |
486 | 486 | ||
487 | } | 487 | } |
488 | 488 | ||
489 | 489 | ||
490 | 490 | ||
491 | } | 491 | } |
492 | 492 | ||
493 | private void OnGridInstantMessage(GridInstantMessage msg) | 493 | private void OnGridInstantMessage(GridInstantMessage msg) |
494 | { | 494 | { |
495 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 495 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
496 | 496 | ||
497 | // Trigger the above event handler | 497 | // Trigger the above event handler |
498 | OnInstantMessage(null, msg); | 498 | OnInstantMessage(null, msg); |
499 | } | 499 | } |
500 | 500 | ||
501 | 501 | ||
502 | #endregion | 502 | #endregion |
503 | 503 | ||
504 | 504 | ||
505 | private void UpdateScenePresenceWithTitle(UUID AgentID, string Title) | 505 | private void UpdateScenePresenceWithTitle(UUID AgentID, string Title) |
506 | { | 506 | { |
507 | m_log.DebugFormat("[GROUPS] Updating scene title for {0} with title: {1}", AgentID, Title); | 507 | m_log.DebugFormat("[GROUPS] Updating scene title for {0} with title: {1}", AgentID, Title); |
508 | ScenePresence presence = null; | 508 | ScenePresence presence = null; |
509 | lock (m_SceneList) | 509 | lock (m_SceneList) |
510 | { | 510 | { |
511 | foreach (Scene scene in m_SceneList) | 511 | foreach (Scene scene in m_SceneList) |
512 | { | 512 | { |
513 | presence = scene.GetScenePresence(AgentID); | 513 | presence = scene.GetScenePresence(AgentID); |
514 | if (presence != null) | 514 | if (presence != null) |
515 | { | 515 | { |
516 | presence.Grouptitle = Title; | 516 | presence.Grouptitle = Title; |
517 | 517 | ||
518 | // FixMe: Ter suggests a "Schedule" method that I can't find. | 518 | // FixMe: Ter suggests a "Schedule" method that I can't find. |
519 | presence.SendFullUpdateToAllClients(); | 519 | presence.SendFullUpdateToAllClients(); |
520 | } | 520 | } |
521 | } | 521 | } |
522 | } | 522 | } |
523 | } | 523 | } |
524 | 524 | ||
525 | 525 | ||
526 | #region IGroupsModule Members | 526 | #region IGroupsModule Members |
527 | 527 | ||
528 | public event NewGroupNotice OnNewGroupNotice; | 528 | public event NewGroupNotice OnNewGroupNotice; |
529 | 529 | ||
530 | public GroupRecord GetGroupRecord(UUID GroupID) | 530 | public GroupRecord GetGroupRecord(UUID GroupID) |
531 | { | 531 | { |
532 | return m_groupData.GetGroupRecord(GroupID, null); | 532 | return m_groupData.GetGroupRecord(GroupID, null); |
533 | } | 533 | } |
534 | 534 | ||
535 | public void ActivateGroup(IClientAPI remoteClient, UUID groupID) | 535 | public void ActivateGroup(IClientAPI remoteClient, UUID groupID) |
536 | { | 536 | { |
537 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 537 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
538 | 538 | ||
539 | m_groupData.SetAgentActiveGroup(remoteClient.AgentId, groupID); | 539 | m_groupData.SetAgentActiveGroup(remoteClient.AgentId, groupID); |
540 | 540 | ||
541 | // UpdateClientWithGroupInfo(remoteClient); | 541 | // UpdateClientWithGroupInfo(remoteClient); |
542 | UpdateAllClientsWithGroupInfo(); | 542 | UpdateAllClientsWithGroupInfo(); |
543 | } | 543 | } |
544 | 544 | ||
545 | /// <summary> | 545 | /// <summary> |
546 | /// Get the Role Titles for an Agent, for a specific group | 546 | /// Get the Role Titles for an Agent, for a specific group |
547 | /// </summary> | 547 | /// </summary> |
548 | public List<GroupTitlesData> GroupTitlesRequest(IClientAPI remoteClient, UUID groupID) | 548 | public List<GroupTitlesData> GroupTitlesRequest(IClientAPI remoteClient, UUID groupID) |
549 | { | 549 | { |
550 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 550 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
551 | 551 | ||
552 | List<GroupRolesData> agentRoles = m_groupData.GetAgentGroupRoles(remoteClient.AgentId, groupID); | 552 | List<GroupRolesData> agentRoles = m_groupData.GetAgentGroupRoles(remoteClient.AgentId, groupID); |
553 | GroupMembershipData agentMembership = m_groupData.GetAgentGroupMembership(remoteClient.AgentId, groupID); | 553 | GroupMembershipData agentMembership = m_groupData.GetAgentGroupMembership(remoteClient.AgentId, groupID); |
554 | 554 | ||
555 | List<GroupTitlesData> titles = new List<GroupTitlesData>(); | 555 | List<GroupTitlesData> titles = new List<GroupTitlesData>(); |
556 | foreach (GroupRolesData role in agentRoles) | 556 | foreach (GroupRolesData role in agentRoles) |
557 | { | 557 | { |
558 | GroupTitlesData title = new GroupTitlesData(); | 558 | GroupTitlesData title = new GroupTitlesData(); |
559 | title.Name = role.Name; | 559 | title.Name = role.Name; |
560 | if (agentMembership != null) | 560 | if (agentMembership != null) |
561 | { | 561 | { |
562 | title.Selected = agentMembership.ActiveRole == role.RoleID; | 562 | title.Selected = agentMembership.ActiveRole == role.RoleID; |
563 | } | 563 | } |
564 | title.UUID = role.RoleID; | 564 | title.UUID = role.RoleID; |
565 | 565 | ||
566 | titles.Add(title); | 566 | titles.Add(title); |
567 | } | 567 | } |
568 | 568 | ||
569 | return titles; | 569 | return titles; |
570 | } | 570 | } |
571 | 571 | ||
572 | public List<GroupMembersData> GroupMembersRequest(IClientAPI remoteClient, UUID groupID) | 572 | public List<GroupMembersData> GroupMembersRequest(IClientAPI remoteClient, UUID groupID) |
573 | { | 573 | { |
574 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 574 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
575 | 575 | ||
576 | List<GroupMembersData> data = m_groupData.GetGroupMembers(groupID); | 576 | List<GroupMembersData> data = m_groupData.GetGroupMembers(groupID); |
577 | 577 | ||
578 | foreach (GroupMembersData member in data) | 578 | foreach (GroupMembersData member in data) |
579 | { | 579 | { |
580 | m_log.InfoFormat("[GROUPS] {0} {1}", member.AgentID, member.Title); | 580 | m_log.InfoFormat("[GROUPS] {0} {1}", member.AgentID, member.Title); |
581 | } | 581 | } |
582 | 582 | ||
583 | return data; | 583 | return data; |
584 | 584 | ||
585 | } | 585 | } |
586 | 586 | ||
587 | public List<GroupRolesData> GroupRoleDataRequest(IClientAPI remoteClient, UUID groupID) | 587 | public List<GroupRolesData> GroupRoleDataRequest(IClientAPI remoteClient, UUID groupID) |
588 | { | 588 | { |
589 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 589 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
590 | 590 | ||
591 | List<GroupRolesData> data = m_groupData.GetGroupRoles(groupID); | 591 | List<GroupRolesData> data = m_groupData.GetGroupRoles(groupID); |
592 | 592 | ||
593 | foreach (GroupRolesData member in data) | 593 | foreach (GroupRolesData member in data) |
594 | { | 594 | { |
595 | m_log.InfoFormat("[GROUPS] {0} {1}", member.Title, member.Members); | 595 | m_log.InfoFormat("[GROUPS] {0} {1}", member.Title, member.Members); |
596 | } | 596 | } |
597 | 597 | ||
598 | return data; | 598 | return data; |
599 | 599 | ||
600 | } | 600 | } |
601 | 601 | ||
602 | public List<GroupRoleMembersData> GroupRoleMembersRequest(IClientAPI remoteClient, UUID groupID) | 602 | public List<GroupRoleMembersData> GroupRoleMembersRequest(IClientAPI remoteClient, UUID groupID) |
603 | { | 603 | { |
604 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 604 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
605 | 605 | ||
606 | List<GroupRoleMembersData> data = m_groupData.GetGroupRoleMembers(groupID); | 606 | List<GroupRoleMembersData> data = m_groupData.GetGroupRoleMembers(groupID); |
607 | 607 | ||
608 | foreach (GroupRoleMembersData member in data) | 608 | foreach (GroupRoleMembersData member in data) |
609 | { | 609 | { |
610 | m_log.InfoFormat("[GROUPS] Av: {0} Role: {1}", member.MemberID, member.RoleID); | 610 | m_log.InfoFormat("[GROUPS] Av: {0} Role: {1}", member.MemberID, member.RoleID); |
611 | } | 611 | } |
612 | 612 | ||
613 | return data; | 613 | return data; |
614 | 614 | ||
615 | 615 | ||
616 | } | 616 | } |
617 | 617 | ||
618 | public GroupProfileData GroupProfileRequest(IClientAPI remoteClient, UUID groupID) | 618 | public GroupProfileData GroupProfileRequest(IClientAPI remoteClient, UUID groupID) |
619 | { | 619 | { |
620 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 620 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
621 | 621 | ||
622 | GroupProfileData profile = new GroupProfileData(); | 622 | GroupProfileData profile = new GroupProfileData(); |
623 | 623 | ||
624 | GroupRecord groupInfo = m_groupData.GetGroupRecord(groupID, null); | 624 | GroupRecord groupInfo = m_groupData.GetGroupRecord(groupID, null); |
625 | if (groupInfo != null) | 625 | if (groupInfo != null) |
626 | { | 626 | { |
627 | profile.AllowPublish = groupInfo.AllowPublish; | 627 | profile.AllowPublish = groupInfo.AllowPublish; |
628 | profile.Charter = groupInfo.Charter; | 628 | profile.Charter = groupInfo.Charter; |
629 | profile.FounderID = groupInfo.FounderID; | 629 | profile.FounderID = groupInfo.FounderID; |
630 | profile.GroupID = groupID; | 630 | profile.GroupID = groupID; |
631 | profile.GroupMembershipCount = m_groupData.GetGroupMembers(groupID).Count; | 631 | profile.GroupMembershipCount = m_groupData.GetGroupMembers(groupID).Count; |
632 | profile.GroupRolesCount = m_groupData.GetGroupRoles(groupID).Count; | 632 | profile.GroupRolesCount = m_groupData.GetGroupRoles(groupID).Count; |
633 | profile.InsigniaID = groupInfo.GroupPicture; | 633 | profile.InsigniaID = groupInfo.GroupPicture; |
634 | profile.MaturePublish = groupInfo.MaturePublish; | 634 | profile.MaturePublish = groupInfo.MaturePublish; |
635 | profile.MembershipFee = groupInfo.MembershipFee; | 635 | profile.MembershipFee = groupInfo.MembershipFee; |
636 | profile.Money = 0; // TODO: Get this from the currency server? | 636 | profile.Money = 0; // TODO: Get this from the currency server? |
637 | profile.Name = groupInfo.GroupName; | 637 | profile.Name = groupInfo.GroupName; |
638 | profile.OpenEnrollment = groupInfo.OpenEnrollment; | 638 | profile.OpenEnrollment = groupInfo.OpenEnrollment; |
639 | profile.OwnerRole = groupInfo.OwnerRoleID; | 639 | profile.OwnerRole = groupInfo.OwnerRoleID; |
640 | profile.ShowInList = groupInfo.ShowInList; | 640 | profile.ShowInList = groupInfo.ShowInList; |
641 | } | 641 | } |
642 | 642 | ||
643 | GroupMembershipData memberInfo = m_groupData.GetAgentGroupMembership(remoteClient.AgentId, groupID); | 643 | GroupMembershipData memberInfo = m_groupData.GetAgentGroupMembership(remoteClient.AgentId, groupID); |
644 | if (memberInfo != null) | 644 | if (memberInfo != null) |
645 | { | 645 | { |
646 | profile.MemberTitle = memberInfo.GroupTitle; | 646 | profile.MemberTitle = memberInfo.GroupTitle; |
647 | profile.PowersMask = memberInfo.GroupPowers; | 647 | profile.PowersMask = memberInfo.GroupPowers; |
648 | } | 648 | } |
649 | 649 | ||
650 | return profile; | 650 | return profile; |
651 | } | 651 | } |
652 | 652 | ||
653 | public GroupMembershipData[] GetMembershipData(UUID UserID) | 653 | public GroupMembershipData[] GetMembershipData(UUID UserID) |
654 | { | 654 | { |
655 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 655 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
656 | 656 | ||
657 | return m_groupData.GetAgentGroupMemberships(UserID).ToArray(); | 657 | return m_groupData.GetAgentGroupMemberships(UserID).ToArray(); |
658 | } | 658 | } |
659 | 659 | ||
660 | public GroupMembershipData GetMembershipData(UUID GroupID, UUID UserID) | 660 | public GroupMembershipData GetMembershipData(UUID GroupID, UUID UserID) |
661 | { | 661 | { |
662 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 662 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
663 | 663 | ||
664 | return m_groupData.GetAgentGroupMembership(UserID, GroupID); | 664 | return m_groupData.GetAgentGroupMembership(UserID, GroupID); |
665 | } | 665 | } |
666 | 666 | ||
667 | public void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) | 667 | public void UpdateGroupInfo(IClientAPI remoteClient, UUID groupID, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) |
668 | { | 668 | { |
669 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 669 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
670 | 670 | ||
671 | // TODO: Security Check? | 671 | // TODO: Security Check? |
672 | 672 | ||
673 | m_groupData.UpdateGroup(groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish); | 673 | m_groupData.UpdateGroup(groupID, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish); |
674 | } | 674 | } |
675 | 675 | ||
676 | public void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile) | 676 | public void SetGroupAcceptNotices(IClientAPI remoteClient, UUID groupID, bool acceptNotices, bool listInProfile) |
677 | { | 677 | { |
678 | // TODO: Security Check? | 678 | // TODO: Security Check? |
679 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 679 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
680 | 680 | ||
681 | m_groupData.SetAgentGroupInfo(remoteClient.AgentId, groupID, acceptNotices, listInProfile); | 681 | m_groupData.SetAgentGroupInfo(remoteClient.AgentId, groupID, acceptNotices, listInProfile); |
682 | } | 682 | } |
683 | 683 | ||
684 | public UUID CreateGroup(IClientAPI remoteClient, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) | 684 | public UUID CreateGroup(IClientAPI remoteClient, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, bool allowPublish, bool maturePublish) |
685 | { | 685 | { |
686 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 686 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
687 | 687 | ||
688 | if( m_groupData.GetGroupRecord(UUID.Zero, name) != null ) | 688 | if( m_groupData.GetGroupRecord(UUID.Zero, name) != null ) |
689 | { | 689 | { |
690 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "A group with the same name already exists."); | 690 | remoteClient.SendCreateGroupReply(UUID.Zero, false, "A group with the same name already exists."); |
691 | return UUID.Zero; | 691 | return UUID.Zero; |
692 | } | 692 | } |
693 | 693 | ||
694 | UUID GroupID = m_groupData.CreateGroup(name, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish, remoteClient.AgentId); | 694 | UUID GroupID = m_groupData.CreateGroup(name, charter, showInList, insigniaID, membershipFee, openEnrollment, allowPublish, maturePublish, remoteClient.AgentId); |
695 | 695 | ||
696 | remoteClient.SendCreateGroupReply(GroupID, true, "Group created successfullly"); | 696 | remoteClient.SendCreateGroupReply(GroupID, true, "Group created successfullly"); |
697 | 697 | ||
698 | UpdateClientWithGroupInfo(remoteClient); | 698 | UpdateClientWithGroupInfo(remoteClient); |
699 | 699 | ||
700 | return GroupID; | 700 | return GroupID; |
701 | } | 701 | } |
702 | 702 | ||
703 | public GroupNoticeData[] GroupNoticesListRequest(IClientAPI remoteClient, UUID GroupID) | 703 | public GroupNoticeData[] GroupNoticesListRequest(IClientAPI remoteClient, UUID GroupID) |
704 | { | 704 | { |
705 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 705 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
706 | 706 | ||
707 | // ToDo: check if agent is a member of group and is allowed to see notices? | 707 | // ToDo: check if agent is a member of group and is allowed to see notices? |
708 | 708 | ||
709 | return m_groupData.GetGroupNotices(GroupID).ToArray(); | 709 | return m_groupData.GetGroupNotices(GroupID).ToArray(); |
710 | } | 710 | } |
711 | 711 | ||
712 | /// <summary> | 712 | /// <summary> |
713 | /// Get the title of the agent's current role. | 713 | /// Get the title of the agent's current role. |
714 | /// </summary> | 714 | /// </summary> |
715 | public string GetGroupTitle(UUID avatarID) | 715 | public string GetGroupTitle(UUID avatarID) |
716 | { | 716 | { |
717 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 717 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
718 | 718 | ||
719 | GroupMembershipData membership = m_groupData.GetAgentActiveMembership(avatarID); | 719 | GroupMembershipData membership = m_groupData.GetAgentActiveMembership(avatarID); |
720 | if (membership != null) | 720 | if (membership != null) |
721 | { | 721 | { |
722 | return membership.GroupTitle; | 722 | return membership.GroupTitle; |
723 | } | 723 | } |
724 | return string.Empty; | 724 | return string.Empty; |
725 | } | 725 | } |
726 | 726 | ||
727 | /// <summary> | 727 | /// <summary> |
728 | /// Change the current Active Group Role for Agent | 728 | /// Change the current Active Group Role for Agent |
729 | /// </summary> | 729 | /// </summary> |
730 | public void GroupTitleUpdate(IClientAPI remoteClient, UUID GroupID, UUID TitleRoleID) | 730 | public void GroupTitleUpdate(IClientAPI remoteClient, UUID GroupID, UUID TitleRoleID) |
731 | { | 731 | { |
732 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 732 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
733 | 733 | ||
734 | m_groupData.SetAgentActiveGroupRole(remoteClient.AgentId, GroupID, TitleRoleID); | 734 | m_groupData.SetAgentActiveGroupRole(remoteClient.AgentId, GroupID, TitleRoleID); |
735 | 735 | ||
736 | UpdateAllClientsWithGroupInfo(); | 736 | UpdateAllClientsWithGroupInfo(); |
737 | } | 737 | } |
738 | 738 | ||
739 | 739 | ||
740 | public void GroupRoleUpdate(IClientAPI remoteClient, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, byte updateType) | 740 | public void GroupRoleUpdate(IClientAPI remoteClient, UUID groupID, UUID roleID, string name, string description, string title, ulong powers, byte updateType) |
741 | { | 741 | { |
742 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 742 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
743 | 743 | ||
744 | // TODO: Security Checks? | 744 | // TODO: Security Checks? |
745 | 745 | ||
746 | switch ((OpenMetaverse.GroupRoleUpdate)updateType) | 746 | switch ((OpenMetaverse.GroupRoleUpdate)updateType) |
747 | { | 747 | { |
748 | case OpenMetaverse.GroupRoleUpdate.Create: | 748 | case OpenMetaverse.GroupRoleUpdate.Create: |
749 | m_groupData.AddGroupRole(groupID, UUID.Random(), name, description, title, powers); | 749 | m_groupData.AddGroupRole(groupID, UUID.Random(), name, description, title, powers); |
750 | break; | 750 | break; |
751 | 751 | ||
752 | case OpenMetaverse.GroupRoleUpdate.Delete: | 752 | case OpenMetaverse.GroupRoleUpdate.Delete: |
753 | m_groupData.RemoveGroupRole(groupID, roleID); | 753 | m_groupData.RemoveGroupRole(groupID, roleID); |
754 | break; | 754 | break; |
755 | 755 | ||
756 | case OpenMetaverse.GroupRoleUpdate.UpdateAll: | 756 | case OpenMetaverse.GroupRoleUpdate.UpdateAll: |
757 | case OpenMetaverse.GroupRoleUpdate.UpdateData: | 757 | case OpenMetaverse.GroupRoleUpdate.UpdateData: |
758 | case OpenMetaverse.GroupRoleUpdate.UpdatePowers: | 758 | case OpenMetaverse.GroupRoleUpdate.UpdatePowers: |
759 | m_groupData.UpdateGroupRole(groupID, roleID, name, description, title, powers); | 759 | m_groupData.UpdateGroupRole(groupID, roleID, name, description, title, powers); |
760 | break; | 760 | break; |
761 | 761 | ||
762 | case OpenMetaverse.GroupRoleUpdate.NoUpdate: | 762 | case OpenMetaverse.GroupRoleUpdate.NoUpdate: |
763 | default: | 763 | default: |
764 | // No Op | 764 | // No Op |
765 | break; | 765 | break; |
766 | 766 | ||
767 | } | 767 | } |
768 | 768 | ||
769 | UpdateClientWithGroupInfo(remoteClient); | 769 | UpdateClientWithGroupInfo(remoteClient); |
770 | } | 770 | } |
771 | 771 | ||
772 | public void GroupRoleChanges(IClientAPI remoteClient, UUID groupID, UUID roleID, UUID memberID, uint changes) | 772 | public void GroupRoleChanges(IClientAPI remoteClient, UUID groupID, UUID roleID, UUID memberID, uint changes) |
773 | { | 773 | { |
774 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 774 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
775 | // Todo: Security check | 775 | // Todo: Security check |
776 | 776 | ||
777 | switch (changes) | 777 | switch (changes) |
778 | { | 778 | { |
779 | case 0: | 779 | case 0: |
780 | // Add | 780 | // Add |
781 | m_groupData.AddAgentToGroupRole(memberID, groupID, roleID); | 781 | m_groupData.AddAgentToGroupRole(memberID, groupID, roleID); |
782 | 782 | ||
783 | break; | 783 | break; |
784 | case 1: | 784 | case 1: |
785 | // Remove | 785 | // Remove |
786 | m_groupData.RemoveAgentFromGroupRole(memberID, groupID, roleID); | 786 | m_groupData.RemoveAgentFromGroupRole(memberID, groupID, roleID); |
787 | 787 | ||
788 | break; | 788 | break; |
789 | default: | 789 | default: |
790 | m_log.ErrorFormat("[GROUPS] {0} does not understand changes == {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, changes); | 790 | m_log.ErrorFormat("[GROUPS] {0} does not understand changes == {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, changes); |
791 | break; | 791 | break; |
792 | } | 792 | } |
793 | UpdateClientWithGroupInfo(remoteClient); | 793 | UpdateClientWithGroupInfo(remoteClient); |
794 | } | 794 | } |
795 | 795 | ||
796 | public void GroupNoticeRequest(IClientAPI remoteClient, UUID groupNoticeID) | 796 | public void GroupNoticeRequest(IClientAPI remoteClient, UUID groupNoticeID) |
797 | { | 797 | { |
798 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 798 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
799 | 799 | ||
800 | 800 | ||
801 | GroupNoticeInfo data = m_groupData.GetGroupNotice(groupNoticeID); | 801 | GroupNoticeInfo data = m_groupData.GetGroupNotice(groupNoticeID); |
802 | 802 | ||
803 | if (data != null) | 803 | if (data != null) |
804 | { | 804 | { |
805 | if (m_MsgTransferModule != null) | 805 | if (m_MsgTransferModule != null) |
806 | { | 806 | { |
807 | GridInstantMessage msg = new GridInstantMessage(); | 807 | GridInstantMessage msg = new GridInstantMessage(); |
808 | msg.imSessionID = UUID.Zero.Guid; | 808 | msg.imSessionID = UUID.Zero.Guid; |
809 | msg.fromAgentID = data.GroupID.Guid; | 809 | msg.fromAgentID = data.GroupID.Guid; |
810 | msg.toAgentID = remoteClient.AgentId.Guid; | 810 | msg.toAgentID = remoteClient.AgentId.Guid; |
811 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | 811 | msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); |
812 | msg.fromAgentName = "Group Notice From"; | 812 | msg.fromAgentName = "Group Notice From"; |
813 | msg.message = data.noticeData.Subject + "|" + data.Message; | 813 | msg.message = data.noticeData.Subject + "|" + data.Message; |
814 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNoticeRequested; | 814 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNoticeRequested; |
815 | msg.fromGroup = true; | 815 | msg.fromGroup = true; |
816 | msg.offline = (byte)0; | 816 | msg.offline = (byte)0; |
817 | msg.ParentEstateID = 0; | 817 | msg.ParentEstateID = 0; |
818 | msg.Position = Vector3.Zero; | 818 | msg.Position = Vector3.Zero; |
819 | msg.RegionID = UUID.Zero.Guid; | 819 | msg.RegionID = UUID.Zero.Guid; |
820 | msg.binaryBucket = data.BinaryBucket; | 820 | msg.binaryBucket = data.BinaryBucket; |
821 | 821 | ||
822 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); | 822 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { }); |
823 | } | 823 | } |
824 | } | 824 | } |
825 | 825 | ||
826 | } | 826 | } |
827 | 827 | ||
828 | public GridInstantMessage CreateGroupNoticeIM(UUID agentID, UUID groupNoticeID, byte dialog) | 828 | public GridInstantMessage CreateGroupNoticeIM(UUID agentID, UUID groupNoticeID, byte dialog) |
829 | { | 829 | { |
830 | m_log.WarnFormat("[GROUPS] {0} is probably not properly implemented", System.Reflection.MethodBase.GetCurrentMethod().Name); | 830 | m_log.WarnFormat("[GROUPS] {0} is probably not properly implemented", System.Reflection.MethodBase.GetCurrentMethod().Name); |
831 | 831 | ||
832 | GridInstantMessage msg = new GridInstantMessage(); | 832 | GridInstantMessage msg = new GridInstantMessage(); |
833 | msg.imSessionID = UUID.Zero.Guid; | 833 | msg.imSessionID = UUID.Zero.Guid; |
834 | msg.toAgentID = agentID.Guid; | 834 | msg.toAgentID = agentID.Guid; |
835 | msg.dialog = dialog; | 835 | msg.dialog = dialog; |
836 | // msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNotice; | 836 | // msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupNotice; |
837 | msg.fromGroup = true; | 837 | msg.fromGroup = true; |
838 | msg.offline = (byte)0; | 838 | msg.offline = (byte)0; |
839 | msg.ParentEstateID = 0; | 839 | msg.ParentEstateID = 0; |
840 | msg.Position = Vector3.Zero; | 840 | msg.Position = Vector3.Zero; |
841 | msg.RegionID = UUID.Zero.Guid; | 841 | msg.RegionID = UUID.Zero.Guid; |
842 | 842 | ||
843 | GroupNoticeInfo info = m_groupData.GetGroupNotice(groupNoticeID); | 843 | GroupNoticeInfo info = m_groupData.GetGroupNotice(groupNoticeID); |
844 | if (info != null) | 844 | if (info != null) |
845 | { | 845 | { |
846 | msg.fromAgentID = info.GroupID.Guid; | 846 | msg.fromAgentID = info.GroupID.Guid; |
847 | msg.timestamp = info.noticeData.Timestamp; | 847 | msg.timestamp = info.noticeData.Timestamp; |
848 | msg.fromAgentName = info.noticeData.FromName; | 848 | msg.fromAgentName = info.noticeData.FromName; |
849 | msg.message = info.noticeData.Subject + "|" + info.Message; | 849 | msg.message = info.noticeData.Subject + "|" + info.Message; |
850 | msg.binaryBucket = info.BinaryBucket; | 850 | msg.binaryBucket = info.BinaryBucket; |
851 | } | 851 | } |
852 | 852 | ||
853 | return msg; | 853 | return msg; |
854 | } | 854 | } |
855 | 855 | ||
856 | public void SendAgentGroupDataUpdate(IClientAPI remoteClient) | 856 | public void SendAgentGroupDataUpdate(IClientAPI remoteClient) |
857 | { | 857 | { |
858 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 858 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
859 | 859 | ||
860 | UpdateClientWithGroupInfo(remoteClient); | 860 | UpdateClientWithGroupInfo(remoteClient); |
861 | } | 861 | } |
862 | 862 | ||
863 | public void JoinGroupRequest(IClientAPI remoteClient, UUID groupID) | 863 | public void JoinGroupRequest(IClientAPI remoteClient, UUID groupID) |
864 | { | 864 | { |
865 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 865 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
866 | 866 | ||
867 | // Should check to see if OpenEnrollment, or if there's an outstanding invitation | 867 | // Should check to see if OpenEnrollment, or if there's an outstanding invitation |
868 | m_groupData.AddAgentToGroup(remoteClient.AgentId, groupID, UUID.Zero); | 868 | m_groupData.AddAgentToGroup(remoteClient.AgentId, groupID, UUID.Zero); |
869 | 869 | ||
870 | remoteClient.SendJoinGroupReply(groupID, true); | 870 | remoteClient.SendJoinGroupReply(groupID, true); |
871 | 871 | ||
872 | UpdateClientWithGroupInfo(remoteClient); | 872 | UpdateClientWithGroupInfo(remoteClient); |
873 | } | 873 | } |
874 | 874 | ||
875 | public void LeaveGroupRequest(IClientAPI remoteClient, UUID GroupID) | 875 | public void LeaveGroupRequest(IClientAPI remoteClient, UUID GroupID) |
876 | { | 876 | { |
877 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 877 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
878 | 878 | ||
879 | m_groupData.RemoveAgentFromGroup(remoteClient.AgentId, GroupID); | 879 | m_groupData.RemoveAgentFromGroup(remoteClient.AgentId, GroupID); |
880 | 880 | ||
881 | remoteClient.SendLeaveGroupReply(GroupID, true); | 881 | remoteClient.SendLeaveGroupReply(GroupID, true); |
882 | 882 | ||
883 | remoteClient.SendAgentDropGroup(GroupID); | 883 | remoteClient.SendAgentDropGroup(GroupID); |
884 | 884 | ||
885 | UpdateClientWithGroupInfo(remoteClient); | 885 | UpdateClientWithGroupInfo(remoteClient); |
886 | } | 886 | } |
887 | 887 | ||
888 | public void EjectGroupMemberRequest(IClientAPI remoteClient, UUID GroupID, UUID EjecteeID) | 888 | public void EjectGroupMemberRequest(IClientAPI remoteClient, UUID GroupID, UUID EjecteeID) |
889 | { | 889 | { |
890 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 890 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
891 | 891 | ||
892 | // Todo: Security check? | 892 | // Todo: Security check? |
893 | m_groupData.RemoveAgentFromGroup(EjecteeID, GroupID); | 893 | m_groupData.RemoveAgentFromGroup(EjecteeID, GroupID); |
894 | 894 | ||
895 | remoteClient.SendEjectGroupMemberReply(remoteClient.AgentId, GroupID, true); | 895 | remoteClient.SendEjectGroupMemberReply(remoteClient.AgentId, GroupID, true); |
896 | 896 | ||
897 | if (m_MsgTransferModule != null) | 897 | if (m_MsgTransferModule != null) |
898 | { | 898 | { |
899 | GroupRecord groupInfo = m_groupData.GetGroupRecord(GroupID, null); | 899 | GroupRecord groupInfo = m_groupData.GetGroupRecord(GroupID, null); |
900 | UserProfileData userProfile = m_SceneList[0].CommsManager.UserService.GetUserProfile(EjecteeID); | 900 | UserProfileData userProfile = m_SceneList[0].CommsManager.UserService.GetUserProfile(EjecteeID); |
901 | 901 | ||
902 | if ((groupInfo == null) || (userProfile == null)) | 902 | if ((groupInfo == null) || (userProfile == null)) |
903 | { | 903 | { |
904 | return; | 904 | return; |
905 | } | 905 | } |
906 | 906 | ||
907 | 907 | ||
908 | // Send Message to Ejectee | 908 | // Send Message to Ejectee |
909 | GridInstantMessage msg = new GridInstantMessage(); | 909 | GridInstantMessage msg = new GridInstantMessage(); |
910 | 910 | ||
911 | msg.imSessionID = UUID.Zero.Guid; | 911 | msg.imSessionID = UUID.Zero.Guid; |
912 | msg.fromAgentID = remoteClient.AgentId.Guid; | 912 | msg.fromAgentID = remoteClient.AgentId.Guid; |
913 | // msg.fromAgentID = info.GroupID; | 913 | // msg.fromAgentID = info.GroupID; |
914 | msg.toAgentID = EjecteeID.Guid; | 914 | msg.toAgentID = EjecteeID.Guid; |
915 | //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | 915 | //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); |
916 | msg.timestamp = 0; | 916 | msg.timestamp = 0; |
917 | msg.fromAgentName = remoteClient.Name; | 917 | msg.fromAgentName = remoteClient.Name; |
918 | msg.message = string.Format("You have been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName); | 918 | msg.message = string.Format("You have been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName); |
919 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.MessageFromAgent; | 919 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.MessageFromAgent; |
920 | msg.fromGroup = false; | 920 | msg.fromGroup = false; |
921 | msg.offline = (byte)0; | 921 | msg.offline = (byte)0; |
922 | msg.ParentEstateID = 0; | 922 | msg.ParentEstateID = 0; |
923 | msg.Position = Vector3.Zero; | 923 | msg.Position = Vector3.Zero; |
924 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; | 924 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; |
925 | msg.binaryBucket = new byte[0]; | 925 | msg.binaryBucket = new byte[0]; |
926 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { m_log.DebugFormat("[GROUPS] Message Sent Success: {0}", success,ToString()); }); | 926 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { m_log.DebugFormat("[GROUPS] Message Sent Success: {0}", success,ToString()); }); |
927 | 927 | ||
928 | 928 | ||
929 | // Message to ejector | 929 | // Message to ejector |
930 | // Interop, received special 210 code for ejecting a group member | 930 | // Interop, received special 210 code for ejecting a group member |
931 | // this only works within the comms servers domain, and won't work hypergrid | 931 | // this only works within the comms servers domain, and won't work hypergrid |
932 | // TODO:FIXME: Use a presense server of some kind to find out where the | 932 | // TODO:FIXME: Use a presense server of some kind to find out where the |
933 | // client actually is, and try contacting that region directly to notify them, | 933 | // client actually is, and try contacting that region directly to notify them, |
934 | // or provide the notification via xmlrpc update queue | 934 | // or provide the notification via xmlrpc update queue |
935 | 935 | ||
936 | msg = new GridInstantMessage(); | 936 | msg = new GridInstantMessage(); |
937 | msg.imSessionID = UUID.Zero.Guid; | 937 | msg.imSessionID = UUID.Zero.Guid; |
938 | msg.fromAgentID = remoteClient.AgentId.Guid; | 938 | msg.fromAgentID = remoteClient.AgentId.Guid; |
939 | msg.toAgentID = remoteClient.AgentId.Guid; | 939 | msg.toAgentID = remoteClient.AgentId.Guid; |
940 | msg.timestamp = 0; | 940 | msg.timestamp = 0; |
941 | msg.fromAgentName = remoteClient.Name; | 941 | msg.fromAgentName = remoteClient.Name; |
942 | if (userProfile != null) | 942 | if (userProfile != null) |
943 | { | 943 | { |
944 | msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName, userProfile.Name); | 944 | msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName, userProfile.Name); |
945 | } | 945 | } |
946 | else | 946 | else |
947 | { | 947 | { |
948 | msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName, "Unknown member"); | 948 | msg.message = string.Format("{2} has been ejected from '{1}' by {0}.", remoteClient.Name, groupInfo.GroupName, "Unknown member"); |
949 | } | 949 | } |
950 | msg.dialog = (byte)210; //interop | 950 | msg.dialog = (byte)210; //interop |
951 | msg.fromGroup = false; | 951 | msg.fromGroup = false; |
952 | msg.offline = (byte)0; | 952 | msg.offline = (byte)0; |
953 | msg.ParentEstateID = 0; | 953 | msg.ParentEstateID = 0; |
954 | msg.Position = Vector3.Zero; | 954 | msg.Position = Vector3.Zero; |
955 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; | 955 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; |
956 | msg.binaryBucket = new byte[0]; | 956 | msg.binaryBucket = new byte[0]; |
957 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { m_log.DebugFormat("[GROUPS] Message Sent Success: {0}", success, ToString()); }); | 957 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { m_log.DebugFormat("[GROUPS] Message Sent Success: {0}", success, ToString()); }); |
958 | 958 | ||
959 | 959 | ||
960 | 960 | ||
961 | } | 961 | } |
962 | 962 | ||
963 | 963 | ||
964 | UpdateAllClientsWithGroupInfo(); | 964 | UpdateAllClientsWithGroupInfo(); |
965 | } | 965 | } |
966 | 966 | ||
967 | public void InviteGroupRequest(IClientAPI remoteClient, UUID GroupID, UUID InvitedAgentID, UUID RoleID) | 967 | public void InviteGroupRequest(IClientAPI remoteClient, UUID GroupID, UUID InvitedAgentID, UUID RoleID) |
968 | { | 968 | { |
969 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 969 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
970 | m_log.WarnFormat("[GROUPS] GID {0}, AID {1}, RID {2} ", GroupID, InvitedAgentID, RoleID); | 970 | m_log.WarnFormat("[GROUPS] GID {0}, AID {1}, RID {2} ", GroupID, InvitedAgentID, RoleID); |
971 | 971 | ||
972 | // Todo: Security check, probably also want to send some kind of notification | 972 | // Todo: Security check, probably also want to send some kind of notification |
973 | UUID InviteID = UUID.Random(); | 973 | UUID InviteID = UUID.Random(); |
974 | m_log.WarnFormat("[GROUPS] Invite ID: {0}", InviteID); | 974 | m_log.WarnFormat("[GROUPS] Invite ID: {0}", InviteID); |
975 | m_groupData.AddAgentToGroupInvite(InviteID, GroupID, RoleID, InvitedAgentID); | 975 | m_groupData.AddAgentToGroupInvite(InviteID, GroupID, RoleID, InvitedAgentID); |
976 | 976 | ||
977 | if (m_MsgTransferModule != null) | 977 | if (m_MsgTransferModule != null) |
978 | { | 978 | { |
979 | Guid inviteUUID = InviteID.Guid; | 979 | Guid inviteUUID = InviteID.Guid; |
980 | 980 | ||
981 | GridInstantMessage msg = new GridInstantMessage(); | 981 | GridInstantMessage msg = new GridInstantMessage(); |
982 | 982 | ||
983 | msg.imSessionID = inviteUUID; | 983 | msg.imSessionID = inviteUUID; |
984 | 984 | ||
985 | // msg.fromAgentID = remoteClient.AgentId.Guid; | 985 | // msg.fromAgentID = remoteClient.AgentId.Guid; |
986 | msg.fromAgentID = GroupID.Guid; | 986 | msg.fromAgentID = GroupID.Guid; |
987 | msg.toAgentID = InvitedAgentID.Guid; | 987 | msg.toAgentID = InvitedAgentID.Guid; |
988 | //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); | 988 | //msg.timestamp = (uint)Util.UnixTimeSinceEpoch(); |
989 | msg.timestamp = 0; | 989 | msg.timestamp = 0; |
990 | msg.fromAgentName = remoteClient.Name; | 990 | msg.fromAgentName = remoteClient.Name; |
991 | msg.message = string.Format("{0} has invited you to join a group. There is no cost to join this group.", remoteClient.Name); | 991 | msg.message = string.Format("{0} has invited you to join a group. There is no cost to join this group.", remoteClient.Name); |
992 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupInvitation; | 992 | msg.dialog = (byte)OpenMetaverse.InstantMessageDialog.GroupInvitation; |
993 | msg.fromGroup = true; | 993 | msg.fromGroup = true; |
994 | msg.offline = (byte)0; | 994 | msg.offline = (byte)0; |
995 | msg.ParentEstateID = 0; | 995 | msg.ParentEstateID = 0; |
996 | msg.Position = Vector3.Zero; | 996 | msg.Position = Vector3.Zero; |
997 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; | 997 | msg.RegionID = remoteClient.Scene.RegionInfo.RegionID.Guid; |
998 | msg.binaryBucket = new byte[20]; | 998 | msg.binaryBucket = new byte[20]; |
999 | 999 | ||
1000 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { m_log.DebugFormat("[GROUPS] Message Sent Success: {0}", success,ToString()); }); | 1000 | m_MsgTransferModule.SendInstantMessage(msg, delegate(bool success) { m_log.DebugFormat("[GROUPS] Message Sent Success: {0}", success,ToString()); }); |
1001 | } | 1001 | } |
1002 | } | 1002 | } |
1003 | 1003 | ||
1004 | #endregion | 1004 | #endregion |
1005 | 1005 | ||
1006 | void SendGroupMembershipInfoViaCaps(IClientAPI remoteClient, GroupMembershipData[] data) | 1006 | void SendGroupMembershipInfoViaCaps(IClientAPI remoteClient, GroupMembershipData[] data) |
1007 | { | 1007 | { |
1008 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); | 1008 | if (m_debugEnabled) m_log.InfoFormat("[GROUPS] {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); |
1009 | 1009 | ||
1010 | OSDArray AgentData = new OSDArray(1); | 1010 | OSDArray AgentData = new OSDArray(1); |
1011 | OSDMap AgentDataMap = new OSDMap(1); | 1011 | OSDMap AgentDataMap = new OSDMap(1); |
1012 | AgentDataMap.Add("AgentID", OSD.FromUUID(remoteClient.AgentId)); | 1012 | AgentDataMap.Add("AgentID", OSD.FromUUID(remoteClient.AgentId)); |
1013 | AgentData.Add(AgentDataMap); | 1013 | AgentData.Add(AgentDataMap); |
1014 | 1014 | ||
1015 | 1015 | ||
1016 | OSDArray GroupData = new OSDArray(data.Length); | 1016 | OSDArray GroupData = new OSDArray(data.Length); |
1017 | OSDArray NewGroupData = new OSDArray(data.Length); | 1017 | OSDArray NewGroupData = new OSDArray(data.Length); |
1018 | 1018 | ||
1019 | foreach (GroupMembershipData membership in data) | 1019 | foreach (GroupMembershipData membership in data) |
1020 | { | 1020 | { |
1021 | OSDMap GroupDataMap = new OSDMap(6); | 1021 | OSDMap GroupDataMap = new OSDMap(6); |
1022 | OSDMap NewGroupDataMap = new OSDMap(1); | 1022 | OSDMap NewGroupDataMap = new OSDMap(1); |
1023 | 1023 | ||
1024 | GroupDataMap.Add("GroupID", OSD.FromUUID(membership.GroupID)); | 1024 | GroupDataMap.Add("GroupID", OSD.FromUUID(membership.GroupID)); |
1025 | GroupDataMap.Add("GroupPowers", OSD.FromBinary(membership.GroupPowers)); | 1025 | GroupDataMap.Add("GroupPowers", OSD.FromBinary(membership.GroupPowers)); |
1026 | GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(membership.AcceptNotices)); | 1026 | GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(membership.AcceptNotices)); |
1027 | GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(membership.GroupPicture)); | 1027 | GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(membership.GroupPicture)); |
1028 | GroupDataMap.Add("Contribution", OSD.FromInteger(membership.Contribution)); | 1028 | GroupDataMap.Add("Contribution", OSD.FromInteger(membership.Contribution)); |
1029 | GroupDataMap.Add("GroupName", OSD.FromString(membership.GroupName)); | 1029 | GroupDataMap.Add("GroupName", OSD.FromString(membership.GroupName)); |
1030 | NewGroupDataMap.Add("ListInProfile", OSD.FromBoolean(membership.ListInProfile)); | 1030 | NewGroupDataMap.Add("ListInProfile", OSD.FromBoolean(membership.ListInProfile)); |
1031 | 1031 | ||
1032 | GroupData.Add(GroupDataMap); | 1032 | GroupData.Add(GroupDataMap); |
1033 | NewGroupData.Add(NewGroupDataMap); | 1033 | NewGroupData.Add(NewGroupDataMap); |
1034 | } | 1034 | } |
1035 | 1035 | ||
1036 | OSDMap llDataStruct = new OSDMap(3); | 1036 | OSDMap llDataStruct = new OSDMap(3); |
1037 | llDataStruct.Add("AgentData", AgentData); | 1037 | llDataStruct.Add("AgentData", AgentData); |
1038 | llDataStruct.Add("GroupData", GroupData); | 1038 | llDataStruct.Add("GroupData", GroupData); |
1039 | llDataStruct.Add("NewGroupData", NewGroupData); | 1039 | llDataStruct.Add("NewGroupData", NewGroupData); |
1040 | 1040 | ||
1041 | IEventQueue queue = remoteClient.Scene.RequestModuleInterface<IEventQueue>(); | 1041 | IEventQueue queue = remoteClient.Scene.RequestModuleInterface<IEventQueue>(); |
1042 | 1042 | ||
1043 | if (queue != null) | 1043 | if (queue != null) |
1044 | { | 1044 | { |
1045 | queue.Enqueue(EventQueueHelper.buildEvent("AgentGroupDataUpdate", llDataStruct), remoteClient.AgentId); | 1045 | queue.Enqueue(EventQueueHelper.buildEvent("AgentGroupDataUpdate", llDataStruct), remoteClient.AgentId); |
1046 | } | 1046 | } |
1047 | 1047 | ||
1048 | } | 1048 | } |
1049 | } | 1049 | } |
1050 | 1050 | ||
1051 | } | 1051 | } |