aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Addons/Groups
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2014-03-11 00:11:18 +0000
committerJustin Clark-Casey (justincc)2014-03-11 00:11:18 +0000
commit77e7bbcbf753018074211ca8358c642dd7204f42 (patch)
treeac9b00f652a34d9b7d15a442c86d6de5231144fa /OpenSim/Addons/Groups
parentRemove try/catch in LandManagmentModule.GetLandObject() - this is very old co... (diff)
downloadopensim-SC-77e7bbcbf753018074211ca8358c642dd7204f42.zip
opensim-SC-77e7bbcbf753018074211ca8358c642dd7204f42.tar.gz
opensim-SC-77e7bbcbf753018074211ca8358c642dd7204f42.tar.bz2
opensim-SC-77e7bbcbf753018074211ca8358c642dd7204f42.tar.xz
Send group notices through the same messaging module mechanism used to send group chat to avoid timeout issues when sending messages to large groups.
Only implementing for XmlRpcGroups initially to test. May require MessageOnlineUsersOnly = true in [Groups] to be effective. In relation to http://opensimulator.org/mantis/view.php?id=7037
Diffstat (limited to 'OpenSim/Addons/Groups')
-rw-r--r--OpenSim/Addons/Groups/GroupsMessagingModule.cs29
-rw-r--r--OpenSim/Addons/Groups/GroupsModule.cs4
2 files changed, 24 insertions, 9 deletions
diff --git a/OpenSim/Addons/Groups/GroupsMessagingModule.cs b/OpenSim/Addons/Groups/GroupsMessagingModule.cs
index be59c62..f701e48 100644
--- a/OpenSim/Addons/Groups/GroupsMessagingModule.cs
+++ b/OpenSim/Addons/Groups/GroupsMessagingModule.cs
@@ -172,10 +172,8 @@ namespace OpenSim.Groups
172 return; 172 return;
173 } 173 }
174 174
175
176 if (m_presenceService == null) 175 if (m_presenceService == null)
177 m_presenceService = scene.PresenceService; 176 m_presenceService = scene.PresenceService;
178
179 } 177 }
180 178
181 public void RemoveRegion(Scene scene) 179 public void RemoveRegion(Scene scene)
@@ -222,7 +220,6 @@ namespace OpenSim.Groups
222 220
223 #endregion 221 #endregion
224 222
225
226 /// <summary> 223 /// <summary>
227 /// Not really needed, but does confirm that the group exists. 224 /// Not really needed, but does confirm that the group exists.
228 /// </summary> 225 /// </summary>
@@ -242,9 +239,14 @@ namespace OpenSim.Groups
242 return false; 239 return false;
243 } 240 }
244 } 241 }
245 242
246 public void SendMessageToGroup(GridInstantMessage im, UUID groupID) 243 public void SendMessageToGroup(GridInstantMessage im, UUID groupID)
247 { 244 {
245 SendMessageToGroup(im, groupID, null);
246 }
247
248 public void SendMessageToGroup(GridInstantMessage im, UUID groupID, Func<GroupMembersData, bool> sendCondition)
249 {
248 UUID fromAgentID = new UUID(im.fromAgentID); 250 UUID fromAgentID = new UUID(im.fromAgentID);
249 List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(UUID.Zero.ToString(), groupID); 251 List<GroupMembersData> groupMembers = m_groupData.GetGroupMembers(UUID.Zero.ToString(), groupID);
250 int groupMembersCount = groupMembers.Count; 252 int groupMembersCount = groupMembers.Count;
@@ -299,12 +301,27 @@ namespace OpenSim.Groups
299 301
300 if (clientsAlreadySent.Contains(member.AgentID)) 302 if (clientsAlreadySent.Contains(member.AgentID))
301 continue; 303 continue;
304
302 clientsAlreadySent.Add(member.AgentID); 305 clientsAlreadySent.Add(member.AgentID);
303 306
304 if (hasAgentDroppedGroupChatSession(member.AgentID.ToString(), groupID)) 307 if (sendCondition != null)
308 {
309 if (!sendCondition(member))
310 {
311 if (m_debugEnabled)
312 m_log.DebugFormat(
313 "[Groups.Messaging]: Not sending to {0} as they do not fulfill send condition",
314 member.AgentID);
315
316 continue;
317 }
318 }
319 else if (hasAgentDroppedGroupChatSession(member.AgentID.ToString(), groupID))
305 { 320 {
306 // Don't deliver messages to people who have dropped this session 321 // Don't deliver messages to people who have dropped this session
307 if (m_debugEnabled) m_log.DebugFormat("[Groups.Messaging]: {0} has dropped session, not delivering to them", member.AgentID); 322 if (m_debugEnabled)
323 m_log.DebugFormat("[Groups.Messaging]: {0} has dropped session, not delivering to them", member.AgentID);
324
308 continue; 325 continue;
309 } 326 }
310 327
diff --git a/OpenSim/Addons/Groups/GroupsModule.cs b/OpenSim/Addons/Groups/GroupsModule.cs
index b0493fa..7f453db 100644
--- a/OpenSim/Addons/Groups/GroupsModule.cs
+++ b/OpenSim/Addons/Groups/GroupsModule.cs
@@ -45,9 +45,6 @@ namespace OpenSim.Groups
45 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsModule")] 45 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "GroupsModule")]
46 public class GroupsModule : ISharedRegionModule, IGroupsModule 46 public class GroupsModule : ISharedRegionModule, IGroupsModule
47 { 47 {
48 /// <summary>
49 /// </summary>
50
51 private static readonly ILog m_log = 48 private static readonly ILog m_log =
52 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 49 LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
53 50
@@ -466,6 +463,7 @@ namespace OpenSim.Groups
466 OnNewGroupNotice(GroupID, NoticeID); 463 OnNewGroupNotice(GroupID, NoticeID);
467 } 464 }
468 465
466
469 // Send notice out to everyone that wants notices 467 // Send notice out to everyone that wants notices
470 foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetRequestingAgentIDStr(remoteClient), GroupID)) 468 foreach (GroupMembersData member in m_groupData.GetGroupMembers(GetRequestingAgentIDStr(remoteClient), GroupID))
471 { 469 {