From f44742f75f6ea8b9e641a3f319f63afcfdbe26b9 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Tue, 21 Oct 2008 22:54:31 +0000 Subject: [PATCH] Pare the groups module down to basics. Adjust dependent files so that a real groups module can even be implemented. --- .../Framework/{LLGroup.cs => GroupData.cs} | 47 +--- OpenSim/Framework/IClientAPI.cs | 2 +- .../ClientStack/LindenUDP/LLClientView.cs | 8 +- .../Modules/Avatar/Groups/GroupsModule.cs | 217 +++++++----------- .../Modules/World/NPC/NPCAvatar.cs | 2 +- .../Examples/SimpleModule/MyNpcCharacter.cs | 2 +- 6 files changed, 101 insertions(+), 177 deletions(-) rename OpenSim/Framework/{LLGroup.cs => GroupData.cs} (68%) diff --git a/OpenSim/Framework/LLGroup.cs b/OpenSim/Framework/GroupData.cs similarity index 68% rename from OpenSim/Framework/LLGroup.cs rename to OpenSim/Framework/GroupData.cs index 7405b978b3..66b1875b96 100644 --- a/OpenSim/Framework/LLGroup.cs +++ b/OpenSim/Framework/GroupData.cs @@ -34,47 +34,24 @@ using System.Text; namespace OpenSim.Framework { - public class GroupData + public class GroupMembershipData { - public string ActiveGroupTitle; + // Group base data + // public UUID GroupID; - public List GroupMembers; - public string groupName; - public uint groupPowers = (uint)(GroupPowers.AllowLandmark | GroupPowers.AllowSetHome); - public List GroupTitles; - public bool AcceptNotices = true; + public string GroupName; public bool AllowPublish = true; - public string Charter = "Cool Group Yeah!"; - public int contribution = 0; - public UUID FounderID = UUID.Zero; - public int groupMembershipCost = 0; - public int groupRollsCount = 1; - public UUID GroupPicture = UUID.Zero; public bool MaturePublish = true; + public UUID Charter = UUID.Zero; + public UUID FounderID = UUID.Zero; + public UUID GroupPicture = UUID.Zero; public int MembershipFee = 0; public bool OpenEnrollment = true; - public bool ShowInList = true; - public GroupData() - { - GroupTitles = new List(); - GroupMembers = new List(); - } - - public GroupPowers ActiveGroupPowers - { - set { groupPowers = (uint)value; } - get { return (GroupPowers)groupPowers; } - } - } - - public class GroupList - { - public List m_GroupList; - - public GroupList() - { - m_GroupList = new List(); - } + // Per user data + // + public bool AcceptNotices = true; + public int Contribution = 0; + public uint GroupPowers = 0; } } diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index bf31a78115..a8813c9bc7 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -845,7 +845,7 @@ namespace OpenSim.Framework void SendAdminResponse(UUID Token, uint AdminLevel); - void SendGroupMembership(GroupData[] GroupMembership); + void SendGroupMembership(GroupMembershipData[] GroupMembership); void SendGroupNameReply(UUID groupLLUID, string GroupName); diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 19983dca85..6801310b84 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -6632,7 +6632,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP OutPacket(respondPacket, ThrottleOutPacketType.Task); } - public void SendGroupMembership(GroupData[] GroupMembership) + public void SendGroupMembership(GroupMembershipData[] GroupMembership) { AgentGroupDataUpdatePacket Groupupdate = new AgentGroupDataUpdatePacket(); AgentGroupDataUpdatePacket.GroupDataBlock[] Groups = new AgentGroupDataUpdatePacket.GroupDataBlock[GroupMembership.Length]; @@ -6640,11 +6640,11 @@ namespace OpenSim.Region.ClientStack.LindenUDP { AgentGroupDataUpdatePacket.GroupDataBlock Group = new AgentGroupDataUpdatePacket.GroupDataBlock(); Group.AcceptNotices = GroupMembership[i].AcceptNotices; - Group.Contribution = GroupMembership[i].contribution; + Group.Contribution = GroupMembership[i].Contribution; Group.GroupID = GroupMembership[i].GroupID; Group.GroupInsigniaID = GroupMembership[i].GroupPicture; - Group.GroupName = Utils.StringToBytes(GroupMembership[i].groupName); - Group.GroupPowers = GroupMembership[i].groupPowers; + Group.GroupName = Utils.StringToBytes(GroupMembership[i].GroupName); + Group.GroupPowers = GroupMembership[i].GroupPowers; Groups[i] = Group; Groupupdate.GroupData = Groups; diff --git a/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs b/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs index 5495f5afe4..0bb3c321cb 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Groups/GroupsModule.cs @@ -39,15 +39,22 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups { public class GroupsModule : IRegionModule { - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private static readonly ILog m_log = + LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private Dictionary m_grouplistmap = new Dictionary(); - private Dictionary m_groupmap = new Dictionary(); - private Dictionary m_iclientmap = new Dictionary(); - private Dictionary m_groupUUIDGroup = new Dictionary(); - private UUID opensimulatorGroupID = new UUID("00000000-68f9-1111-024e-222222111123"); + private Dictionary m_GroupMap = + new Dictionary(); - private List m_scene = new List(); + private Dictionary m_ClientMap = + new Dictionary(); + + private UUID opensimulatorGroupID = + new UUID("00000000-68f9-1111-024e-222222111123"); + + private List m_SceneList = new List(); + + private static GroupMembershipData osGroup = + new GroupMembershipData(); #region IRegionModule Members @@ -73,26 +80,27 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups m_log.Info("[GROUPS] Activated default groups module"); - lock (m_scene) + lock (m_SceneList) { - m_scene.Add(scene); + if (!m_SceneList.Contains(scene)) + { + if (m_SceneList.Count == 0) + { + osGroup.GroupID = opensimulatorGroupID; + osGroup.GroupName = "OpenSimulator Testing"; + osGroup.GroupPowers = + (uint)(GroupPowers.AllowLandmark | + GroupPowers.AllowSetHome); + m_GroupMap[opensimulatorGroupID] = osGroup; + } + m_SceneList.Add(scene); + } } + scene.EventManager.OnNewClient += OnNewClient; scene.EventManager.OnClientClosed += OnClientClosed; - scene.EventManager.OnGridInstantMessageToGroupsModule += OnGridInstantMessage; - lock (m_groupUUIDGroup) - { - - GroupData OpenSimulatorGroup = new GroupData(); - OpenSimulatorGroup.ActiveGroupTitle = "OpenSimulator Tester"; - OpenSimulatorGroup.GroupID = opensimulatorGroupID; - OpenSimulatorGroup.groupName = "OpenSimulator Testing"; - OpenSimulatorGroup.ActiveGroupPowers = GroupPowers.AllowSetHome; - OpenSimulatorGroup.GroupTitles.Add("OpenSimulator Tester"); - if (!m_groupUUIDGroup.ContainsKey(opensimulatorGroupID)) - m_groupUUIDGroup.Add(opensimulatorGroupID, OpenSimulatorGroup); - } - //scene.EventManager. + scene.EventManager.OnGridInstantMessageToGroupsModule += + OnGridInstantMessage; } public void PostInitialise() @@ -102,21 +110,15 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups public void Close() { m_log.Info("[GROUP]: Shutting down group module."); - lock (m_iclientmap) + lock (m_ClientMap) { - m_iclientmap.Clear(); + m_ClientMap.Clear(); } - lock (m_groupmap) + lock (m_GroupMap) { - m_groupmap.Clear(); + m_GroupMap.Clear(); } - - lock (m_grouplistmap) - { - m_grouplistmap.Clear(); - } - GC.Collect(); } public string Name @@ -138,159 +140,104 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Groups client.OnInstantMessage += OnInstantMessage; client.OnAgentDataUpdateRequest += OnAgentDataUpdateRequest; client.OnUUIDGroupNameRequest += HandleUUIDGroupNameRequest; - lock (m_iclientmap) + lock (m_ClientMap) { - if (!m_iclientmap.ContainsKey(client.AgentId)) + if (!m_ClientMap.ContainsKey(client.AgentId)) { - m_iclientmap.Add(client.AgentId, client); + m_ClientMap.Add(client.AgentId, client); } } - GroupData OpenSimulatorGroup = null; - lock (m_groupUUIDGroup) - { - OpenSimulatorGroup = m_groupUUIDGroup[opensimulatorGroupID]; - if (!OpenSimulatorGroup.GroupMembers.Contains(client.AgentId)) - { - OpenSimulatorGroup.GroupMembers.Add(client.AgentId); - m_groupUUIDGroup[opensimulatorGroupID] = OpenSimulatorGroup; - } - - } - lock (m_groupmap) - { - if (!m_groupmap.ContainsKey(client.AgentId)) - { - m_groupmap.Add(client.AgentId, OpenSimulatorGroup); - } - } - GroupList testGroupList = new GroupList(); - testGroupList.m_GroupList.Add(OpenSimulatorGroup.GroupID); + m_log.Info("[GROUP]: Adding " + client.Name + " to " + + osGroup.GroupName + " "); - lock (m_grouplistmap) - { - if (!m_grouplistmap.ContainsKey(client.AgentId)) - { - m_grouplistmap.Add(client.AgentId, testGroupList); - } - } - m_log.Info("[GROUP]: Adding " + client.Name + " to " + OpenSimulatorGroup.groupName + " "); - GroupData[] updateGroups = new GroupData[1]; - updateGroups[0] = OpenSimulatorGroup; + GroupMembershipData[] updateGroups = new GroupMembershipData[1]; + updateGroups[0] = osGroup; client.SendGroupMembership(updateGroups); } - private void OnAgentDataUpdateRequest(IClientAPI remoteClient, UUID AgentID, UUID SessionID) + private void OnAgentDataUpdateRequest(IClientAPI remoteClient, + UUID AgentID, UUID SessionID) { - // Adam, this is one of those impossible to refactor items without resorting to .Split hackery + UUID ActiveGroupID; + string ActiveGroupName; + uint ActiveGroupPowers; + string firstname = remoteClient.FirstName; string lastname = remoteClient.LastName; - UUID ActiveGroupID = UUID.Zero; - uint ActiveGroupPowers = 0; - string ActiveGroupName = "OpenSimulator Tester"; string ActiveGroupTitle = "I IZ N0T"; - bool foundUser = false; + ActiveGroupID = osGroup.GroupID; + ActiveGroupName = osGroup.GroupName; + ActiveGroupPowers = osGroup.GroupPowers; - lock (m_iclientmap) - { - if (m_iclientmap.ContainsKey(remoteClient.AgentId)) - { - foundUser = true; - } - } - if (foundUser) - { - lock (m_groupmap) - { - if (m_groupmap.ContainsKey(remoteClient.AgentId)) - { - GroupData grp = m_groupmap[remoteClient.AgentId]; - if (grp != null) - { - ActiveGroupID = grp.GroupID; - ActiveGroupName = grp.groupName; - ActiveGroupPowers = grp.groupPowers; - ActiveGroupTitle = grp.ActiveGroupTitle; - } - - remoteClient.SendAgentDataUpdate(AgentID, ActiveGroupID, firstname, lastname, ActiveGroupPowers, ActiveGroupName, ActiveGroupTitle); - } - } - } + remoteClient.SendAgentDataUpdate(AgentID, ActiveGroupID, firstname, + lastname, ActiveGroupPowers, ActiveGroupName, + ActiveGroupTitle); } private void OnInstantMessage(IClientAPI client, UUID fromAgentID, - UUID fromAgentSession, UUID toAgentID, - UUID imSessionID, uint timestamp, string fromAgentName, - string message, byte dialog, bool fromGroup, byte offline, - uint ParentEstateID, Vector3 Position, UUID RegionID, - byte[] binaryBucket) + UUID fromAgentSession, UUID toAgentID, + UUID imSessionID, uint timestamp, string fromAgentName, + string message, byte dialog, bool fromGroup, byte offline, + uint ParentEstateID, Vector3 Position, UUID RegionID, + byte[] binaryBucket) { } private void OnGridInstantMessage(GridInstantMessage msg) { // Trigger the above event handler - OnInstantMessage(null, new UUID(msg.fromAgentID), new UUID(msg.fromAgentSession), - new UUID(msg.toAgentID), new UUID(msg.imSessionID), msg.timestamp, msg.fromAgentName, - msg.message, msg.dialog, msg.fromGroup, msg.offline, msg.ParentEstateID, - new Vector3(msg.Position.X, msg.Position.Y, msg.Position.Z), new UUID(msg.RegionID), - msg.binaryBucket); + OnInstantMessage(null, new UUID(msg.fromAgentID), + new UUID(msg.fromAgentSession), + new UUID(msg.toAgentID), new UUID(msg.imSessionID), + msg.timestamp, msg.fromAgentName, + msg.message, msg.dialog, msg.fromGroup, msg.offline, + msg.ParentEstateID, + new Vector3(msg.Position.X, msg.Position.Y, msg.Position.Z), + new UUID(msg.RegionID), + msg.binaryBucket); } + private void HandleUUIDGroupNameRequest(UUID id,IClientAPI remote_client) { string groupnamereply = "Unknown"; UUID groupUUID = UUID.Zero; - lock (m_groupUUIDGroup) + lock (m_GroupMap) { - if (m_groupUUIDGroup.ContainsKey(id)) + if (m_GroupMap.ContainsKey(id)) { - GroupData grp = m_groupUUIDGroup[id]; - groupnamereply = grp.groupName; + GroupMembershipData grp = m_GroupMap[id]; + groupnamereply = grp.GroupName; groupUUID = grp.GroupID; } } remote_client.SendGroupNameReply(groupUUID, groupnamereply); } + private void OnClientClosed(UUID agentID) { - lock (m_iclientmap) + lock (m_ClientMap) { - if (m_iclientmap.ContainsKey(agentID)) + if (m_ClientMap.ContainsKey(agentID)) { - IClientAPI cli = m_iclientmap[agentID]; + IClientAPI cli = m_ClientMap[agentID]; if (cli != null) { - m_log.Info("[GROUP]: Removing all reference to groups for " + cli.Name); + m_log.Info("[GROUP]: Removing all reference to groups "+ + "for " + cli.Name); } else { - m_log.Info("[GROUP]: Removing all reference to groups for " + agentID.ToString()); + m_log.Info("[GROUP]: Removing all reference to groups "+ + "for " + agentID.ToString()); } - m_iclientmap.Remove(agentID); + m_ClientMap.Remove(agentID); } } - - lock (m_groupmap) - { - if (m_groupmap.ContainsKey(agentID)) - { - m_groupmap.Remove(agentID); - } - } - - lock (m_grouplistmap) - { - if (m_grouplistmap.ContainsKey(agentID)) - { - m_grouplistmap.Remove(agentID); - } - } - GC.Collect(); } } } diff --git a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs index 9aa0403110..8617605581 100644 --- a/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/Environment/Modules/World/NPC/NPCAvatar.cs @@ -109,7 +109,7 @@ namespace OpenSim.Region.Environment.Modules.World.NPC } - public void SendGroupMembership(GroupData[] GroupMembership) + public void SendGroupMembership(GroupMembershipData[] GroupMembership) { } diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 5e7523f22a..2d479bee68 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs @@ -667,7 +667,7 @@ namespace OpenSim.Region.Examples.SimpleModule } - public void SendGroupMembership(GroupData[] GroupMembership) + public void SendGroupMembership(GroupMembershipData[] GroupMembership) { }