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; }
IConfigSource ConfigSource { get; }
string ScriptEngineName { get; }
string ScriptEnginePath { get; }
IScriptApi GetApi(UUID itemID, string name);
}
}

View File

@ -32,7 +32,7 @@ using System.Reflection;
namespace OpenSim.Region.ScriptEngine.Shared
{
[Serializable]
public class AssemblyResolver
public class AssemblyResolver : MarshalByRefObject
{
public static Assembly OnAssemblyResolve(object sender,
ResolveEventArgs args)
@ -42,9 +42,10 @@ namespace OpenSim.Region.ScriptEngine.Shared
AppDomain myDomain = (AppDomain)sender;
string dirName = myDomain.FriendlyName;
string ScriptEnginesPath = myDomain.SetupInformation.PrivateBinPath;
string[] pathList = new string[] {"bin", "ScriptEngines",
Path.Combine("ScriptEngines", dirName)};
string[] pathList = new string[] {"bin", ScriptEnginesPath,
Path.Combine(ScriptEnginesPath, dirName)};
string assemblyName = args.Name;
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 string FilePrefix;
private string ScriptEnginesPath = "ScriptEngines";
private string ScriptEnginesPath = null;
// mapping between LSL and C# line/column numbers
private ICodeConverter LSL_Converter;
@ -95,7 +95,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.CodeTools
public Compiler(IScriptEngine scriptEngine)
{
m_scriptEngine = scriptEngine;
m_scriptEngine = scriptEngine;;
ScriptEnginesPath = scriptEngine.ScriptEnginePath;
ReadConfig();
}

View File

@ -88,6 +88,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
private IXmlRpcRouter m_XmlRpcRouter;
private int m_EventLimit;
private bool m_KillTimedOutScripts;
private string m_ScriptEnginesPath = null;
private static List<XEngine> m_ScriptEngines =
new List<XEngine>();
@ -156,6 +157,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
get { return m_ScriptConfig; }
}
public string ScriptEnginePath
{
get { return m_ScriptEnginesPath; }
}
public IConfigSource ConfigSource
{
get { return m_ConfigSource; }
@ -213,6 +219,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
m_EventLimit = m_ScriptConfig.GetInt("EventLimit", 30);
m_KillTimedOutScripts = m_ScriptConfig.GetBoolean("KillTimedOutScripts", false);
m_SaveTime = m_ScriptConfig.GetInt("SaveInterval", 120) * 1000;
m_ScriptEnginesPath = m_ScriptConfig.GetString("ScriptEnginesPath", "ScriptEngines");
m_Prio = ThreadPriority.BelowNormal;
switch (priority)
@ -719,9 +726,9 @@ namespace OpenSim.Region.ScriptEngine.XEngine
try
{
AppDomainSetup appSetup = new AppDomainSetup();
// appSetup.ApplicationBase = Path.Combine(
// "ScriptEngines",
// m_Scene.RegionInfo.RegionID.ToString());
appSetup.PrivateBinPath = Path.Combine(
m_ScriptEnginesPath,
m_Scene.RegionInfo.RegionID.ToString());
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
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.MaxWorkerThreads = maxThreads;
startInfo.MinWorkerThreads = minThreads;
startInfo.ThreadPriority = threadPriority;
startInfo.ThreadPriority = threadPriority;;
startInfo.StackSize = stackSize;
startInfo.StartSuspended = true;
@ -1110,8 +1117,8 @@ namespace OpenSim.Region.ScriptEngine.XEngine
if (!(sender is System.AppDomain))
return null;
string[] pathList = new string[] {"bin", "ScriptEngines",
Path.Combine("ScriptEngines",
string[] pathList = new string[] {"bin", m_ScriptEnginesPath,
Path.Combine(m_ScriptEnginesPath,
m_Scene.RegionInfo.RegionID.ToString())};
string assemblyName = args.Name;
@ -1485,7 +1492,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
string fn = assemE.GetAttribute("Filename");
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);
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");
try
@ -1551,7 +1558,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
{
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"));
try

View File

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

View File

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