From 59f0920a8fc58ea6443768591b762f5673134840 Mon Sep 17 00:00:00 2001
From: Tedd Hansen
Date: Sat, 22 Sep 2007 13:15:52 +0000
Subject: Stand Alone ScriptEngine: early framework, ongoing planning (don't
 touch yet, will go through major reorganizing). Still a LOT of things needs
 to be solved...

---
 OpenSim/Grid/ScriptServer/Main.cs                  |  46 ++++++++
 .../Grid/ScriptServer/Properties/AssemblyInfo.cs   |  33 ++++++
 .../Grid/ScriptServer/RegionConnectionManager.cs   |  16 +++
 OpenSim/Grid/ScriptServer/RegionScriptDaemon.cs    |  94 ++++++++++++++++
 OpenSim/Grid/ScriptServer/RegionsManager.cs        |  19 ++++
 OpenSim/Grid/ScriptServer/ScriptEngineInterface.cs |  38 +++++++
 OpenSim/Grid/ScriptServer/ScriptEngineLoader.cs    | 124 +++++++++++++++++++++
 OpenSim/Grid/ScriptServer/ScriptServer.cs          |  27 +++++
 OpenSim/Grid/ScriptServer/ScriptServer.csproj      |  47 ++++++++
 9 files changed, 444 insertions(+)
 create mode 100644 OpenSim/Grid/ScriptServer/Main.cs
 create mode 100644 OpenSim/Grid/ScriptServer/Properties/AssemblyInfo.cs
 create mode 100644 OpenSim/Grid/ScriptServer/RegionConnectionManager.cs
 create mode 100644 OpenSim/Grid/ScriptServer/RegionScriptDaemon.cs
 create mode 100644 OpenSim/Grid/ScriptServer/RegionsManager.cs
 create mode 100644 OpenSim/Grid/ScriptServer/ScriptEngineInterface.cs
 create mode 100644 OpenSim/Grid/ScriptServer/ScriptEngineLoader.cs
 create mode 100644 OpenSim/Grid/ScriptServer/ScriptServer.cs
 create mode 100644 OpenSim/Grid/ScriptServer/ScriptServer.csproj

(limited to 'OpenSim/Grid')

diff --git a/OpenSim/Grid/ScriptServer/Main.cs b/OpenSim/Grid/ScriptServer/Main.cs
new file mode 100644
index 0000000..9f16ea8
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/Main.cs
@@ -0,0 +1,46 @@
+/*
+* 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.Grid.ScriptServer
+{
+    class OpenScript_Main
+    {
+     
+        public static ScriptServer SE;
+   
+        static void Main(string[] args)
+        {
+            // Application is starting
+            SE = new ScriptServer();
+        }
+
+    }
+}
diff --git a/OpenSim/Grid/ScriptServer/Properties/AssemblyInfo.cs b/OpenSim/Grid/ScriptServer/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..d60dbb4
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+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.Grid.ScriptServer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("OpenSim.Grid.ScriptServer")]
+[assembly: AssemblyCopyright("Copyright ©  2007")]
+[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("b6861b87-5203-4040-b756-fd4774932f82")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version 
+//      Build Number
+//      Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/OpenSim/Grid/ScriptServer/RegionConnectionManager.cs b/OpenSim/Grid/ScriptServer/RegionConnectionManager.cs
new file mode 100644
index 0000000..6a517e9
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/RegionConnectionManager.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Grid.ScriptServer
+{
+    // Maintains connection and communication to a region
+    class RegionConnectionManager
+    {
+
+        public RegionConnectionManager()
+        {
+        }
+
+    }
+}
diff --git a/OpenSim/Grid/ScriptServer/RegionScriptDaemon.cs b/OpenSim/Grid/ScriptServer/RegionScriptDaemon.cs
new file mode 100644
index 0000000..435c09b
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/RegionScriptDaemon.cs
@@ -0,0 +1,94 @@
+/*
+* 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 System.Threading;
+
+namespace OpenSim.Grid.ScriptServer
+{
+    // Waiting for incoming script requests from region
+    internal class RegionScriptDaemon
+    {
+        private Thread listenThread;
+
+        public ScriptServer m_ScriptServer;
+        public RegionScriptDaemon(ScriptServer scriptServer)
+        {
+            m_ScriptServer = scriptServer;
+        }
+        ~RegionScriptDaemon()
+        {
+            Stop();
+        }
+
+        /// <summary>
+        /// Starts listening for region requests
+        /// </summary>
+        public void Start()
+        {
+            // Start listener
+            Stop();
+            listenThread = new Thread(ListenThreadLoop);
+            listenThread.Name = "listenThread";
+            listenThread.IsBackground = true;
+            listenThread.Start();
+        }
+        /// <summary>
+        /// Stops listening for region requests
+        /// </summary>
+        public void Stop()
+        {
+            // Stop listener, clean up
+            if (listenThread != null)
+            {
+                try
+                {
+                    if (listenThread.IsAlive)
+                        listenThread.Abort();
+                    listenThread.Join(1000); // Wait 1 second for thread to shut down
+                }
+                catch { }
+                listenThread = null;
+            }
+        }
+
+        private void ListenThreadLoop()
+        {
+            // * Listen for requests from regions
+            // * When a request is received:
+            //  - Authenticate region
+            //  - Authenticate user
+            //  - Have correct scriptengine load script
+            //   ~ ask scriptengines if they will accept script?
+            //  - Add script to shared communication channel towards that region
+
+        }
+
+    }
+}
diff --git a/OpenSim/Grid/ScriptServer/RegionsManager.cs b/OpenSim/Grid/ScriptServer/RegionsManager.cs
new file mode 100644
index 0000000..0e1fad1
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/RegionsManager.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Grid.ScriptServer
+{
+    // Maintains all regions
+    class RegionsManager
+    {
+        private List<RegionConnectionManager> Regions = new List<RegionConnectionManager>();
+
+                public ScriptServer m_ScriptServer;
+        public RegionsManager(ScriptServer scriptServer)
+        {
+            m_ScriptServer = scriptServer;
+        }
+
+    }
+}
diff --git a/OpenSim/Grid/ScriptServer/ScriptEngineInterface.cs b/OpenSim/Grid/ScriptServer/ScriptEngineInterface.cs
new file mode 100644
index 0000000..7440bcb
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/ScriptEngineInterface.cs
@@ -0,0 +1,38 @@
+/*
+* 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 OpenSim.Framework.Console;
+
+namespace OpenSim.Grid.ScriptServer
+{
+    public interface ScriptEngineInterface
+    {
+        //void InitializeEngine(Scene Sceneworld, LogBase logger);
+        void Shutdown();
+//        void StartScript(string ScriptID, IScriptHost ObjectID);
+    }
+}
\ No newline at end of file
diff --git a/OpenSim/Grid/ScriptServer/ScriptEngineLoader.cs b/OpenSim/Grid/ScriptServer/ScriptEngineLoader.cs
new file mode 100644
index 0000000..1b5dc39
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/ScriptEngineLoader.cs
@@ -0,0 +1,124 @@
+/*
+* 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.IO;
+using System.Reflection;
+using OpenSim.Framework.Console;
+
+namespace OpenSim.Grid.ScriptServer
+{
+    public class ScriptEngineLoader
+    {
+        private LogBase m_log;
+
+        public ScriptEngineLoader(LogBase logger)
+        {
+            m_log = logger;
+        }
+
+        public ScriptEngineInterface LoadScriptEngine(string EngineName)
+        {
+            ScriptEngineInterface ret = null;
+            try
+            {
+                ret =
+                    LoadAndInitAssembly(
+                        Path.Combine("ScriptEngines", "OpenSim.Region.ScriptEngine." + EngineName + ".dll"),
+                        "OpenSim.Region.ScriptEngine." + EngineName + ".ScriptEngine");
+            }
+            catch (Exception e)
+            {
+                m_log.Error("ScriptEngine",
+                            "Error loading assembly \"" + EngineName + "\": " + e.Message + ", " +
+                            e.StackTrace.ToString());
+            }
+            return ret;
+        }
+
+        /// <summary>
+        /// Does actual loading and initialization of script Assembly
+        /// </summary>
+        /// <param name="FreeAppDomain">AppDomain to load script into</param>
+        /// <param name="FileName">FileName of script assembly (.dll)</param>
+        /// <returns></returns>
+        private ScriptEngineInterface LoadAndInitAssembly(string FileName, string NameSpace)
+        {
+            //Common.SendToDebug("Loading ScriptEngine Assembly " + FileName);
+            // Load .Net Assembly (.dll)
+            // Initialize and return it
+
+            // TODO: Add error handling
+
+            Assembly a;
+            //try
+            //{
+
+
+            // Load to default appdomain (temporary)
+            a = Assembly.LoadFrom(FileName);
+            // Load to specified appdomain
+            // TODO: Insert security
+            //a = FreeAppDomain.Load(FileName);
+            //}
+            //catch (Exception e)
+            //{
+            //    m_log.Error("ScriptEngine", "Error loading assembly \"" + FileName + "\": " + e.ToString());
+            //}
+
+
+            //Console.WriteLine("Loading: " + FileName);
+            //foreach (Type _t in a.GetTypes())
+            //{
+            //    Console.WriteLine("Type: " + _t.ToString());
+            //}
+
+            Type t;
+            //try
+            //{
+            t = a.GetType(NameSpace, true);
+            //}
+            //catch (Exception e)
+            //{
+            //    m_log.Error("ScriptEngine", "Error initializing type \"" + NameSpace + "\" from \"" + FileName + "\": " + e.ToString());
+            //}
+
+            ScriptEngineInterface ret;
+            //try
+            //{
+            ret = (ScriptEngineInterface) Activator.CreateInstance(t);
+            //}
+            //catch (Exception e)
+            //{
+            //    m_log.Error("ScriptEngine", "Error initializing type \"" + NameSpace + "\" from \"" + FileName + "\": " + e.ToString());
+            //}
+
+            return ret;
+        }
+    }
+}
+
diff --git a/OpenSim/Grid/ScriptServer/ScriptServer.cs b/OpenSim/Grid/ScriptServer/ScriptServer.cs
new file mode 100644
index 0000000..2c26027
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/ScriptServer.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace OpenSim.Grid.ScriptServer
+{
+    class ScriptServer
+    {
+        public RegionScriptDaemon RegionScriptDaemon;           // Listen for incoming from region
+        public RegionsManager RegionManager;                    // Handle regions
+        public ScriptEngineLoader ScriptEngineLoader;           // Loads scriptengines
+
+        public ScriptServer()
+        {
+            RegionScriptDaemon = new RegionScriptDaemon(this);
+            RegionManager = new RegionsManager(this);
+            //ScriptEngineLoader = new ScriptEngineLoader(this);
+        }
+
+        ~ScriptServer()
+        {
+        }
+
+
+
+    }
+}
diff --git a/OpenSim/Grid/ScriptServer/ScriptServer.csproj b/OpenSim/Grid/ScriptServer/ScriptServer.csproj
new file mode 100644
index 0000000..6968848
--- /dev/null
+++ b/OpenSim/Grid/ScriptServer/ScriptServer.csproj
@@ -0,0 +1,47 @@
+<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.50727</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{8FF1D8B6-9E2F-47AB-A26A-F44CED20CD0E}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>ScriptServer</RootNamespace>
+    <AssemblyName>ScriptServer</AssemblyName>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
\ No newline at end of file
-- 
cgit v1.1