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