diff --git a/OpenSim/Addons/Groups/GroupsModule.cs b/OpenSim/Addons/Groups/GroupsModule.cs index 1a83f5bcbc..f24670af89 100644 --- a/OpenSim/Addons/Groups/GroupsModule.cs +++ b/OpenSim/Addons/Groups/GroupsModule.cs @@ -1245,7 +1245,8 @@ namespace OpenSim.Groups SendDataUpdate(remoteClient, tellOthers); GroupMembershipData[] membershipArray = GetProfileListedGroupMemberships(remoteClient, agentID); - remoteClient.SendAgentGroupDataUpdate(agentID, membershipArray); + IEventQueue eq = remoteClient.Scene.RequestModuleInterface(); + eq.GroupMembershipData(GetRequestingAgentID(remoteClient), membershipArray); remoteClient.RefreshGroupMembership(); } diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs index feb332258e..9a1cef40fd 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueGetModule.cs @@ -585,6 +585,12 @@ namespace OpenSim.Region.ClientStack.Linden Enqueue(item, avatarID); } + public void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) + { + OSD item = EventQueueHelper.GroupMembershipData(receiverAgent, data); + Enqueue(item, receiverAgent); + } + public void QueryReply(PlacesReplyPacket groupUpdate, UUID avatarID) { OSD item = EventQueueHelper.PlacesQuery(groupUpdate); diff --git a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs index 799ad0b56e..2344fc661e 100644 --- a/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs +++ b/OpenSim/Region/ClientStack/Linden/Caps/EventQueue/EventQueueHelper.cs @@ -32,6 +32,8 @@ using OpenMetaverse.Packets; using OpenMetaverse.StructuredData; using OpenMetaverse.Messages.Linden; +using OpenSim.Framework; + namespace OpenSim.Region.ClientStack.Linden { public class EventQueueHelper @@ -364,7 +366,53 @@ namespace OpenSim.Region.ClientStack.Linden return groupUpdate; } - + + public static OSD GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) + { + OSDArray AgentData = new OSDArray(1); + OSDMap AgentDataMap = new OSDMap(1); + AgentDataMap.Add("AgentID", OSD.FromUUID(receiverAgent)); + AgentData.Add(AgentDataMap); + + OSDArray GroupData = new OSDArray(data.Length); + OSDArray NewGroupData = new OSDArray(data.Length); + + foreach (GroupMembershipData membership in data) + { + //if (receiverAgent != dataForAgentID) + //{ + // if (!membership.ListInProfile) + // { + // // If we're sending group info to remoteclient about another agent, + // // filter out groups the other agent doesn't want to share. + // continue; + // } + //} + + OSDMap GroupDataMap = new OSDMap(6); + OSDMap NewGroupDataMap = new OSDMap(1); + + GroupDataMap.Add("GroupID", OSD.FromUUID(membership.GroupID)); + GroupDataMap.Add("GroupPowers", OSD.FromULong(membership.GroupPowers)); + GroupDataMap.Add("AcceptNotices", OSD.FromBoolean(membership.AcceptNotices)); + GroupDataMap.Add("GroupInsigniaID", OSD.FromUUID(membership.GroupPicture)); + GroupDataMap.Add("Contribution", OSD.FromInteger(membership.Contribution)); + GroupDataMap.Add("GroupName", OSD.FromString(membership.GroupName)); + NewGroupDataMap.Add("ListInProfile", OSD.FromBoolean(membership.ListInProfile)); + + GroupData.Add(GroupDataMap); + NewGroupData.Add(NewGroupDataMap); + } + + OSDMap llDataStruct = new OSDMap(3); + llDataStruct.Add("AgentData", AgentData); + llDataStruct.Add("GroupData", GroupData); + llDataStruct.Add("NewGroupData", NewGroupData); + + return BuildEvent("AgentGroupDataUpdate", llDataStruct); + + } + public static OSD PlacesQuery(PlacesReplyPacket PlacesReply) { OSDMap placesReply = new OSDMap(); diff --git a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs index dfc269e302..f4014db897 100644 --- a/OpenSim/Region/Framework/Interfaces/IEventQueue.cs +++ b/OpenSim/Region/Framework/Interfaces/IEventQueue.cs @@ -30,6 +30,7 @@ using OpenMetaverse; using OpenMetaverse.Packets; using OpenMetaverse.Messages.Linden; using OpenMetaverse.StructuredData; +using OpenSim.Framework; namespace OpenSim.Region.Framework.Interfaces { @@ -58,6 +59,7 @@ namespace OpenSim.Region.Framework.Interfaces bool isModerator, bool textMute); void ParcelProperties(ParcelPropertiesMessage parcelPropertiesMessage, UUID avatarID); void GroupMembership(AgentGroupDataUpdatePacket groupUpdate, UUID avatarID); + void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data); OSD ScriptRunningEvent(UUID objectID, UUID itemID, bool running, bool mono); OSD BuildEvent(string eventName, OSD eventBody); void partPhysicsProperties(uint localID, byte physhapetype, float density, float friction, float bounce, float gravmod, UUID avatarID); diff --git a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs index 613748d6a7..5dfbe2cbd8 100644 --- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs +++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs @@ -1372,7 +1372,8 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups SendDataUpdate(remoteClient, tellOthers); GroupMembershipData[] membershipArray = GetProfileListedGroupMemberships(remoteClient, agentID); - remoteClient.SendAgentGroupDataUpdate(agentID, membershipArray); + IEventQueue eq = remoteClient.Scene.RequestModuleInterface(); + eq.GroupMembershipData(GetRequestingAgentID(remoteClient), membershipArray); remoteClient.RefreshGroupMembership(); } diff --git a/OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs b/OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs index f2bae5876d..332d59c45d 100644 --- a/OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs +++ b/OpenSim/Tests/Common/Mock/TestEventQueueGetModule.cs @@ -162,6 +162,11 @@ namespace OpenSim.Tests.Common AddEvent(avatarID, "GroupMembership", groupUpdate); } + public void GroupMembershipData(UUID receiverAgent, GroupMembershipData[] data) + { + AddEvent(receiverAgent, "AgentGroupDataUpdate", data); + } + public OSD ScriptRunningEvent (UUID objectID, UUID itemID, bool running, bool mono) { Console.WriteLine("ONE");