From 9511a8c76370f21e839114007dcd2b25c69b009a Mon Sep 17 00:00:00 2001 From: Tedd Hansen Date: Sat, 8 Nov 2008 17:35:48 +0000 Subject: Work in progress on SECS stuff. Have been holding it off until after 0.6 release. Still messy as hell and doesn't really work yet. Will undergo dramatic changes. AND MOST IMPORTANTLY: Will be conformed to work in coop with todays DNE and XEngine, hopefully one day providing a common interface for all components. --- .../ScriptEngine/ComponentLoader.cs | 101 ------------ .../ScriptEngine/ComponentRegistry.cs | 68 -------- .../ScriptEngine/Components/CommandBase.cs | 45 ----- .../ScriptEngine/Components/CompilerBase.cs | 45 ----- .../ScriptEngine/Components/ComponentBase.cs | 53 ------ .../ScriptEngine/Components/EventBase.cs | 45 ----- .../ScriptEngine/Components/SchedulerBase.cs | 45 ----- .../ScriptEngine/RegionEngineLoader.cs | 115 +++++++++++++ .../ScriptEngine/RegionScriptEngineBase.cs | 182 --------------------- .../ScriptEngine/RegionScriptEnginePlugin.cs | 93 ----------- .../ScriptEngine/Resources/ScriptEngine.addin.xml | 12 -- .../Resources/ScriptEnginePlugin.addin.xml | 11 ++ .../ScriptEngine/ScriptEnginePlugin.cs | 134 +++++++++++++-- 13 files changed, 249 insertions(+), 700 deletions(-) delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/RegionEngineLoader.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs delete mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEnginePlugin.addin.xml (limited to 'OpenSim/ApplicationPlugins/ScriptEngine') diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs deleted file mode 100644 index d2e3cd0..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.IO; -using System.Reflection; -using System.Text; -using log4net; -using OpenSim.ApplicationPlugins.ScriptEngine.Components; - -namespace OpenSim.ApplicationPlugins.ScriptEngine -{ - /// - /// Used to load ScriptEngine component .dll's - /// - internal class ComponentLoader - { - internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - //private ScriptEnginePlugin scriptEnginePlugin; - public ComponentLoader(ScriptEnginePlugin sep) - { - //scriptEnginePlugin = sep; - } - - /// - /// Load components from directory - /// - /// - public void Load(string directory) - { - // We may want to change how this functions as currently it required unique class names for each component - - foreach (string file in Directory.GetFiles(directory, "*.dll")) - { - //m_log.DebugFormat("[ScriptEngine]: Loading: [{0}].", file); - Assembly componentAssembly = Assembly.LoadFrom(file); - if (componentAssembly != null) - { - try - { - // Go through all types in the assembly - foreach (Type componentType in componentAssembly.GetTypes()) - { - if (componentType.IsPublic - && !componentType.IsAbstract) - { - if (componentType.IsSubclassOf(typeof (ComponentBase))) - { - // We have found an type which is derived from ProdiverBase, add it to provider list - m_log.InfoFormat("[ScriptEngine]: Adding component: {0}", componentType.Name); - lock (ComponentRegistry.providers) - { - ComponentRegistry.providers.Add(componentType.Name, componentType); - } - } - if (componentType.IsSubclassOf(typeof(RegionScriptEngineBase))) - { - // We have found an type which is derived from RegionScriptEngineBase, add it to engine list - m_log.InfoFormat("[ScriptEngine]: Adding script engine: {0}", componentType.Name); - lock (ComponentRegistry.scriptEngines) - { - ComponentRegistry.scriptEngines.Add(componentType.Name, componentType); - } - } - } - } - } - catch - (ReflectionTypeLoadException) - { - m_log.InfoFormat("[ScriptEngine]: Could not load types for [{0}].", componentAssembly.FullName); - } - } //if - } //foreach - } - } -} \ No newline at end of file diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs deleted file mode 100644 index 5ffa490..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Text; -using OpenSim.ApplicationPlugins.ScriptEngine; -using OpenSim.ApplicationPlugins.ScriptEngine.Components; - -namespace OpenSim.ApplicationPlugins.ScriptEngine -{ - /// - /// Component providers - /// This is where any component (any part) of the Script Engine Component System (SECS) registers. - /// Nothing is instanciated at this point. The modules just need to register here to be available for any script engine. - /// - public static class ComponentRegistry - { - // Component providers are registered here wit a name (string) - // When a script engine is created the components are instanciated - public static Dictionary providers = new Dictionary(); - public static Dictionary scriptEngines = new Dictionary(); - - ///// - ///// Returns a list of ProviderBase objects which has been instanciated by their name - ///// - ///// List of Script Engine Components - ///// - //public static List GetComponents(string[] Providers) - //{ - // List pbl = new List(); - // if (Providers != null) - // { - // foreach (string p in Providers) - // { - // if (providers.ContainsKey(p)) - // pbl.Add(Activator.CreateInstance(providers[p]) as ComponentBase); - // } - // } - - // return pbl; - //} - - } -} \ No newline at end of file diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs b/OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs deleted file mode 100644 index 4708554..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.ApplicationPlugins.ScriptEngine.Components -{ - public abstract class CommandBase: ComponentBase - { - //public override iProviderBase CreateInstance() - //{ - // throw new NotImplementedException(); - //} - - //public override void Start() - //{ - // throw new NotImplementedException(); - //} - } -} \ No newline at end of file diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs b/OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs deleted file mode 100644 index e62d1f2..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.ApplicationPlugins.ScriptEngine.Components -{ - public abstract class CompilerBase: ComponentBase - { - //public override iProviderBase CreateInstance() - //{ - // throw new NotImplementedException(); - //} - - //public override void Start() - //{ - // throw new NotImplementedException(); - //} - } -} \ No newline at end of file diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs b/OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs deleted file mode 100644 index 48c6bfe..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.ApplicationPlugins.ScriptEngine.Components -{ - /// - /// Generic baseclass for component providers - /// - public abstract class ComponentBase //: iProviderBase - { - //public abstract iProviderBase CreateInstance(); - public abstract void Start(); - public abstract void Close(); - public RegionScriptEngineBase scriptEngine; - public void Initialize(RegionScriptEngineBase ScriptEngine) - { - scriptEngine = ScriptEngine; - } - - static ComponentBase() - { - // We got loaded -- should we register now? - //OpenSim.ApplicationPlugins.ScriptEngine.ComponentProviders.providers.Add(GetType()); - } - } -} \ No newline at end of file diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs b/OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs deleted file mode 100644 index 1c0fd52..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.ApplicationPlugins.ScriptEngine.Components -{ - public abstract class EventBase : ComponentBase - { - //public override iProviderBase CreateInstance() - //{ - // throw new NotImplementedException(); - //} - - //public override void Start() - //{ - // throw new NotImplementedException(); - //} - } -} \ No newline at end of file diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs b/OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs deleted file mode 100644 index 9d5aff0..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Text; - -namespace OpenSim.ApplicationPlugins.ScriptEngine.Components -{ - public abstract class SchedulerBase: ComponentBase - { - //public override iProviderBase CreateInstance() - //{ - // throw new NotImplementedException(); - //} - - //public override void Start() - //{ - // throw new NotImplementedException(); - //} - } -} \ No newline at end of file diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/RegionEngineLoader.cs b/OpenSim/ApplicationPlugins/ScriptEngine/RegionEngineLoader.cs new file mode 100644 index 0000000..115d237 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/RegionEngineLoader.cs @@ -0,0 +1,115 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Text; +using log4net; +using Nini.Config; +using OpenSim.Region.Environment.Interfaces; +using OpenSim.Region.Environment.Scenes; +using OpenSim.ScriptEngine.Shared; + +namespace OpenSim.ApplicationPlugins.ScriptEngine +{ + public class RegionEngineLoader : IRegionModule + { + // This is a region module. + // This means: Every time a new region is created, a new instance of this module is also created. + // This module is responsible for starting the script engine for this region. + public string Name { get { return "SECS.DotNetEngine.Scheduler.RegionLoader"; } } + public bool IsSharedModule { get { return true; } } + + internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + private string tempScriptEngineName = "DotNetEngine"; + public IScriptEngine scriptEngine; + public IConfigSource ConfigSource; + public IConfig ScriptConfigSource; + public void Initialise(Scene scene, IConfigSource source) + { + // New region is being created + // Create a new script engine + // Make sure we have config + if (ConfigSource.Configs["SECS"] == null) + ConfigSource.AddConfig("SECS"); + ScriptConfigSource = ConfigSource.Configs["SECS"]; + + // Is SECS enabled? + if (ScriptConfigSource.GetBoolean("Enabled", false)) + { + LoadEngine(); + if (scriptEngine != null) + scriptEngine.Initialise(scene, source); + } + } + + public void PostInitialise() + { + if (scriptEngine != null) + scriptEngine.PostInitialise(); + } + + public void Close() + { + try + { + if (scriptEngine != null) + scriptEngine.Close(); + } + catch (Exception ex) + { + m_log.ErrorFormat("[{0}] Unable to close engine \"{1}\": {2}", Name, tempScriptEngineName, ex.ToString()); + } + } + + private void LoadEngine() + { + m_log.DebugFormat("[{0}] Loading region script engine engine \"{1}\".", Name, tempScriptEngineName); + try + { + lock (ScriptEnginePlugin.scriptEngines) + { + if (!ScriptEnginePlugin.scriptEngines.ContainsKey(tempScriptEngineName)) + { + m_log.ErrorFormat("[{0}] Unable to load region script engine: Script engine \"{1}\" does not exist.", Name, tempScriptEngineName); + } + else + { + scriptEngine = + Activator.CreateInstance(ScriptEnginePlugin.scriptEngines[tempScriptEngineName]) as + IScriptEngine; + } + } + } + catch (Exception ex) + { + m_log.ErrorFormat("[{0}] Internal error loading region script engine \"{1}\": {2}", Name, tempScriptEngineName, ex.ToString()); + } + } + + } +} diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs b/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs deleted file mode 100644 index 89a90ae..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Text; -using log4net; -using Nini.Config; -using OpenSim.ApplicationPlugins.ScriptEngine.Components; -using OpenSim.Region.Environment.Scenes; - -namespace OpenSim.ApplicationPlugins.ScriptEngine -{ - public abstract class RegionScriptEngineBase - { - - /// - /// Called on region initialize - /// - public abstract void Initialize(); - public abstract string Name { get; } - /// - /// Called before components receive Close() - /// - public abstract void PreClose(); - // Hold list of all the different components we have working for us - public List Components = new List(); - - public Scene m_Scene; - public IConfigSource m_ConfigSource; - public readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - public void Initialize(Scene scene, IConfigSource source) - { - // Region started - m_Scene = scene; - m_ConfigSource = source; - Initialize(); - } - - /// - /// Creates instances of script engine components inside "components" List - /// - /// Array of comonent names to initialize - public void InitializeComponents(string[] ComponentList) - { - // Take list of providers to initialize and make instances of them - foreach (string c in ComponentList) - { - m_log.Info("[" + Name + "]: Loading: " + c); - lock (Components) - { - lock (ComponentRegistry.providers) - { - try - { - if (ComponentRegistry.providers.ContainsKey(c)) - Components.Add(Activator.CreateInstance(ComponentRegistry.providers[c]) as ComponentBase); - else - m_log.Error("[" + Name + "]: Component \"" + c + "\" not found, can not load"); - } - catch (Exception ex) - { - m_log.Error("[" + Name + "]: Exception loading \"" + c + "\": " + ex.ToString()); - } - } - } - } - - - // Run Initialize on all our providers, hand over a reference of ourself. - foreach (ComponentBase p in Components.ToArray()) - { - try - { - p.Initialize(this); - } - catch (Exception ex) - { - lock (Components) - { - m_log.Error("[" + Name + "]: Error initializing \"" + p.GetType().FullName + "\": " + - ex.ToString()); - if (Components.Contains(p)) - Components.Remove(p); - } - } - } - // All modules has been initialized, call Start() on them. - foreach (ComponentBase p in Components.ToArray()) - { - try - { - p.Start(); - } - catch (Exception ex) - { - lock (Components) - { - m_log.Error("[" + Name + "]: Error starting \"" + p.GetType().FullName + "\": " + ex.ToString()); - if (Components.Contains(p)) - Components.Remove(p); - } - } - } - - } - - #region Functions to return lists based on type - // Predicate for searching List for a certain type - private static bool FindType(ComponentBase pb) - { - if (pb.GetType() is T) - return true; - return false; - } - public List GetCommandComponentList() - { - return Components.FindAll(FindType); - } - public List GetCompilerComponentList() - { - return Components.FindAll(FindType); - } - public List GetEventComponentList() - { - return Components.FindAll(FindType); - } - public List GetScheduleComponentList() - { - return Components.FindAll(FindType); - } - - #endregion - - public void Close() - { - // We need to shut down - - // First call abstracted PreClose() - PreClose(); - - // Then Call Close() on all components - foreach (ComponentBase p in Components.ToArray()) - { - try - { - p.Close(); - } - catch (Exception) - { - // TODO: Print error to console - } - } - } - } -} - diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs b/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs deleted file mode 100644 index e6def85..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) Contributors, http://opensimulator.org/ - * See CONTRIBUTORS.TXT for a full list of copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the OpenSim Project nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -using System; -using System.Collections.Generic; -using System.Text; -using Nini.Config; -using OpenSim.Region.Environment.Interfaces; -using OpenSim.Region.Environment.Scenes; - -namespace OpenSim.ApplicationPlugins.ScriptEngine -{ - public class RegionScriptEnginePlugin : IRegionModule - { - // This is a region module. - // This means: Every time a new region is created, a new instance of this module is also created. - // This module is responsible for starting the script engine for this region. - - private string tempScriptEngineName = "DotNetEngine"; - public RegionScriptEngineBase scriptEngine; - public void Initialise(Scene scene, IConfigSource source) - { - return; - // New region is being created - // Create a new script engine -// try -// { -// lock (ComponentRegistry.scriptEngines) -// { -// scriptEngine = -// Activator.CreateInstance(ComponentRegistry.scriptEngines[tempScriptEngineName]) as -// RegionScriptEngineBase; -// } -// scriptEngine.Initialize(scene, source); -// } -// catch (Exception ex) -// { -// scriptEngine.m_log.Error("[ScriptEngine]: Unable to load engine \"" + tempScriptEngineName + "\": " + ex.ToString()); -// } - } - - public void PostInitialise() - { - // Nothing - } - - public void Close() - { - try - { - if (scriptEngine != null) - scriptEngine.Close(); - } - catch (Exception ex) - { - scriptEngine.m_log.Error("[ScriptEngine]: Unable to close engine \"" + tempScriptEngineName + "\": " + ex.ToString()); - } - } - - public string Name - { - get { return "ScriptEngine Region Loader"; } - } - - public bool IsSharedModule - { - get { return true; } - } - } -} diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml b/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml deleted file mode 100644 index 38f6eb0..0000000 --- a/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEnginePlugin.addin.xml b/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEnginePlugin.addin.xml new file mode 100644 index 0000000..f067bf4 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEnginePlugin.addin.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs index 32c7748..f81b848 100644 --- a/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs +++ b/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs @@ -26,29 +26,143 @@ */ using System; using System.Collections.Generic; +using System.IO; using System.Reflection; using System.Text; +using System.Threading; +using OpenSim.ScriptEngine.Shared; using log4net; namespace OpenSim.ApplicationPlugins.ScriptEngine { + /// + /// Loads all Script Engine Components + /// public class ScriptEnginePlugin : IApplicationPlugin { internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); internal OpenSimBase m_OpenSim; - private ComponentLoader pluginLoader; + + // Component providers are registered here wit a name (string) + // When a script engine is created the components are instanciated + public static Dictionary providers = new Dictionary(); + public static Dictionary scriptEngines = new Dictionary(); + + + public ScriptEnginePlugin() + { + // Application startup +#if DEBUG + m_log.InfoFormat("[{0}] ##################################", Name); + m_log.InfoFormat("[{0}] # Script Engine Component System #", Name); + m_log.InfoFormat("[{0}] ##################################", Name); +#else + m_log.InfoFormat("[{0}] Script Engine Component System", Name); +#endif + + // Load all modules from current directory + // We only want files named OpenSim.ScriptEngine.*.dll + Load(".", "OpenSim.ScriptEngine.*.dll"); + } public void Initialise(OpenSimBase openSim) { + // Our objective: Load component .dll's m_OpenSim = openSim; - pluginLoader = new ComponentLoader(this); + //m_OpenSim.Shutdown(); + } + + private readonly static string nameIScriptEngineComponent = typeof(IScriptEngineComponent).Name; // keep interface name in managed code + private readonly static string nameIScriptEngine = typeof(IScriptEngine).Name; // keep interface name in managed code + /// + /// Load components from directory + /// + /// + public void Load(string directory, string filter) + { + // We may want to change how this functions as currently it required unique class names for each component + + foreach (string file in Directory.GetFiles(directory, filter)) + { + //m_log.DebugFormat("[ScriptEngine]: Loading: [{0}].", file); + Assembly componentAssembly = null; + try + { + componentAssembly = Assembly.LoadFrom(file); + } catch (Exception e) + { + m_log.ErrorFormat("[{0}] Error loading: \"{1}\".", Name, file); + } + if (componentAssembly != null) + { + try + { + // Go through all types in the assembly + foreach (Type componentType in componentAssembly.GetTypes()) + { + if (componentType.IsPublic + && !componentType.IsAbstract) + { + //if (componentType.IsSubclassOf(typeof(ComponentBase))) + if (componentType.GetInterface(nameIScriptEngineComponent) != null) + { + // We have found an type which is derived from ProdiverBase, add it to provider list + m_log.InfoFormat("[{0}] Adding component: {1}", Name, componentType.Name); + lock (providers) + { + providers.Add(componentType.Name, componentType); + } + } + //if (componentType.IsSubclassOf(typeof(ScriptEngineBase))) + if (componentType.GetInterface(nameIScriptEngine) != null) + { + // We have found an type which is derived from RegionScriptEngineBase, add it to engine list + m_log.InfoFormat("[{0}] Adding script engine: {1}", Name, componentType.Name); + lock (scriptEngines) + { + scriptEngines.Add(componentType.Name, componentType); + } + } + } + } + } + catch + (ReflectionTypeLoadException re) + { + m_log.ErrorFormat("[{0}] Could not load component \"{1}\": {2}", Name, componentAssembly.FullName, re.ToString()); + int c = 0; + foreach (Exception e in re.LoaderExceptions) + { + c++; + m_log.ErrorFormat("[{0}] LoaderException {1}: {2}", Name, c, e.ToString()); + } + } + } //if + } //foreach + } + + public static IScriptEngineComponent GetComponentInstance(string name, params Object[] args) + { + if (!providers.ContainsKey(name)) + throw new Exception("ScriptEngine requested component named \"" + name + + "\" that does not exist."); - m_log.Info("[" + Name + "]: Script Engine Component System"); - m_log.Info("[" + Name + "]: Loading Script Engine Components"); - pluginLoader.Load("ScriptEngines"); - + return Activator.CreateInstance(providers[name], args) as IScriptEngineComponent; } + + private readonly static string nameIScriptEngineRegionComponent = typeof(IScriptEngineRegionComponent).Name; // keep interface name in managed code + public static IScriptEngineComponent GetComponentInstance(RegionInfoStructure info, string name, params Object[] args) + { + IScriptEngineComponent c = GetComponentInstance(name, args); + + // If module is IScriptEngineRegionComponent then it will have one instance per region and we will initialize it + if (c.GetType().GetInterface(nameIScriptEngineRegionComponent) != null) + ((IScriptEngineRegionComponent)c).Initialize(info); + + return c; + } + #region IApplicationPlugin stuff /// /// Returns the plugin version @@ -65,16 +179,13 @@ namespace OpenSim.ApplicationPlugins.ScriptEngine /// Plugin name, eg MySQL User Provider public string Name { - get { return "ScriptEngine"; } + get { return "SECS"; } } /// /// Default-initialises the plugin /// - public void Initialise() - { - //throw new NotImplementedException(); - } + public void Initialise() { } /// ///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. @@ -85,5 +196,6 @@ namespace OpenSim.ApplicationPlugins.ScriptEngine //throw new NotImplementedException(); } #endregion + } } -- cgit v1.1