Working on AppDomains. Scripting is now officially broken. :]
parent
6d10c65358
commit
1d41fd4984
|
@ -34,6 +34,8 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
{
|
{
|
||||||
public interface LSL_BuiltIn_Commands_Interface
|
public interface LSL_BuiltIn_Commands_Interface
|
||||||
{
|
{
|
||||||
|
string State();
|
||||||
|
|
||||||
double llSin(double f);
|
double llSin(double f);
|
||||||
double llCos(double f);
|
double llCos(double f);
|
||||||
double llTan(double f);
|
double llTan(double f);
|
||||||
|
|
|
@ -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.Region.ScriptEngine.Common")]
|
||||||
|
[assembly: AssemblyDescription("")]
|
||||||
|
[assembly: AssemblyConfiguration("")]
|
||||||
|
[assembly: AssemblyCompany("")]
|
||||||
|
[assembly: AssemblyProduct("OpenSim.Region.ScriptEngine.Common")]
|
||||||
|
[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("0bf07c53-ae51-487f-a907-e9b30c251602")]
|
||||||
|
|
||||||
|
// 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")]
|
|
@ -52,10 +52,13 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
||||||
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
|
System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();
|
||||||
parameters.IncludeDebugInformation = true;
|
parameters.IncludeDebugInformation = true;
|
||||||
// Add all available assemblies
|
// Add all available assemblies
|
||||||
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
|
//foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
|
||||||
{
|
//{
|
||||||
parameters.ReferencedAssemblies.Add(asm.Location);
|
// Console.WriteLine("Adding assembly: " + asm.Location);
|
||||||
}
|
// parameters.ReferencedAssemblies.Add(asm.Location);
|
||||||
|
//}
|
||||||
|
|
||||||
|
parameters.ReferencedAssemblies.Add(this.GetType().Assembly.CodeBase);
|
||||||
//parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment");
|
//parameters.ReferencedAssemblies.Add("OpenSim.Region.Environment");
|
||||||
parameters.GenerateExecutable = false;
|
parameters.GenerateExecutable = false;
|
||||||
parameters.OutputAssembly = OutFile;
|
parameters.OutputAssembly = OutFile;
|
||||||
|
|
|
@ -228,7 +228,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
||||||
|
|
||||||
// Add namespace, class name and inheritance
|
// Add namespace, class name and inheritance
|
||||||
Return = "namespace SecondLife {\r\n";
|
Return = "namespace SecondLife {\r\n";
|
||||||
Return += "public class Script : OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass {\r\n";
|
Return += "[Serializable] public class Script : OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass {\r\n";
|
||||||
Return += @"public Script() { }"+"\r\n";
|
Return += @"public Script() { }"+"\r\n";
|
||||||
Return += Script;
|
Return += Script;
|
||||||
Return += "} }\r\n";
|
Return += "} }\r\n";
|
||||||
|
|
|
@ -7,21 +7,22 @@ using System.Threading;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
||||||
{
|
{
|
||||||
public class LSL_BaseClass : MarshalByRefObject, LSL_BuiltIn_Commands_Interface
|
[Serializable]
|
||||||
|
public class LSL_BaseClass : LSL_BuiltIn_Commands_Interface
|
||||||
{
|
{
|
||||||
|
|
||||||
public LSL_BuiltIn_Commands m_LSL_Functions;
|
public LSL_BuiltIn_Commands_Interface m_LSL_Functions;
|
||||||
|
|
||||||
public LSL_BaseClass()
|
public LSL_BaseClass()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
public string State
|
public string State()
|
||||||
{
|
{
|
||||||
get { return m_LSL_Functions.State; }
|
return m_LSL_Functions.State();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Start(LSL_BuiltIn_Commands LSL_Functions)
|
public void Start(LSL_BuiltIn_Commands_Interface LSL_Functions)
|
||||||
{
|
{
|
||||||
m_LSL_Functions = LSL_Functions;
|
m_LSL_Functions = LSL_Functions;
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Contains all LSL ll-functions. This class will be in Default AppDomain.
|
/// Contains all LSL ll-functions. This class will be in Default AppDomain.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Serializable]
|
|
||||||
public class LSL_BuiltIn_Commands: LSL_BuiltIn_Commands_Interface
|
public class LSL_BuiltIn_Commands: LSL_BuiltIn_Commands_Interface
|
||||||
{
|
{
|
||||||
private System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
|
private System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding();
|
||||||
|
@ -30,7 +29,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public string State = "default";
|
private string m_state = "default";
|
||||||
|
public string State() {
|
||||||
|
return m_state;
|
||||||
|
}
|
||||||
|
|
||||||
public Scene World
|
public Scene World
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
|
||||||
{
|
|
||||||
// Because this class is derived from MarshalByRefObject, a proxy
|
|
||||||
// to a MarshalByRefType object can be returned across an AppDomain
|
|
||||||
// boundary.
|
|
||||||
public class MarshalByRefType : MarshalByRefObject
|
|
||||||
{
|
|
||||||
// Call this method via a proxy.
|
|
||||||
public void SomeMethod(string callingDomainName)
|
|
||||||
{
|
|
||||||
// Get this AppDomain's settings and display some of them.
|
|
||||||
AppDomainSetup ads = AppDomain.CurrentDomain.SetupInformation;
|
|
||||||
Console.WriteLine("AppName={0}, AppBase={1}, ConfigFile={2}",
|
|
||||||
ads.ApplicationName,
|
|
||||||
ads.ApplicationBase,
|
|
||||||
ads.ConfigurationFile
|
|
||||||
);
|
|
||||||
|
|
||||||
// Display the name of the calling AppDomain and the name
|
|
||||||
// of the second domain.
|
|
||||||
// NOTE: The application's thread has transitioned between
|
|
||||||
// AppDomains.
|
|
||||||
Console.WriteLine("Calling from '{0}' to '{1}'.",
|
|
||||||
callingDomainName,
|
|
||||||
Thread.GetDomain().FriendlyName
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -65,6 +65,8 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
|
|
||||||
|
|
||||||
// Object<string, Script<string, script>>
|
// Object<string, Script<string, script>>
|
||||||
|
// IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory.
|
||||||
|
// Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead!
|
||||||
internal Dictionary<IScriptHost, Dictionary<string, OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass>> Scripts = new Dictionary<IScriptHost, Dictionary<string, OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass>>();
|
internal Dictionary<IScriptHost, Dictionary<string, OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass>> Scripts = new Dictionary<IScriptHost, Dictionary<string, OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass>>();
|
||||||
public Scene World
|
public Scene World
|
||||||
{
|
{
|
||||||
|
@ -221,23 +223,18 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass LoadAndInitAssembly(AppDomain FreeAppDomain, string FileName, IScriptHost host)
|
private OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL.LSL_BaseClass LoadAndInitAssembly(AppDomain FreeAppDomain, string FileName, IScriptHost host)
|
||||||
{
|
{
|
||||||
//object[] ADargs = new object[]
|
|
||||||
// {
|
|
||||||
// this,
|
|
||||||
// host
|
|
||||||
// };
|
|
||||||
|
|
||||||
////LSL_BaseClass mbrt = (LSL_BaseClass)FreeAppDomain.CreateInstanceAndUnwrap(FileName, "SecondLife.Script");
|
//LSL_BaseClass mbrt = (LSL_BaseClass)FreeAppDomain.CreateInstanceAndUnwrap(FileName, "SecondLife.Script");
|
||||||
//Console.WriteLine("Base directory: " + AppDomain.CurrentDomain.BaseDirectory);
|
Console.WriteLine("Base directory: " + AppDomain.CurrentDomain.BaseDirectory);
|
||||||
|
|
||||||
//LSL_BaseClass mbrt = (LSL_BaseClass)FreeAppDomain.CreateInstanceFromAndUnwrap(FileName, "SecondLife.Script");
|
LSL_BaseClass mbrt = (LSL_BaseClass)FreeAppDomain.CreateInstanceFromAndUnwrap(FileName, "SecondLife.Script");
|
||||||
//Type mytype = mbrt.GetType();
|
Type mytype = mbrt.GetType();
|
||||||
|
|
||||||
//Console.WriteLine("is proxy={0}", RemotingServices.IsTransparentProxy(mbrt));
|
Console.WriteLine("is proxy={0}", RemotingServices.IsTransparentProxy(mbrt));
|
||||||
|
|
||||||
|
|
||||||
////mbrt.Start();
|
//mbrt.Start();
|
||||||
//return mbrt;
|
return mbrt;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -301,11 +298,11 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
Type type = Script.GetType();
|
Type type = Script.GetType();
|
||||||
|
|
||||||
|
|
||||||
m_scriptEngine.Log.Verbose("ScriptEngine", "Invoke: \"" + Script.State + "_event_" + FunctionName + "\"");
|
m_scriptEngine.Log.Verbose("ScriptEngine", "Invoke: \"" + Script.State() + "_event_" + FunctionName + "\"");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
type.InvokeMember(Script.State + "_event_" + FunctionName, BindingFlags.InvokeMethod, null, Script, args);
|
type.InvokeMember(Script.State() + "_event_" + FunctionName, BindingFlags.InvokeMethod, null, Script, args);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue