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
|
||||
{
|
||||
string State();
|
||||
|
||||
double llSin(double f);
|
||||
double llCos(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();
|
||||
parameters.IncludeDebugInformation = true;
|
||||
// Add all available assemblies
|
||||
foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
|
||||
{
|
||||
parameters.ReferencedAssemblies.Add(asm.Location);
|
||||
}
|
||||
//foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies())
|
||||
//{
|
||||
// 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.GenerateExecutable = false;
|
||||
parameters.OutputAssembly = OutFile;
|
||||
|
|
|
@ -228,7 +228,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL
|
|||
|
||||
// Add namespace, class name and inheritance
|
||||
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 += Script;
|
||||
Return += "} }\r\n";
|
||||
|
|
|
@ -7,21 +7,22 @@ using System.Threading;
|
|||
|
||||
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 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;
|
||||
|
||||
|
|
|
@ -14,7 +14,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
|
|||
/// <summary>
|
||||
/// Contains all LSL ll-functions. This class will be in Default AppDomain.
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class LSL_BuiltIn_Commands: LSL_BuiltIn_Commands_Interface
|
||||
{
|
||||
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
|
||||
{
|
||||
|
|
|
@ -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>>
|
||||
// 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>>();
|
||||
public Scene World
|
||||
{
|
||||
|
@ -221,23 +223,18 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
|||
/// <returns></returns>
|
||||
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");
|
||||
//Console.WriteLine("Base directory: " + AppDomain.CurrentDomain.BaseDirectory);
|
||||
//LSL_BaseClass mbrt = (LSL_BaseClass)FreeAppDomain.CreateInstanceAndUnwrap(FileName, "SecondLife.Script");
|
||||
Console.WriteLine("Base directory: " + AppDomain.CurrentDomain.BaseDirectory);
|
||||
|
||||
//LSL_BaseClass mbrt = (LSL_BaseClass)FreeAppDomain.CreateInstanceFromAndUnwrap(FileName, "SecondLife.Script");
|
||||
//Type mytype = mbrt.GetType();
|
||||
LSL_BaseClass mbrt = (LSL_BaseClass)FreeAppDomain.CreateInstanceFromAndUnwrap(FileName, "SecondLife.Script");
|
||||
Type mytype = mbrt.GetType();
|
||||
|
||||
//Console.WriteLine("is proxy={0}", RemotingServices.IsTransparentProxy(mbrt));
|
||||
Console.WriteLine("is proxy={0}", RemotingServices.IsTransparentProxy(mbrt));
|
||||
|
||||
|
||||
////mbrt.Start();
|
||||
//return mbrt;
|
||||
//mbrt.Start();
|
||||
return mbrt;
|
||||
|
||||
|
||||
|
||||
|
@ -301,11 +298,11 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
|||
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
|
||||
{
|
||||
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)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue