aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs
diff options
context:
space:
mode:
authorTedd Hansen2008-02-01 23:36:36 +0000
committerTedd Hansen2008-02-01 23:36:36 +0000
commitd02a90823f2873f1b4de63062e3909d03a5a91fa (patch)
treecb0d8f79fd36bec98bbac39c1185ee40c75e7c6d /OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs
parentSCRIPT SUPPORT IS STILL BROKEN. (diff)
downloadopensim-SC-d02a90823f2873f1b4de63062e3909d03a5a91fa.zip
opensim-SC-d02a90823f2873f1b4de63062e3909d03a5a91fa.tar.gz
opensim-SC-d02a90823f2873f1b4de63062e3909d03a5a91fa.tar.bz2
opensim-SC-d02a90823f2873f1b4de63062e3909d03a5a91fa.tar.xz
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
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/ScriptEngineBase/ScriptEngine.cs70
1 files changed, 51 insertions, 19 deletions
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
42 /// </summary> 42 /// </summary>
43 /// 43 ///
44 [Serializable] 44 [Serializable]
45 public abstract class ScriptEngine : IRegionModule, OpenSim.Region.ScriptEngine.Common.ScriptServerInterfaces.ScriptEngine 45 public abstract class ScriptEngine : IRegionModule, OpenSim.Region.ScriptEngine.Common.ScriptServerInterfaces.ScriptEngine, iScriptEngineFunctionModule
46 { 46 {
47 public Scene World; 47 public Scene World;
48 public EventManager m_EventManager; // Handles and queues incoming events from OpenSim 48 public EventManager m_EventManager; // Handles and queues incoming events from OpenSim
49 public EventQueueManager m_EventQueueManager; // Executes events 49 public EventQueueManager m_EventQueueManager; // Executes events, handles script threads
50 public ScriptManager m_ScriptManager; // Load, unload and execute scripts 50 public ScriptManager m_ScriptManager; // Load, unload and execute scripts
51 public AppDomainManager m_AppDomainManager; 51 public AppDomainManager m_AppDomainManager; // Handles loading/unloading of scripts into AppDomains
52 public LSLLongCmdHandler m_LSLLongCmdHandler; 52 public AsyncLSLCommandManager m_ASYNCLSLCommandManager; // Asyncronous LSL commands (commands that returns with an event)
53 public MaintenanceThread m_MaintenanceThread; // Thread that does different kinds of maintenance, for example refreshing config and killing scripts that has been running too long
53 54
54 public IConfigSource ConfigSource; 55 public IConfigSource ConfigSource;
55 public IConfig ScriptConfigSource; 56 public IConfig ScriptConfigSource;
56 public abstract string ScriptConfigSourceName { get; } 57 public abstract string ScriptEngineName { get; }
57 58
58 /// <summary> 59 /// <summary>
59 /// How many seconds between re-reading config-file. 0 = never. ScriptEngine will try to adjust to new config changes. 60 /// How many seconds between re-reading config-file. 0 = never. ScriptEngine will try to adjust to new config changes.
60 /// </summary> 61 /// </summary>
61 public int ReReadConfigFileSeconds { 62 public int RefreshConfigFileSeconds {
62 get { return (int)(ReReadConfigFilens / 10000); } 63 get { return (int)(RefreshConfigFilens / 10000); }
63 set { ReReadConfigFilens = value * 10000; } 64 set { RefreshConfigFilens = value * 10000; }
64 } 65 }
65 public long ReReadConfigFilens = 0; 66 public long RefreshConfigFilens = 0;
66 67
67 public ScriptManager GetScriptManager() 68 public ScriptManager GetScriptManager()
68 { 69 {
@@ -88,21 +89,22 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
88 { 89 {
89 World = Sceneworld; 90 World = Sceneworld;
90 m_log = logger; 91 m_log = logger;
91 ScriptConfigSource = ConfigSource.Configs[ScriptConfigSourceName]; 92 ScriptConfigSource = ConfigSource.Configs[ScriptEngineName];
92 93
93 Log.Verbose("ScriptEngine", "DotNet & LSL ScriptEngine initializing"); 94 Log.Verbose(ScriptEngineName, "DotNet & LSL ScriptEngine initializing");
94 95
95 //m_logger.Status("ScriptEngine", "InitializeEngine"); 96 //m_logger.Status(ScriptEngineName, "InitializeEngine");
96 97
97 // Create all objects we'll be using 98 // Create all objects we'll be using
98 m_EventQueueManager = new EventQueueManager(this); 99 m_EventQueueManager = new EventQueueManager(this);
99 m_EventManager = new EventManager(this, HookUpToServer); 100 m_EventManager = new EventManager(this, HookUpToServer);
100 m_ScriptManager = newScriptManager; 101 m_ScriptManager = newScriptManager;
101 //m_ScriptManager = new ScriptManager(this); 102 m_AppDomainManager = new AppDomainManager(this);
102 m_AppDomainManager = new AppDomainManager(ScriptConfigSource.GetInt("ScriptsPerAppDomain", 1)); 103 m_ASYNCLSLCommandManager = new AsyncLSLCommandManager(this);
103 m_LSLLongCmdHandler = new LSLLongCmdHandler(this); 104 m_MaintenanceThread = new MaintenanceThread(this);
105
106 ReadConfig();
104 107
105 ReReadConfigFileSeconds = ScriptConfigSource.GetInt("ReReadConfig", 0);
106 108
107 109
108 // Should we iterate the region for scripts that needs starting? 110 // Should we iterate the region for scripts that needs starting?
@@ -118,6 +120,26 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
118 { 120 {
119 return this.m_EventManager; 121 return this.m_EventManager;
120 } 122 }
123 public void ReadConfig()
124 {
125#if DEBUG
126 Log.Debug(ScriptEngineName, "Refreshing configuration for all modules");
127#endif
128 RefreshConfigFileSeconds = ScriptConfigSource.GetInt("RefreshConfig", 0);
129
130 // Reload from disk
131 ConfigSource.Reload();
132 // Create a new object (probably not necessary?)
133// ScriptConfigSource = ConfigSource.Configs[ScriptEngineName];
134
135 if (m_EventQueueManager != null) m_EventQueueManager.ReadConfig();
136 if (m_EventManager != null) m_EventManager.ReadConfig();
137 if (m_ScriptManager != null) m_ScriptManager.ReadConfig();
138 if (m_AppDomainManager != null) m_AppDomainManager.ReadConfig();
139 if (m_ASYNCLSLCommandManager != null) m_ASYNCLSLCommandManager.ReadConfig();
140 if (m_MaintenanceThread != null) m_MaintenanceThread.ReadConfig();
141
142 }
121 143
122 144
123 #region IRegionModule 145 #region IRegionModule
@@ -134,7 +156,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
134 156
135 public string Name 157 public string Name
136 { 158 {
137 get { return "DotNetEngine"; } 159 get { return "Common." + ScriptEngineName; }
138 } 160 }
139 161
140 public bool IsSharedModule 162 public bool IsSharedModule
@@ -146,5 +168,15 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
146 168
147 #endregion 169 #endregion
148 170
171 /// <summary>
172 /// If set to true then threads and stuff should try to make a graceful exit
173 /// </summary>
174 public bool PleaseShutdown
175 {
176 get { return _PleaseShutdown; }
177 set { _PleaseShutdown = value; }
178 }
179 private bool _PleaseShutdown = false;
180
149 } 181 }
150} \ No newline at end of file 182} \ No newline at end of file