From 752d3f3879f13dc77f35b5e8ada2cdf5ba625ee4 Mon Sep 17 00:00:00 2001 From: Tedd Hansen Date: Sun, 21 Sep 2008 00:03:13 +0000 Subject: EXPERIMENTAL: Early commit of new Script Engine Component System --- .../ScriptEngine/ComponentLoader.cs | 95 ++++++++++++ .../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/Properties/AssemblyInfo.cs | 36 +++++ .../ScriptEngine/RegionScriptEngineBase.cs | 166 +++++++++++++++++++++ .../ScriptEngine/RegionScriptEnginePlugin.cs | 72 +++++++++ .../ScriptEngine/Resources/ScriptEngine.addin.xml | 12 ++ .../ScriptEngine/ScriptEnginePlugin.cs | 89 +++++++++++ 12 files changed, 771 insertions(+) create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Properties/AssemblyInfo.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml create mode 100644 OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs (limited to 'OpenSim/ApplicationPlugins') diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs new file mode 100644 index 0000000..ab39568 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentLoader.cs @@ -0,0 +1,95 @@ +/* + * 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); + 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); + 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 new file mode 100644 index 0000000..dcb435d --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/ComponentRegistry.cs @@ -0,0 +1,68 @@ +/* + * 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 new file mode 100644 index 0000000..01a052f --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Components/CommandBase.cs @@ -0,0 +1,45 @@ +/* + * 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 new file mode 100644 index 0000000..69b54a5 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Components/CompilerBase.cs @@ -0,0 +1,45 @@ +/* + * 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 new file mode 100644 index 0000000..8879e53 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Components/ComponentBase.cs @@ -0,0 +1,53 @@ +/* + * 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 new file mode 100644 index 0000000..d9c29a9 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Components/EventBase.cs @@ -0,0 +1,45 @@ +/* + * 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 new file mode 100644 index 0000000..7c19beb --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Components/SchedulerBase.cs @@ -0,0 +1,45 @@ +/* + * 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/Properties/AssemblyInfo.cs b/OpenSim/ApplicationPlugins/ScriptEngine/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..166a6d7 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OpenSim.ApplicationPlugins.ScriptEngine")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("OpenSim.ApplicationPlugins.ScriptEngine")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2008")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("a234c402-3014-45de-9f6b-c024d9f71983")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs b/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs new file mode 100644 index 0000000..c0a37a0 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEngineBase.cs @@ -0,0 +1,166 @@ +/* + * 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); + 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) + { + try + { + p.Initialize(this); + } + catch (Exception ex) + { + m_log.Error("[" + Name + "]: Error initializing \"" + p.GetType().FullName + "\": " + ex.ToString()); + Components.Remove(p); + } + } + // All modules has been initialized, call Start() on them. + foreach (ComponentBase p in Components) + { + try + { + p.Start(); + } + catch (Exception ex) + { + m_log.Error("[" + Name + "]: Error starting \"" + p.GetType().FullName + "\": " + ex.ToString()); + 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) + { + try + { + p.Close(); + } + catch (Exception ex) + { + // TODO: Print error to console + } + } + } + } +} + diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs b/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs new file mode 100644 index 0000000..a0622ea --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/RegionScriptEnginePlugin.cs @@ -0,0 +1,72 @@ +/* + * 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) + { + // New region is being created + // Create a new script engine + scriptEngine = Activator.CreateInstance(ComponentRegistry.scriptEngines[tempScriptEngineName]) as RegionScriptEngineBase; + scriptEngine.Initialize(scene, source); + } + + public void PostInitialise() + { + // Nothing + } + + public void Close() + { + scriptEngine.Close(); + } + + 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 new file mode 100644 index 0000000..38f6eb0 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/Resources/ScriptEngine.addin.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs b/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs new file mode 100644 index 0000000..cd584d5 --- /dev/null +++ b/OpenSim/ApplicationPlugins/ScriptEngine/ScriptEnginePlugin.cs @@ -0,0 +1,89 @@ +/* + * 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; + +namespace OpenSim.ApplicationPlugins.ScriptEngine +{ + public class ScriptEnginePlugin : IApplicationPlugin + { + internal static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + internal OpenSimBase m_OpenSim; + private ComponentLoader pluginLoader; + + public void Initialise(OpenSimBase openSim) + { + // Our objective: Load component .dll's + m_OpenSim = openSim; + pluginLoader = new ComponentLoader(this); + + m_log.Info("[" + Name + "]: Script Engine Component System"); + m_log.Info("[" + Name + "]: Loading Script Engine Components"); + pluginLoader.Load("ScriptEngines"); + + } + #region IApplicationPlugin stuff + /// + /// Returns the plugin version + /// + /// Plugin version in MAJOR.MINOR.REVISION.BUILD format + public string Version + { + get { return "1.0.0.0"; } + } + + /// + /// Returns the plugin name + /// + /// Plugin name, eg MySQL User Provider + public string Name + { + get { return "ScriptEngine"; } + } + + /// + /// Default-initialises the plugin + /// + public void Initialise() + { + //throw new NotImplementedException(); + } + + /// + ///Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. + /// + ///2 + public void Dispose() + { + //throw new NotImplementedException(); + } + #endregion + } +} -- cgit v1.1