From d02a90823f2873f1b4de63062e3909d03a5a91fa Mon Sep 17 00:00:00 2001 From: Tedd Hansen Date: Fri, 1 Feb 2008 23:36:36 +0000 Subject: SCRIPTING STILL BROKEN Added comments and regions, restructured code Changed a lot of AppDomain junk from console from using Console.Write to Log.Verbose and set it to #if DEBUG All modules should now refresh their configuration runtime Made all logging in ScriptEngine.Common get script name from actual engine Renamed LSLLongCmdHandler to AsyncLSLCommandManager Added auto-recover with 5 sec throttle for new MaintenanceThread --- .../Common/ScriptEngineBase/ScriptEngine.cs | 70 ++++++++++++++++------ 1 file changed, 51 insertions(+), 19 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs') diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs index cfcc36e..c237282 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs @@ -42,27 +42,28 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase /// /// [Serializable] - public abstract class ScriptEngine : IRegionModule, OpenSim.Region.ScriptEngine.Common.ScriptServerInterfaces.ScriptEngine + public abstract class ScriptEngine : IRegionModule, OpenSim.Region.ScriptEngine.Common.ScriptServerInterfaces.ScriptEngine, iScriptEngineFunctionModule { public Scene World; - public EventManager m_EventManager; // Handles and queues incoming events from OpenSim - public EventQueueManager m_EventQueueManager; // Executes events - public ScriptManager m_ScriptManager; // Load, unload and execute scripts - public AppDomainManager m_AppDomainManager; - public LSLLongCmdHandler m_LSLLongCmdHandler; + public EventManager m_EventManager; // Handles and queues incoming events from OpenSim + public EventQueueManager m_EventQueueManager; // Executes events, handles script threads + public ScriptManager m_ScriptManager; // Load, unload and execute scripts + public AppDomainManager m_AppDomainManager; // Handles loading/unloading of scripts into AppDomains + public AsyncLSLCommandManager m_ASYNCLSLCommandManager; // Asyncronous LSL commands (commands that returns with an event) + public MaintenanceThread m_MaintenanceThread; // Thread that does different kinds of maintenance, for example refreshing config and killing scripts that has been running too long public IConfigSource ConfigSource; public IConfig ScriptConfigSource; - public abstract string ScriptConfigSourceName { get; } + public abstract string ScriptEngineName { get; } /// /// How many seconds between re-reading config-file. 0 = never. ScriptEngine will try to adjust to new config changes. /// - public int ReReadConfigFileSeconds { - get { return (int)(ReReadConfigFilens / 10000); } - set { ReReadConfigFilens = value * 10000; } + public int RefreshConfigFileSeconds { + get { return (int)(RefreshConfigFilens / 10000); } + set { RefreshConfigFilens = value * 10000; } } - public long ReReadConfigFilens = 0; + public long RefreshConfigFilens = 0; public ScriptManager GetScriptManager() { @@ -88,21 +89,22 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase { World = Sceneworld; m_log = logger; - ScriptConfigSource = ConfigSource.Configs[ScriptConfigSourceName]; + ScriptConfigSource = ConfigSource.Configs[ScriptEngineName]; - Log.Verbose("ScriptEngine", "DotNet & LSL ScriptEngine initializing"); + Log.Verbose(ScriptEngineName, "DotNet & LSL ScriptEngine initializing"); - //m_logger.Status("ScriptEngine", "InitializeEngine"); + //m_logger.Status(ScriptEngineName, "InitializeEngine"); // Create all objects we'll be using m_EventQueueManager = new EventQueueManager(this); m_EventManager = new EventManager(this, HookUpToServer); m_ScriptManager = newScriptManager; - //m_ScriptManager = new ScriptManager(this); - m_AppDomainManager = new AppDomainManager(ScriptConfigSource.GetInt("ScriptsPerAppDomain", 1)); - m_LSLLongCmdHandler = new LSLLongCmdHandler(this); + m_AppDomainManager = new AppDomainManager(this); + m_ASYNCLSLCommandManager = new AsyncLSLCommandManager(this); + m_MaintenanceThread = new MaintenanceThread(this); + + ReadConfig(); - ReReadConfigFileSeconds = ScriptConfigSource.GetInt("ReReadConfig", 0); // Should we iterate the region for scripts that needs starting? @@ -118,6 +120,26 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase { return this.m_EventManager; } + public void ReadConfig() + { +#if DEBUG + Log.Debug(ScriptEngineName, "Refreshing configuration for all modules"); +#endif + RefreshConfigFileSeconds = ScriptConfigSource.GetInt("RefreshConfig", 0); + + // Reload from disk + ConfigSource.Reload(); + // Create a new object (probably not necessary?) +// ScriptConfigSource = ConfigSource.Configs[ScriptEngineName]; + + if (m_EventQueueManager != null) m_EventQueueManager.ReadConfig(); + if (m_EventManager != null) m_EventManager.ReadConfig(); + if (m_ScriptManager != null) m_ScriptManager.ReadConfig(); + if (m_AppDomainManager != null) m_AppDomainManager.ReadConfig(); + if (m_ASYNCLSLCommandManager != null) m_ASYNCLSLCommandManager.ReadConfig(); + if (m_MaintenanceThread != null) m_MaintenanceThread.ReadConfig(); + + } #region IRegionModule @@ -134,7 +156,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase public string Name { - get { return "DotNetEngine"; } + get { return "Common." + ScriptEngineName; } } public bool IsSharedModule @@ -146,5 +168,15 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase #endregion + /// + /// If set to true then threads and stuff should try to make a graceful exit + /// + public bool PleaseShutdown + { + get { return _PleaseShutdown; } + set { _PleaseShutdown = value; } + } + private bool _PleaseShutdown = false; + } } \ No newline at end of file -- cgit v1.1