Add configurable path to script engine assemblies

Adding ability to place script engine assemblies outside
	the codebase directories.

	Uses new [XEngine] option: ScriptEnginesPath = "path_to_assemblies"

Signed-off-by: Melanie <melanie@t-data.com>
viewer-2-initial-appearance
BlueWall 2010-09-25 16:22:18 -04:00 committed by Melanie
parent d8ae287ebf
commit 4f25b73b57
6 changed files with 33 additions and 16 deletions

View File

@ -82,6 +82,7 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
IConfig Config { get; } IConfig Config { get; }
IConfigSource ConfigSource { get; } IConfigSource ConfigSource { get; }
string ScriptEngineName { get; } string ScriptEngineName { get; }
string ScriptEnginePath { get; }
IScriptApi GetApi(UUID itemID, string name); IScriptApi GetApi(UUID itemID, string name);
} }
} }

View File

@ -32,7 +32,7 @@ using System.Reflection;
namespace OpenSim.Region.ScriptEngine.Shared namespace OpenSim.Region.ScriptEngine.Shared
{ {
[Serializable] [Serializable]
public class AssemblyResolver public class AssemblyResolver : MarshalByRefObject
{ {
public static Assembly OnAssemblyResolve(object sender, public static Assembly OnAssemblyResolve(object sender,
ResolveEventArgs args) ResolveEventArgs args)
@ -42,9 +42,10 @@ namespace OpenSim.Region.ScriptEngine.Shared
AppDomain myDomain = (AppDomain)sender; AppDomain myDomain = (AppDomain)sender;
string dirName = myDomain.FriendlyName; string dirName = myDomain.FriendlyName;
string ScriptEnginesPath = myDomain.SetupInformation.PrivateBinPath;
string[] pathList = new string[] {"bin", "ScriptEngines", string[] pathList = new string[] {"bin", ScriptEnginesPath,
Path.Combine("ScriptEngines", dirName)}; Path.Combine(ScriptEnginesPath, dirName)};
string assemblyName = args.Name; string assemblyName = args.Name;
if (assemblyName.IndexOf(",") != -1) if (assemblyName.IndexOf(",") != -1)

View File

@ -72,7 +72,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
private Dictionary<string, enumCompileType> LanguageMapping = new Dictionary<string, enumCompileType>(StringComparer.CurrentCultureIgnoreCase); private Dictionary<string, enumCompileType> LanguageMapping = new Dictionary<string, enumCompileType>(StringComparer.CurrentCultureIgnoreCase);
private string FilePrefix; private string FilePrefix;
private string ScriptEnginesPath = "ScriptEngines"; private string ScriptEnginesPath = null;
// mapping between LSL and C# line/column numbers // mapping between LSL and C# line/column numbers
private ICodeConverter LSL_Converter; private ICodeConverter LSL_Converter;
@ -95,7 +95,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
public Compiler(IScriptEngine scriptEngine) public Compiler(IScriptEngine scriptEngine)
{ {
m_scriptEngine = scriptEngine; m_scriptEngine = scriptEngine;;
ScriptEnginesPath = scriptEngine.ScriptEnginePath;
ReadConfig(); ReadConfig();
} }

View File

@ -88,6 +88,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
private IXmlRpcRouter m_XmlRpcRouter; private IXmlRpcRouter m_XmlRpcRouter;
private int m_EventLimit; private int m_EventLimit;
private bool m_KillTimedOutScripts; private bool m_KillTimedOutScripts;
private string m_ScriptEnginesPath = null;
private static List<XEngine> m_ScriptEngines = private static List<XEngine> m_ScriptEngines =
new List<XEngine>(); new List<XEngine>();
@ -156,6 +157,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
get { return m_ScriptConfig; } get { return m_ScriptConfig; }
} }
public string ScriptEnginePath
{
get { return m_ScriptEnginesPath; }
}
public IConfigSource ConfigSource public IConfigSource ConfigSource
{ {
get { return m_ConfigSource; } get { return m_ConfigSource; }
@ -213,6 +219,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
m_EventLimit = m_ScriptConfig.GetInt("EventLimit", 30); m_EventLimit = m_ScriptConfig.GetInt("EventLimit", 30);
m_KillTimedOutScripts = m_ScriptConfig.GetBoolean("KillTimedOutScripts", false); m_KillTimedOutScripts = m_ScriptConfig.GetBoolean("KillTimedOutScripts", false);
m_SaveTime = m_ScriptConfig.GetInt("SaveInterval", 120) * 1000; m_SaveTime = m_ScriptConfig.GetInt("SaveInterval", 120) * 1000;
m_ScriptEnginesPath = m_ScriptConfig.GetString("ScriptEnginesPath", "ScriptEngines");
m_Prio = ThreadPriority.BelowNormal; m_Prio = ThreadPriority.BelowNormal;
switch (priority) switch (priority)
@ -410,7 +417,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
return 0; return 0;
} }
public Type ReplaceableInterface public Type ReplaceableInterface
{ {
get { return null; } get { return null; }
} }
@ -719,9 +726,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
try try
{ {
AppDomainSetup appSetup = new AppDomainSetup(); AppDomainSetup appSetup = new AppDomainSetup();
// appSetup.ApplicationBase = Path.Combine( appSetup.PrivateBinPath = Path.Combine(
// "ScriptEngines", m_ScriptEnginesPath,
// m_Scene.RegionInfo.RegionID.ToString()); m_Scene.RegionInfo.RegionID.ToString());
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence; Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence); Evidence evidence = new Evidence(baseEvidence);
@ -965,7 +972,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
startInfo.IdleTimeout = idleTimeout*1000; // convert to seconds as stated in .ini startInfo.IdleTimeout = idleTimeout*1000; // convert to seconds as stated in .ini
startInfo.MaxWorkerThreads = maxThreads; startInfo.MaxWorkerThreads = maxThreads;
startInfo.MinWorkerThreads = minThreads; startInfo.MinWorkerThreads = minThreads;
startInfo.ThreadPriority = threadPriority; startInfo.ThreadPriority = threadPriority;;
startInfo.StackSize = stackSize; startInfo.StackSize = stackSize;
startInfo.StartSuspended = true; startInfo.StartSuspended = true;
@ -1110,8 +1117,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
if (!(sender is System.AppDomain)) if (!(sender is System.AppDomain))
return null; return null;
string[] pathList = new string[] {"bin", "ScriptEngines", string[] pathList = new string[] {"bin", m_ScriptEnginesPath,
Path.Combine("ScriptEngines", Path.Combine(m_ScriptEnginesPath,
m_Scene.RegionInfo.RegionID.ToString())}; m_Scene.RegionInfo.RegionID.ToString())};
string assemblyName = args.Name; string assemblyName = args.Name;
@ -1485,7 +1492,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
string fn = assemE.GetAttribute("Filename"); string fn = assemE.GetAttribute("Filename");
string base64 = assemE.InnerText; string base64 = assemE.InnerText;
string path = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString()); string path = Path.Combine(m_ScriptEnginesPath, World.RegionInfo.RegionID.ToString());
path = Path.Combine(path, fn); path = Path.Combine(path, fn);
if (!File.Exists(path)) if (!File.Exists(path))
@ -1525,7 +1532,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
} }
} }
string statepath = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString()); string statepath = Path.Combine(m_ScriptEnginesPath, World.RegionInfo.RegionID.ToString());
statepath = Path.Combine(statepath, itemID.ToString() + ".state"); statepath = Path.Combine(statepath, itemID.ToString() + ".state");
try try
@ -1551,7 +1558,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
{ {
XmlElement mapE = (XmlElement)mapL[0]; XmlElement mapE = (XmlElement)mapL[0];
string mappath = Path.Combine("ScriptEngines", World.RegionInfo.RegionID.ToString()); string mappath = Path.Combine(m_ScriptEnginesPath, World.RegionInfo.RegionID.ToString());
mappath = Path.Combine(mappath, mapE.GetAttribute("Filename")); mappath = Path.Combine(mappath, mapE.GetAttribute("Filename"));
try try

View File

@ -545,6 +545,10 @@
;; false to allow script controlled underground positioning of ;; false to allow script controlled underground positioning of
;; prims ;; prims
; DisableUndergroundMovement = true ; DisableUndergroundMovement = true
;
; Path to script engine assemblies
; Default is ./bin/ScriptEngines
; ScriptEnginesPath = "ScriptEngines"
[MRM] [MRM]
;; Enables the Mini Region Modules Script Engine. ;; Enables the Mini Region Modules Script Engine.

View File

@ -999,7 +999,10 @@
; false to allow script controlled underground positioning of ; false to allow script controlled underground positioning of
; prims ; prims
; DisableUndergroundMovement = true ; DisableUndergroundMovement = true
;
; Path to script engine assemblies
; Default is ./bin/ScriptEngines
; ScriptEnginesPath = "ScriptEngines"
[OpenGridProtocol] [OpenGridProtocol]
;These are the settings for the Open Grid Protocol.. the Agent Domain, Region Domain, you know.. ;These are the settings for the Open Grid Protocol.. the Agent Domain, Region Domain, you know..