From c71863d83e07f81ba17f6aeedfc7ee7079c7d762 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 22 Nov 2008 01:58:36 +0000 Subject: [PATCH] First stage group permissions plumbing --- OpenSim/Framework/IClientAPI.cs | 2 ++ .../ClientStack/LindenUDP/LLClientView.cs | 30 +++++++++++++++++++ .../Modules/World/NPC/NPCAvatar.cs | 5 ++++ .../Environment/Scenes/Tests/TestClient.cs | 5 ++++ .../Examples/SimpleModule/MyNpcCharacter.cs | 5 ++++ 5 files changed, 47 insertions(+) diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index b32c7f6458..8d9cdaaa01 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -496,6 +496,8 @@ namespace OpenSim.Framework ulong GetGroupPowers(UUID groupID); + bool IsGroupMember(UUID GroupID); + string FirstName { get; } string LastName { get; } diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index a897aa267c..0b905dfa84 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -317,8 +317,16 @@ namespace OpenSim.Region.ClientStack.LindenUDP get { return m_activeGroupPowers; } } + public bool IsGroupMember(UUID groupID) + { + return m_groupPowers.ContainsKey(groupID); + } + public ulong GetGroupPowers(UUID groupID) { + if (groupID == m_activeGroupID) + return m_activeGroupPowers; + if (m_groupPowers.ContainsKey(groupID)) return m_groupPowers[groupID]; return 0; @@ -750,6 +758,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP m_clientPingTimer.Enabled = true; m_scene.AddNewClient(this, true); + + RefreshGroupMembership(); } /// @@ -7129,10 +7139,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP public void SendGroupMembership(GroupMembershipData[] GroupMembership) { + m_groupPowers.Clear(); + 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; @@ -7850,5 +7864,21 @@ namespace OpenSim.Region.ClientStack.LindenUDP } #endregion + + private void RefreshGroupMembership() + { + if (m_GroupsModule != null) + { + GroupMembershipData[] GroupMembership = + m_GroupsModule.GetMembershipData(AgentId); + + m_groupPowers.Clear(); + + for (int i = 0; i < GroupMembership.Length; i++) + { + m_groupPowers[GroupMembership[i].GroupID] = GroupMembership[i].GroupPowers; + } + } + } } } diff --git a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs index f24398735c..0a27086164 100644 --- a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs @@ -413,6 +413,11 @@ namespace OpenSim.Region.Environment.Modules.World.NPC get { return 0; } } + public bool IsGroupMember(UUID groupID) + { + return false; + } + public ulong GetGroupPowers(UUID groupID) { return 0; diff --git a/OpenSim/Region/Environment/Scenes/Tests/TestClient.cs b/OpenSim/Region/Environment/Scenes/Tests/TestClient.cs index 15c6ad1441..392a53b1f7 100644 --- a/OpenSim/Region/Environment/Scenes/Tests/TestClient.cs +++ b/OpenSim/Region/Environment/Scenes/Tests/TestClient.cs @@ -301,6 +301,11 @@ namespace OpenSim.Region.Environment.Scenes.Tests get { return 0; } } + public bool IsGroupMember(UUID groupID) + { + return false; + } + public ulong GetGroupPowers(UUID groupID) { return 0; diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index e05ccd1194..b5ab1ace0d 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs @@ -311,6 +311,11 @@ namespace OpenSim.Region.Examples.SimpleModule get { return 0; } } + public bool IsGroupMember(UUID groupID) + { + return false; + } + public ulong GetGroupPowers(UUID groupID) { return 0;