From 1d41fd4984308a4b811f40aca18a90a79f243020 Mon Sep 17 00:00:00 2001
From: Tedd Hansen
Date: Sat, 18 Aug 2007 19:54:04 +0000
Subject: Working on AppDomains. Scripting is now officially broken. :]
---
.../Common/LSL_BuiltIn_Commands_Interface.cs | 2 ++
.../ScriptEngine/Common/Properties/AssemblyInfo.cs | 33 +++++++++++++++++++++
.../DotNetEngine/Compiler/LSL/Compiler.cs | 11 ++++---
.../DotNetEngine/Compiler/LSL/LSL2CSConverter.cs | 2 +-
.../DotNetEngine/Compiler/LSL/LSL_BaseClass.cs | 11 +++----
.../Compiler/Server_API/LSL_BuiltIn_Commands.cs | 6 ++--
.../ScriptEngine/DotNetEngine/MarshalByRefType.cs | 34 ----------------------
.../ScriptEngine/DotNetEngine/ScriptManager.cs | 25 +++++++---------
8 files changed, 64 insertions(+), 60 deletions(-)
create mode 100644 OpenSim/Region/ScriptEngine/Common/Properties/AssemblyInfo.cs
delete mode 100644 OpenSim/Region/ScriptEngine/DotNetEngine/MarshalByRefType.cs
(limited to 'OpenSim')
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
index 58ade0b..c56ff2f 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands_Interface.cs
@@ -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);
diff --git a/OpenSim/Region/ScriptEngine/Common/Properties/AssemblyInfo.cs b/OpenSim/Region/ScriptEngine/Common/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..def3910
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/Common/Properties/AssemblyInfo.cs
@@ -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")]
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
index 6e992be..4c2ceb0 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/Compiler.cs
@@ -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;
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
index 2427cc2..81f8e2d 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL2CSConverter.cs
@@ -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";
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
index bdae95d..eb3d871 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/LSL/LSL_BaseClass.cs
@@ -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;
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
index 8c2e799..6401163 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/Compiler/Server_API/LSL_BuiltIn_Commands.cs
@@ -14,7 +14,6 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine.Compiler
///
/// Contains all LSL ll-functions. This class will be in Default AppDomain.
///
- [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
{
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/MarshalByRefType.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/MarshalByRefType.cs
deleted file mode 100644
index 36bb146..0000000
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/MarshalByRefType.cs
+++ /dev/null
@@ -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
- );
- }
- }
-}
diff --git a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs
index 1d2689d..2cbdfd3 100644
--- a/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs
+++ b/OpenSim/Region/ScriptEngine/DotNetEngine/ScriptManager.cs
@@ -65,6 +65,8 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
// Object>
+ // IMPORTANT: Types and MemberInfo-derived objects require a LOT of memory.
+ // Instead use RuntimeTypeHandle, RuntimeFieldHandle and RunTimeHandle (IntPtr) instead!
internal Dictionary> Scripts = new Dictionary>();
public Scene World
{
@@ -221,23 +223,18 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
///
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)
{
--
cgit v1.1