From d04443b4fe0fb3993b53086d95be97a766b409f6 Mon Sep 17 00:00:00 2001 From: mingchen Date: Fri, 23 May 2008 15:12:15 +0000 Subject: *Refactor of the LandManagementModule that allows OpenSim to run without it --- OpenSim/Region/Environment/Scenes/EventManager.cs | 89 ++++++++++++++++++++++ .../Environment/Scenes/Scene.PacketHandlers.cs | 4 +- OpenSim/Region/Environment/Scenes/Scene.cs | 35 ++------- .../Region/Environment/Scenes/SceneObjectGroup.cs | 13 ---- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 10 +-- 5 files changed, 100 insertions(+), 51 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes') diff --git a/OpenSim/Region/Environment/Scenes/EventManager.cs b/OpenSim/Region/Environment/Scenes/EventManager.cs index e0a24a6..f8eef82 100644 --- a/OpenSim/Region/Environment/Scenes/EventManager.cs +++ b/OpenSim/Region/Environment/Scenes/EventManager.cs @@ -30,6 +30,7 @@ using libsecondlife; using OpenSim.Framework; using OpenSim.Region.Environment.Interfaces; using Caps=OpenSim.Framework.Communications.Capabilities.Caps; +using System.Collections.Generic; namespace OpenSim.Region.Environment.Scenes { @@ -169,6 +170,26 @@ namespace OpenSim.Region.Environment.Scenes public event AvatarKillData OnAvatarKilled; + + + public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj); + public event ObjectBeingRemovedFromScene OnObjectBeingRemovedFromScene; + + public delegate void NoticeNoLandDataFromStorage(); + public event NoticeNoLandDataFromStorage OnNoticeNoLandDataFromStorage; + + public delegate void IncomingLandDataFromStorage(List data); + public event IncomingLandDataFromStorage OnIncomingLandDataFromStorage; + + public delegate void SetAllowForcefulBan(bool allow); + public event SetAllowForcefulBan OnSetAllowForcefulBan; + + public delegate void RequestParcelPrimCountUpdate(); + public event RequestParcelPrimCountUpdate OnRequestParcelPrimCountUpdate; + + public delegate void ParcelPrimCountTainted(); + public event ParcelPrimCountTainted OnParcelPrimCountTainted; + /// /// RegisterCapsEvent is called by Scene after the Caps object /// has been instantiated and before it is return to the @@ -300,6 +321,13 @@ namespace OpenSim.Region.Environment.Scenes private LandBuy handlerValidateLandBuy = null; private AvatarKillData handlerAvatarKill = null; + private NoticeNoLandDataFromStorage handlerNoticeNoLandDataFromStorage = null; + private IncomingLandDataFromStorage handlerIncomingLandDataFromStorage = null; + private SetAllowForcefulBan handlerSetAllowForcefulBan = null; + private RequestParcelPrimCountUpdate handlerRequestParcelPrimCountUpdate = null; + private ParcelPrimCountTainted handlerParcelPrimCountTainted = null; + private ObjectBeingRemovedFromScene handlerObjectBeingRemovedFromScene = null; + public void TriggerOnScriptChangedEvent(uint localID, uint change) { handlerScriptChangedEvent = OnScriptChangedEvent; @@ -651,5 +679,66 @@ namespace OpenSim.Region.Environment.Scenes handlerScriptControlEvent(p, scriptUUID, avatarID, held, _changed); } } + + + public void TriggerNoticeNoLandDataFromStorage() + { + handlerNoticeNoLandDataFromStorage = OnNoticeNoLandDataFromStorage; + if (handlerNoticeNoLandDataFromStorage != null) + { + handlerNoticeNoLandDataFromStorage(); + + } + } + + public void TriggerIncomingLandDataFromStorage(List landData) + { + handlerIncomingLandDataFromStorage = OnIncomingLandDataFromStorage; + if (handlerIncomingLandDataFromStorage != null) + { + handlerIncomingLandDataFromStorage(landData); + + } + } + + public void TriggerSetAllowForcefulBan(bool allow) + { + handlerSetAllowForcefulBan = OnSetAllowForcefulBan; + if (handlerSetAllowForcefulBan != null) + { + handlerSetAllowForcefulBan(allow); + + } + } + + public void TriggerObjectBeingRemovedFromScene(SceneObjectGroup obj) + { + handlerObjectBeingRemovedFromScene = OnObjectBeingRemovedFromScene; + if (handlerObjectBeingRemovedFromScene != null) + { + handlerObjectBeingRemovedFromScene(obj); + + } + } + + + public void TriggerRequestParcelPrimCountUpdate() + { + handlerRequestParcelPrimCountUpdate = OnRequestParcelPrimCountUpdate; + if (handlerRequestParcelPrimCountUpdate != null) + { + handlerRequestParcelPrimCountUpdate(); + + } + } + public void TriggerParcelPrimCountTainted() + { + handlerParcelPrimCountTainted = OnParcelPrimCountTainted; + if (handlerParcelPrimCountTainted != null) + { + handlerParcelPrimCountTainted(); + + } + } } } diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 9eb86cb..788e80a 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -86,7 +86,7 @@ namespace OpenSim.Region.Environment.Scenes // A prim is only tainted if it's allowed to be edited by the person clicking it. if (ExternalChecks.ExternalChecksCanEditObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId) || ExternalChecks.ExternalChecksCanMoveObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId)) { - LandChannel.SetPrimsTainted(); + EventManager.TriggerParcelPrimCountTainted(); } break; } @@ -113,7 +113,7 @@ namespace OpenSim.Region.Environment.Scenes ((SceneObjectGroup)ent).ScheduleGroupForFullUpdate(); if (ExternalChecks.ExternalChecksCanEditObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId) || ExternalChecks.ExternalChecksCanMoveObject(((SceneObjectGroup)ent).UUID, remoteClient.AgentId)) { - LandChannel.SetPrimsTainted(); + EventManager.TriggerParcelPrimCountTainted(); break; } } diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 774ddfc..fe8cada 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -819,7 +819,7 @@ namespace OpenSim.Region.Environment.Scenes { if (LandChannel.IsLandPrimCountTainted()) { - LandChannel.PerformParcelPrimCountUpdate(); + EventManager.TriggerParcelPrimCountUpdate(); } } } @@ -970,12 +970,12 @@ namespace OpenSim.Region.Environment.Scenes if (dGridSettings["allow_forceful_banlines"] != "TRUE") { m_log.Info("[GRID]: Grid is disabling forceful parcel banlists"); - LandChannel.AllowedForcefulBans = false; + EventManager.TriggerSetAllowForcefulBan(false); } else { m_log.Info("[GRID]: Grid is allowing forceful parcel banlists"); - LandChannel.AllowedForcefulBans = true; + EventManager.TriggerSetAllowForcefulBan(true); } } } @@ -1142,11 +1142,11 @@ namespace OpenSim.Region.Environment.Scenes { if (landData.Count == 0) { - LandChannel.NoLandDataFromStorage(); + EventManager.TriggerNoticeNoLandDataFromStorage(); } else { - LandChannel.IncomingLandObjectsFromStorage(landData); + EventManager.TriggerIncomingLandDataFromStorage(landData); } } else @@ -1344,22 +1344,13 @@ namespace OpenSim.Region.Environment.Scenes { if (Entities.ContainsKey(sceneObject.UUID)) { - LandChannel.RemovePrimFromLandPrimCounts(sceneObject); + EventManager.TriggerObjectBeingRemovedFromScene(sceneObject); Entities.Remove(sceneObject.UUID); - LandChannel.SetPrimsTainted(); + EventManager.TriggerParcelPrimCountTainted(); m_innerScene.RemoveAPrimCount(); } } - /// - /// Called by a prim when it has been created/cloned, so that its events can be subscribed to - /// - /// - public void AcknowledgeNewPrim(SceneObjectGroup prim) - { - prim.OnPrimCountTainted += LandChannel.SetPrimsTainted; - } - public void LoadPrimsFromXml(string fileName, bool newIdsFlag, LLVector3 loadOffset) { m_sceneXmlLoader.LoadPrimsFromXml(fileName, newIdsFlag, loadOffset); @@ -1589,15 +1580,6 @@ namespace OpenSim.Region.Environment.Scenes CreateAndAddScenePresence(client, child); - try - { - LandChannel.SendParcelOverlay(client); - } //BUG: Mike - please fix this. - catch (KeyNotFoundException) - { - m_log.Warn("[LAND]: Bug #2 triggered with NPC. LandModule needs a refactor to fix this."); - } - CommsManager.UserProfileCacheService.AddNewUser(client.AgentId); } } @@ -3174,8 +3156,7 @@ namespace OpenSim.Region.Environment.Scenes lock (Entities) { - Entities.Remove(group.UUID); - m_innerScene.RemoveAPrimCount(); + RemoveEntity(group); } group.DeleteParts(); diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 35c563b..a99426a 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -601,7 +601,6 @@ namespace OpenSim.Region.Environment.Scenes #endregion - public event PrimCountTaintedDelegate OnPrimCountTainted; public string ToXmlString() { @@ -1068,18 +1067,6 @@ namespace OpenSim.Region.Environment.Scenes #region Events /// - /// - /// - public void TriggerTainted() - { - handlerPrimCountTainted = OnPrimCountTainted; - if (handlerPrimCountTainted != null) - { - handlerPrimCountTainted(); - } - } - - /// /// Processes backup /// /// diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 0dbd6dd..103068c 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -405,14 +405,7 @@ namespace OpenSim.Region.Environment.Scenes RegisterToEvents(); SetDirectionVectors(); - try - { - m_scene.LandChannel.SendLandUpdate(this, true); - } //BUG: Mike - please fix this. - catch (KeyNotFoundException) - { - m_log.Warn("[LAND]: Bug triggered with NPC. LandModule needs a refactor to fix this."); - } + } public ScenePresence(IClientAPI client, Scene world, RegionInfo reginfo, byte[] visualParams, @@ -596,7 +589,6 @@ namespace OpenSim.Region.Environment.Scenes //if (!m_gotAllObjectsInScene) //{ m_scene.SendAllSceneObjectsToClient(this); - m_scene.LandChannel.SendLandUpdate(this, true); //m_gotAllObjectsInScene = true; //} -- cgit v1.1