From 1a47ff8094ee414a47aebd310826906d89428a09 Mon Sep 17 00:00:00 2001
From: Teravus Ovares
Date: Fri, 30 May 2008 12:27:06 +0000
Subject: * This is Melanie's XEngine script engine. I've not tested this real
well, however, it's confirmed to compile and OpenSimulator to run
successfully without this script engine active.
---
.../Region/ScriptEngine/XEngine/ExecutorBase.cs | 181 +++++++++++++++++++++
1 file changed, 181 insertions(+)
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs
(limited to 'OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs')
diff --git a/OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs b/OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs
new file mode 100644
index 0000000..3775372
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs
@@ -0,0 +1,181 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Runtime.Remoting.Lifetime;
+using OpenSim.Region.ScriptEngine.XEngine.Script;
+
+namespace OpenSim.Region.ScriptEngine.XEngine
+{
+ public abstract class ExecutorBase : MarshalByRefObject
+ {
+ ///
+ /// Contains the script to execute functions in.
+ ///
+ protected IScript m_Script;
+
+ protected Dictionary m_eventFlagsMap = new Dictionary();
+
+ [Flags]
+ public enum scriptEvents : int
+ {
+ None = 0,
+ attach = 1,
+ collision = 15,
+ collision_end = 32,
+ collision_start = 64,
+ control = 128,
+ dataserver = 256,
+ email = 512,
+ http_response = 1024,
+ land_collision = 2048,
+ land_collision_end = 4096,
+ land_collision_start = 8192,
+ at_target = 16384,
+ listen = 32768,
+ money = 65536,
+ moving_end = 131072,
+ moving_start = 262144,
+ not_at_rot_target = 524288,
+ not_at_target = 1048576,
+ remote_data = 8388608,
+ run_time_permissions = 268435456,
+ state_entry = 1073741824,
+ state_exit = 2,
+ timer = 4,
+ touch = 8,
+ touch_end = 536870912,
+ touch_start = 2097152,
+ object_rez = 4194304
+ }
+
+ ///
+ /// Create a new instance of ExecutorBase
+ ///
+ ///
+ public ExecutorBase(IScript Script)
+ {
+ m_Script = Script;
+ initEventFlags();
+ }
+
+ ///
+ /// Make sure our object does not timeout when in AppDomain. (Called by ILease base class)
+ ///
+ ///
+ public override Object InitializeLifetimeService()
+ {
+ //Console.WriteLine("Executor: InitializeLifetimeService()");
+ // return null;
+ ILease lease = (ILease)base.InitializeLifetimeService();
+
+ if (lease.CurrentState == LeaseState.Initial)
+ {
+ lease.InitialLeaseTime = TimeSpan.Zero; // TimeSpan.FromMinutes(1);
+ // lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
+ // lease.RenewOnCallTime = TimeSpan.FromSeconds(2);
+ }
+ return lease;
+ }
+
+ ///
+ /// Get current AppDomain
+ ///
+ /// Current AppDomain
+ public AppDomain GetAppDomain()
+ {
+ return AppDomain.CurrentDomain;
+ }
+
+ ///
+ /// Execute a specific function/event in script.
+ ///
+ /// Name of function to execute
+ /// Arguments to pass to function
+ public void ExecuteEvent(string FunctionName, object[] args)
+ {
+ DoExecuteEvent(FunctionName, args);
+ }
+
+ protected abstract void DoExecuteEvent(string FunctionName, object[] args);
+
+ ///
+ /// Compute the events handled by the current state of the script
+ ///
+ /// state mask
+ public scriptEvents GetStateEventFlags()
+ {
+ return DoGetStateEventFlags();
+ }
+
+ protected abstract scriptEvents DoGetStateEventFlags();
+
+ protected void initEventFlags()
+ {
+ // Initialize the table if it hasn't already been done
+ if (m_eventFlagsMap.Count > 0)
+ {
+ return;
+ }
+
+ m_eventFlagsMap.Add("attach", scriptEvents.attach);
+ // m_eventFlagsMap.Add("at_rot_target",(long)scriptEvents.at_rot_target);
+ m_eventFlagsMap.Add("at_target", scriptEvents.at_target);
+ // m_eventFlagsMap.Add("changed",(long)scriptEvents.changed);
+ m_eventFlagsMap.Add("collision", scriptEvents.collision);
+ m_eventFlagsMap.Add("collision_end", scriptEvents.collision_end);
+ m_eventFlagsMap.Add("collision_start", scriptEvents.collision_start);
+ m_eventFlagsMap.Add("control", scriptEvents.control);
+ m_eventFlagsMap.Add("dataserver", scriptEvents.dataserver);
+ m_eventFlagsMap.Add("email", scriptEvents.email);
+ m_eventFlagsMap.Add("http_response", scriptEvents.http_response);
+ m_eventFlagsMap.Add("land_collision", scriptEvents.land_collision);
+ m_eventFlagsMap.Add("land_collision_end", scriptEvents.land_collision_end);
+ m_eventFlagsMap.Add("land_collision_start", scriptEvents.land_collision_start);
+ // m_eventFlagsMap.Add("link_message",scriptEvents.link_message);
+ m_eventFlagsMap.Add("listen", scriptEvents.listen);
+ m_eventFlagsMap.Add("money", scriptEvents.money);
+ m_eventFlagsMap.Add("moving_end", scriptEvents.moving_end);
+ m_eventFlagsMap.Add("moving_start", scriptEvents.moving_start);
+ m_eventFlagsMap.Add("not_at_rot_target", scriptEvents.not_at_rot_target);
+ m_eventFlagsMap.Add("not_at_target", scriptEvents.not_at_target);
+ // m_eventFlagsMap.Add("no_sensor",(long)scriptEvents.no_sensor);
+ // m_eventFlagsMap.Add("on_rez",(long)scriptEvents.on_rez);
+ m_eventFlagsMap.Add("remote_data", scriptEvents.remote_data);
+ m_eventFlagsMap.Add("run_time_permissions", scriptEvents.run_time_permissions);
+ // m_eventFlagsMap.Add("sensor",(long)scriptEvents.sensor);
+ m_eventFlagsMap.Add("state_entry", scriptEvents.state_entry);
+ m_eventFlagsMap.Add("state_exit", scriptEvents.state_exit);
+ m_eventFlagsMap.Add("timer", scriptEvents.timer);
+ m_eventFlagsMap.Add("touch", scriptEvents.touch);
+ m_eventFlagsMap.Add("touch_end", scriptEvents.touch_end);
+ m_eventFlagsMap.Add("touch_start", scriptEvents.touch_start);
+ m_eventFlagsMap.Add("object_rez", scriptEvents.object_rez);
+ }
+ }
+}
--
cgit v1.1