From 4debc67b483e3c380df8dba1bbd8de82b4727f85 Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Wed, 18 Jul 2012 21:52:07 +0100 Subject: [PATCH] Establish EventManager.OnRegionReady event. This will only be triggerred once when the region is ready. Switch MapImageServiceModule to use this. --- .../MapImage/MapImageServiceModule.cs | 9 +---- .../Region/Framework/Scenes/EventManager.cs | 37 +++++++++++++++++-- OpenSim/Region/Framework/Scenes/Scene.cs | 1 + .../RegionReadyModule/RegionReadyModule.cs | 2 + 4 files changed, 39 insertions(+), 10 deletions(-) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs index ca7cc7cdea..56418043e4 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/MapImage/MapImageServiceModule.cs @@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage lock (m_scenes) m_scenes[scene.RegionInfo.RegionID] = scene; - scene.EventManager.OnLoginsEnabled += OnLoginsEnabled; + scene.EventManager.OnRegionReady += s => UploadMapTile(s); } /// @@ -162,12 +162,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.MapImage } #endregion ISharedRegionModule - - void OnLoginsEnabled(IScene scene) - { - UploadMapTile(scene); - } - + /// /// /// diff --git a/OpenSim/Region/Framework/Scenes/EventManager.cs b/OpenSim/Region/Framework/Scenes/EventManager.cs index 8e9228044c..2a3fe97aec 100644 --- a/OpenSim/Region/Framework/Scenes/EventManager.cs +++ b/OpenSim/Region/Framework/Scenes/EventManager.cs @@ -498,6 +498,16 @@ namespace OpenSim.Region.Framework.Scenes public delegate void LoginsEnabled(IScene scene); public event LoginsEnabled OnLoginsEnabled; + /// + /// Fired when a region is considered ready for use. + /// + /// + /// A region is considered ready when startup operations such as loading of scripts already on the region + /// have been completed. + /// + public delegate void RegionReady(IScene scene); + public event RegionReady OnRegionReady; + public delegate void PrimsLoaded(Scene s); public event PrimsLoaded OnPrimsLoaded; @@ -2427,11 +2437,11 @@ namespace OpenSim.Region.Framework.Scenes } } - public void TriggerLoginsEnabled(Scene scene) + public void TriggerLoginsEnabled(IScene scene) { LoginsEnabled handler = OnLoginsEnabled; - if ( handler != null) + if (handler != null) { foreach (LoginsEnabled d in handler.GetInvocationList()) { @@ -2441,7 +2451,28 @@ namespace OpenSim.Region.Framework.Scenes } catch (Exception e) { - m_log.ErrorFormat("[EVENT MANAGER]: Delegate for LoginsEnabled failed - continuing {0} - {1}", + m_log.ErrorFormat("[EVENT MANAGER]: Delegate for OnLoginsEnabled failed - continuing {0} - {1}", + e.Message, e.StackTrace); + } + } + } + } + + public void TriggerRegionReady(IScene scene) + { + RegionReady handler = OnRegionReady; + + if (handler != null) + { + foreach (RegionReady d in handler.GetInvocationList()) + { + try + { + d(scene); + } + catch (Exception e) + { + m_log.ErrorFormat("[EVENT MANAGER]: Delegate for OnRegionReady failed - continuing {0} - {1}", e.Message, e.StackTrace); } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 3ee06b93b5..37e311f825 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1459,6 +1459,7 @@ namespace OpenSim.Region.Framework.Scenes { m_log.InfoFormat("[REGION]: Enabling logins for {0}", RegionInfo.RegionName); LoginsDisabled = false; + EventManager.TriggerRegionReady(this); } m_sceneGridService.InformNeighborsThatRegionisUp(RequestModuleInterface(), RegionInfo); diff --git a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs index b1665bbf0e..8aa05016b4 100644 --- a/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/RegionReadyModule/RegionReadyModule.cs @@ -244,6 +244,8 @@ namespace OpenSim.Region.OptionalModules.Scripting.RegionReady { RRAlert("enabled"); } + + m_scene.EventManager.TriggerRegionReady(m_scene); } m_scene.EventManager.OnEmptyScriptCompileQueue -= OnEmptyScriptCompileQueue;