From aa744eecf2bc474509a1703028d681b27111ce84 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 1 Jul 2016 18:19:09 +0100 Subject: add a few methods to modify clientview group powers --- .../Region/ClientStack/Linden/UDP/LLClientView.cs | 89 ++++++++++++++++------ 1 file changed, 65 insertions(+), 24 deletions(-) (limited to 'OpenSim/Region/ClientStack') diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 12f6fbd..16cb4ac 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -2755,29 +2755,34 @@ namespace OpenSim.Region.ClientStack.LindenUDP public void SendGroupMembership(GroupMembershipData[] GroupMembership) { - m_groupPowers.Clear(); + // maybe removed in future, use SendAgentGroupDataUpdate instead ( but make sure to update groupPowers ) AgentGroupDataUpdatePacket Groupupdate = new AgentGroupDataUpdatePacket(); AgentGroupDataUpdatePacket.GroupDataBlock[] Groups = new AgentGroupDataUpdatePacket.GroupDataBlock[GroupMembership.Length]; - for (int i = 0; i < GroupMembership.Length; i++) - { - m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; - AgentGroupDataUpdatePacket.GroupDataBlock Group = new AgentGroupDataUpdatePacket.GroupDataBlock(); - Group.AcceptNotices = GroupMembership[i].AcceptNotices; - Group.Contribution = GroupMembership[i].Contribution; - Group.GroupID = GroupMembership[i].GroupID; - Group.GroupInsigniaID = GroupMembership[i].GroupPicture; - Group.GroupName = Util.StringToBytes256(GroupMembership[i].GroupName); - Group.GroupPowers = GroupMembership[i].GroupPowers; - Groups[i] = Group; + lock(m_groupPowers) + { + m_groupPowers.Clear(); + for (int i = 0; i < GroupMembership.Length; i++) + { + m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; + AgentGroupDataUpdatePacket.GroupDataBlock Group = new AgentGroupDataUpdatePacket.GroupDataBlock(); + Group.AcceptNotices = GroupMembership[i].AcceptNotices; + Group.Contribution = GroupMembership[i].Contribution; + Group.GroupID = GroupMembership[i].GroupID; + Group.GroupInsigniaID = GroupMembership[i].GroupPicture; + Group.GroupName = Util.StringToBytes256(GroupMembership[i].GroupName); + Group.GroupPowers = GroupMembership[i].GroupPowers; + Groups[i] = Group; + } } + Groupupdate.GroupData = Groups; Groupupdate.AgentData = new AgentGroupDataUpdatePacket.AgentDataBlock(); Groupupdate.AgentData.AgentID = AgentId; - + IEventQueue eq = Scene.RequestModuleInterface(); try { @@ -5639,9 +5644,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (groupID == ActiveGroupId) return ActiveGroupPowers; - if (m_groupPowers.ContainsKey(groupID)) - return m_groupPowers[groupID]; - + lock(m_groupPowers) + { + if (m_groupPowers.ContainsKey(groupID)) + return m_groupPowers[groupID]; + } return 0; } @@ -12952,23 +12959,57 @@ namespace OpenSim.Region.ClientStack.LindenUDP public void RefreshGroupMembership() { - if (m_GroupsModule != null) + lock(m_groupPowers) { - GroupMembershipData[] GroupMembership = + if (m_GroupsModule != null) + { + GroupMembershipData[] GroupMembership = m_GroupsModule.GetMembershipData(AgentId); - m_groupPowers.Clear(); - - if (GroupMembership != null) - { - for (int i = 0; i < GroupMembership.Length; i++) + m_groupPowers.Clear(); + + if (GroupMembership != null) { - m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; + for (int i = 0; i < GroupMembership.Length; i++) + { + m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; + } } } } } + public void UpdateGroupMembership(GroupMembershipData[] data) + { + lock(m_groupPowers) + { + m_groupPowers.Clear(); + + if (data != null) + { + for (int i = 0; i < data.Length; i++) + m_groupPowers[data[i].GroupID] = data[i].GroupPowers; + } + } + } + + public void GroupMembershipRemove(UUID GroupID) + { + lock(m_groupPowers) + { + if(m_groupPowers.ContainsKey(GroupID)) + m_groupPowers.Remove(GroupID); + } + } + + public void GroupMembershipAddReplace(UUID GroupID,ulong GroupPowers) + { + lock(m_groupPowers) + { + m_groupPowers[GroupID] = GroupPowers; + } + } + public string Report() { return m_udpClient.GetStats(); -- cgit v1.1