From 270ae50d700831ac996025045dc32341d68ee0f9 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Fri, 7 Aug 2009 14:17:51 +1000 Subject: [PATCH] * Implements MRM's Stop() interface member. * MRM Scripts should do appropriate cleanup within this event, to allow for clean shutdowns and script updates. This means unbinding from events you are listening to, and releasing any resources. --- .../Scripting/Minimodule/InventoryItem.cs | 1 + .../OptionalModules/Scripting/Minimodule/MRMModule.cs | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs index 40693abe6f..5bf29d710c 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/InventoryItem.cs @@ -81,6 +81,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule public int Type { get { return m_privateItem.Type; } } public UUID AssetID { get { return m_privateItem.AssetID; } } + // This method exposes OpenSim/OpenMetaverse internals and needs to be replaced with a IAsset specific to MRM. public T RetreiveAsset() where T : OpenMetaverse.Assets.Asset, new() { AssetBase a = m_rootSceene.AssetService.Get(AssetID.ToString()); diff --git a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs index 53145e2d65..eb807f262c 100644 --- a/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs +++ b/OpenSim/Region/OptionalModules/Scripting/Minimodule/MRMModule.cs @@ -73,6 +73,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule if (!source.Configs["MRM"].GetBoolean("Hidden", false)) { scene.EventManager.OnRezScript += EventManager_OnRezScript; + scene.EventManager.OnStopScript += EventManager_OnStopScript; } scene.EventManager.OnFrame += EventManager_OnFrame; @@ -90,6 +91,14 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule } } + void EventManager_OnStopScript(uint localID, UUID itemID) + { + if(m_scripts.ContainsKey(itemID)) + { + m_scripts[itemID].Stop(); + } + } + void EventManager_OnFrame() { m_microthreads.Tick(1000);