From 260145a7e62d9d30bd74ee21288d36c95c8b0443 Mon Sep 17 00:00:00 2001 From: Tedd Hansen Date: Wed, 9 Jan 2008 17:13:02 +0000 Subject: Dynamic loading of ScriptEngine in ScriptServer ScriptServer event pipe (OpenSim->ScriptServer->ScriptEngine) should in theory be done --- OpenSim/Grid/ScriptServer/RemotingObject.cs | 10 +- OpenSim/Grid/ScriptServer/RemotingServer.cs | 7 +- .../ScriptEngineManager/ScriptEngineInterface.cs | 38 ------- .../ScriptEngineManager/ScriptEngineLoader.cs | 124 --------------------- .../ScriptServer/ScriptEnginesManager.cs | 13 +-- OpenSim/Grid/ScriptServer/ScriptServerMain.cs | 21 +++- .../ScriptEngine/Common/ScriptServerInterfaces.cs | 4 + .../ScriptEngine/DotNetEngine/ScriptEngine.cs | 8 +- 8 files changed, 37 insertions(+), 188 deletions(-) delete mode 100644 OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineManager/ScriptEngineInterface.cs delete mode 100644 OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineManager/ScriptEngineLoader.cs diff --git a/OpenSim/Grid/ScriptServer/RemotingObject.cs b/OpenSim/Grid/ScriptServer/RemotingObject.cs index 915d020..54aff7a 100644 --- a/OpenSim/Grid/ScriptServer/RemotingObject.cs +++ b/OpenSim/Grid/ScriptServer/RemotingObject.cs @@ -10,18 +10,10 @@ namespace OpenSim.Grid.ScriptServer { // This object will be exposed over remoting. It is a singleton, so it exists only in as one instance. - // Expose ScriptEngine directly for now ... this is not very secure :) - // NOTE! CURRENTLY JUST HARDWIRED DOTNETENGINE! - //private OpenSim.Region.ScriptEngine.DotNetEngine.ScriptEngine SE = - // new OpenSim.Region.ScriptEngine.DotNetEngine.ScriptEngine(); - //public OpenSim.Region.ScriptEngine.Common.ScriptServerInterfaces.RemoteEvents Events = - // (OpenSim.Region.ScriptEngine.Common.ScriptServerInterfaces.RemoteEvents)SE.m_EventManager; - - //private ScriptServerInterfaces.RemoteEvents _events = new abc; ScriptServerInterfaces.RemoteEvents ScriptServerInterfaces.ServerRemotingObject.Events() { - return null; + return ScriptServerMain.Engine.EventManager(); } } } diff --git a/OpenSim/Grid/ScriptServer/RemotingServer.cs b/OpenSim/Grid/ScriptServer/RemotingServer.cs index 33d8dc8..eb29740 100644 --- a/OpenSim/Grid/ScriptServer/RemotingServer.cs +++ b/OpenSim/Grid/ScriptServer/RemotingServer.cs @@ -4,17 +4,18 @@ using System.Text; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; +using OpenSim.Region.ScriptEngine.Common; namespace OpenSim.Grid.ScriptServer { class RemotingServer { - - public void CreateServer(int port, string instanceName) + TcpChannel channel; + public RemotingServer(int port, string instanceName) { // Create an instance of a channel - TcpChannel channel = new TcpChannel(port); + channel = new TcpChannel(port); ChannelServices.RegisterChannel(channel, true); // Register as an available service with the name HelloWorld diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineManager/ScriptEngineInterface.cs b/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineManager/ScriptEngineInterface.cs deleted file mode 100644 index 518c198..0000000 --- a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineManager/ScriptEngineInterface.cs +++ /dev/null @@ -1,38 +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 OpenSim.Framework.Console; - -namespace OpenSim.Grid.ScriptServer -{ - public interface ScriptEngineInterface - { - void InitializeEngine(RegionConnectionManager Region, LogBase logger); - void Shutdown(); -// void StartScript(string ScriptID, IScriptHost ObjectID); - } -} \ No newline at end of file diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineManager/ScriptEngineLoader.cs b/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineManager/ScriptEngineLoader.cs deleted file mode 100644 index 7f39931..0000000 --- a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEngineManager/ScriptEngineLoader.cs +++ /dev/null @@ -1,124 +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.IO; -using System.Reflection; -using OpenSim.Framework.Console; - -namespace OpenSim.Grid.ScriptServer -{ - internal 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; - } - - /// - /// Does actual loading and initialization of script Assembly - /// - /// AppDomain to load script into - /// FileName of script assembly (.dll) - /// - 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; - } - } -} \ No newline at end of file diff --git a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEnginesManager.cs b/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEnginesManager.cs index 7b49127..3bfca87 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEnginesManager.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServer/ScriptEnginesManager.cs @@ -28,14 +28,15 @@ using System.Collections.Generic; using OpenSim.Framework.Console; +using OpenSim.Region.ScriptEngine.Common; -namespace OpenSim.Grid.ScriptServer +namespace OpenSim.Grid.ScriptServer.ScriptServer { internal class ScriptEngineManager { private LogBase m_log; private ScriptEngineLoader ScriptEngineLoader; - private List scriptEngines = new List(); + private List scriptEngines = new List(); private ScriptServerMain m_ScriptServerMain; // Initialize @@ -44,23 +45,21 @@ namespace OpenSim.Grid.ScriptServer m_ScriptServerMain = scm; m_log = logger; ScriptEngineLoader = new ScriptEngineLoader(m_log); - - // Temp - we should not load during initialize... Loading should be done later. - LoadEngine("DotNetScriptEngine"); } ~ScriptEngineManager() { } - public void LoadEngine(string engineName) + public ScriptServerInterfaces.ScriptEngine LoadEngine(string engineName) { // Load and add to list of ScriptEngines - ScriptEngineInterface sei = ScriptEngineLoader.LoadScriptEngine(engineName); + ScriptServerInterfaces.ScriptEngine sei = ScriptEngineLoader.LoadScriptEngine(engineName); if (sei != null) { scriptEngines.Add(sei); } + return sei; } } } \ No newline at end of file diff --git a/OpenSim/Grid/ScriptServer/ScriptServerMain.cs b/OpenSim/Grid/ScriptServer/ScriptServerMain.cs index 884a09e..568c12b 100644 --- a/OpenSim/Grid/ScriptServer/ScriptServerMain.cs +++ b/OpenSim/Grid/ScriptServer/ScriptServerMain.cs @@ -29,6 +29,8 @@ using System.IO; using OpenSim.Framework; using OpenSim.Framework.Console; +using OpenSim.Grid.ScriptServer.ScriptServer; +using OpenSim.Region.ScriptEngine.Common; namespace OpenSim.Grid.ScriptServer { @@ -41,19 +43,26 @@ namespace OpenSim.Grid.ScriptServer private readonly string m_logFilename = ("region-console.log"); private LogBase m_log; + // TEMP + public static ScriptServerInterfaces.ScriptEngine Engine; + // Objects we use internal RegionCommManager RegionScriptDaemon; // Listen for incoming from region - //internal ScriptEngineManager ScriptEngines; // Loads scriptengines + internal ScriptEngineManager ScriptEngines; // Loads scriptengines internal RemotingServer m_RemotingServer; public ScriptServerMain() { m_log = CreateLog(); - RegionScriptDaemon = new RegionCommManager(this, m_log); - //ScriptEngines = new ScriptEngineManager(this, m_log); - m_RemotingServer = new RemotingServer(); - m_RemotingServer.CreateServer(listenPort, "DotNetEngine"); + // Set up script engine mananger + ScriptEngines = new ScriptEngineManager(this, m_log); + + // Load DotNetEngine + Engine = ScriptEngines.LoadEngine("DotNetEngine"); + + // Set up server + m_RemotingServer = new RemotingServer(listenPort, "DotNetEngine"); System.Console.ReadLine(); } @@ -68,7 +77,7 @@ namespace OpenSim.Grid.ScriptServer Directory.CreateDirectory(Util.logDir()); } - return new LogBase((Path.Combine(Util.logDir(), m_logFilename)), "Region", this, true); + return new LogBase((Path.Combine(Util.logDir(), m_logFilename)), "ScriptServer", this, true); } public void RunCmd(string command, string[] cmdparams) diff --git a/OpenSim/Region/ScriptEngine/Common/ScriptServerInterfaces.cs b/OpenSim/Region/ScriptEngine/Common/ScriptServerInterfaces.cs index 6ac7c65..14b97b8 100644 --- a/OpenSim/Region/ScriptEngine/Common/ScriptServerInterfaces.cs +++ b/OpenSim/Region/ScriptEngine/Common/ScriptServerInterfaces.cs @@ -47,6 +47,10 @@ namespace OpenSim.Region.ScriptEngine.Common { RemoteEvents Events(); } + public interface ScriptEngine + { + RemoteEvents EventManager(); + } } } diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs index 11419be..604a5f3 100644 --- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs +++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptEngine.cs @@ -31,6 +31,7 @@ using Nini.Config; using OpenSim.Framework.Console; using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Scenes; +using OpenSim.Region.ScriptEngine.Common; namespace OpenSim.Region.ScriptEngine.DotNetEngine { @@ -39,7 +40,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine /// /// [Serializable] - public class ScriptEngine : IRegionModule + public class ScriptEngine : IRegionModule, OpenSim.Region.ScriptEngine.Common.ScriptServerInterfaces.ScriptEngine { public Scene World; public EventManager m_EventManager; // Handles and queues incoming events from OpenSim @@ -86,6 +87,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine // We are shutting down } + ScriptServerInterfaces.RemoteEvents ScriptServerInterfaces.ScriptEngine.EventManager() + { + return this.m_EventManager; + } #region IRegionModule @@ -114,5 +119,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine } #endregion + } } \ No newline at end of file -- cgit v1.1