public bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) { if (m_log.IsDebugEnabled) { m_log.DebugFormat("{0} called", System.Reflection.MethodBase.GetCurrentMethod().Name); } string url = string.Empty, gname = string.Empty; if (IsLocal(groupID, out url, out gname)) { if (m_LocalGroupsConnector.AddGroupNotice(AgentUUI(RequestingAgentID), groupID, noticeID, fromName, subject, message, hasAttachment, attType, attName, attItemID, AgentUUI(attOwnerID))) { // then send the notice to every grid for which there are members in this group List <GroupMembersData> members = m_LocalGroupsConnector.GetGroupMembers(AgentUUI(RequestingAgentID), groupID); List <string> urls = new List <string>(); foreach (GroupMembersData m in members) { if (!m_UserManagement.IsLocalGridUser(m.AgentID)) { string gURL = m_UserManagement.GetUserServerURL(m.AgentID, "GroupsServerURI"); if (!urls.Contains(gURL)) { urls.Add(gURL); } } } // so we have the list of urls to send the notice to // this may take a long time... Util.FireAndForget(delegate { foreach (string u in urls) { GroupsServiceHGConnector c = GetConnector(u); if (c != null) { c.AddNotice(AgentUUIForOutside(RequestingAgentID), groupID, noticeID, fromName, subject, message, hasAttachment, attType, attName, attItemID, AgentUUIForOutside(attOwnerID)); } } }); return(true); } return(false); } else { return(false); } }