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.
---
.../ScriptEngine/XEngine/AsyncCommandManager.cs | 270 +
.../XEngine/AsyncCommandPlugins/Dataserver.cs | 127 +
.../XEngine/AsyncCommandPlugins/Eventstream.cs | 76 +
.../XEngine/AsyncCommandPlugins/HttpRequest.cs | 89 +
.../XEngine/AsyncCommandPlugins/Listener.cs | 91 +
.../XEngine/AsyncCommandPlugins/SensorRepeat.cs | 391 ++
.../XEngine/AsyncCommandPlugins/Timer.cs | 163 +
.../XEngine/AsyncCommandPlugins/XmlRequest.cs | 115 +
OpenSim/Region/ScriptEngine/XEngine/Compiler.cs | 515 ++
.../Region/ScriptEngine/XEngine/EventManager.cs | 293 +
OpenSim/Region/ScriptEngine/XEngine/Executor.cs | 136 +
.../Region/ScriptEngine/XEngine/ExecutorBase.cs | 181 +
.../Region/ScriptEngine/XEngine/LSL2CSConverter.cs | 363 ++
.../ScriptEngine/XEngine/LSL_ScriptCommands.cs | 6474 ++++++++++++++++++++
.../ScriptEngine/XEngine/OSSL_ScriptCommands.cs | 553 ++
.../XEngine/Script/AssemblyResolver.cs | 65 +
.../XEngine/Script/BuiltIn_Commands_BaseClass.cs | 2393 ++++++++
.../XEngine/Script/ILSL_ScriptCommands.cs | 653 ++
.../XEngine/Script/IOSSL_ScriptCommands.cs | 68 +
.../Region/ScriptEngine/XEngine/Script/IScript.cs | 46 +
.../ScriptEngine/XEngine/Script/LSL_Types.cs | 1411 +++++
OpenSim/Region/ScriptEngine/XEngine/XEngine.cs | 1435 +++++
ThirdParty/SmartThreadPool/AssemblyInfo.cs | 61 +
ThirdParty/SmartThreadPool/CallerThreadContext.cs | 223 +
ThirdParty/SmartThreadPool/Exceptions.cs | 81 +
ThirdParty/SmartThreadPool/Interfaces.cs | 271 +
ThirdParty/SmartThreadPool/PriorityQueue.cs | 240 +
.../SmartThreadPool/STPPerformanceCounter.cs | 352 ++
ThirdParty/SmartThreadPool/STPStartInfo.cs | 99 +
ThirdParty/SmartThreadPool/SmartThreadPool.cs | 1438 +++++
ThirdParty/SmartThreadPool/WIGStartInfo.cs | 99 +
ThirdParty/SmartThreadPool/WorkItem.cs | 1035 ++++
ThirdParty/SmartThreadPool/WorkItemFactory.cs | 333 +
ThirdParty/SmartThreadPool/WorkItemInfo.cs | 102 +
ThirdParty/SmartThreadPool/WorkItemsGroup.cs | 512 ++
ThirdParty/SmartThreadPool/WorkItemsQueue.cs | 600 ++
ThirdPartyLicenses/SmartThreadPool.txt | 22 +
bin/OpenSim.ini.example | 37 +
prebuild.xml | 94 +
39 files changed, 21507 insertions(+)
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/AsyncCommandManager.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Dataserver.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Eventstream.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/HttpRequest.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Listener.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/SensorRepeat.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/Timer.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/AsyncCommandPlugins/XmlRequest.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/Compiler.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/EventManager.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/Executor.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/ExecutorBase.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/LSL2CSConverter.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/LSL_ScriptCommands.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/OSSL_ScriptCommands.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/Script/AssemblyResolver.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/Script/BuiltIn_Commands_BaseClass.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/Script/ILSL_ScriptCommands.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/Script/IOSSL_ScriptCommands.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/Script/IScript.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/Script/LSL_Types.cs
create mode 100644 OpenSim/Region/ScriptEngine/XEngine/XEngine.cs
create mode 100644 ThirdParty/SmartThreadPool/AssemblyInfo.cs
create mode 100644 ThirdParty/SmartThreadPool/CallerThreadContext.cs
create mode 100644 ThirdParty/SmartThreadPool/Exceptions.cs
create mode 100644 ThirdParty/SmartThreadPool/Interfaces.cs
create mode 100644 ThirdParty/SmartThreadPool/PriorityQueue.cs
create mode 100644 ThirdParty/SmartThreadPool/STPPerformanceCounter.cs
create mode 100644 ThirdParty/SmartThreadPool/STPStartInfo.cs
create mode 100644 ThirdParty/SmartThreadPool/SmartThreadPool.cs
create mode 100644 ThirdParty/SmartThreadPool/WIGStartInfo.cs
create mode 100644 ThirdParty/SmartThreadPool/WorkItem.cs
create mode 100644 ThirdParty/SmartThreadPool/WorkItemFactory.cs
create mode 100644 ThirdParty/SmartThreadPool/WorkItemInfo.cs
create mode 100644 ThirdParty/SmartThreadPool/WorkItemsGroup.cs
create mode 100644 ThirdParty/SmartThreadPool/WorkItemsQueue.cs
create mode 100644 ThirdPartyLicenses/SmartThreadPool.txt
diff --git a/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandManager.cs b/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandManager.cs
new file mode 100644
index 0000000..4ec7916
--- /dev/null
+++ b/OpenSim/Region/ScriptEngine/XEngine/AsyncCommandManager.cs
@@ -0,0 +1,270 @@
+/*
+ * 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;
+using System.Collections.Generic;
+using System.Threading;
+using libsecondlife;
+using OpenSim.Framework;
+using OpenSim.Region.Environment.Interfaces;
+using OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins;
+using Timer=OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins.Timer;
+using Dataserver=OpenSim.Region.ScriptEngine.XEngine.AsyncCommandPlugins.Dataserver;
+
+namespace OpenSim.Region.ScriptEngine.XEngine
+{
+ ///
+ /// Handles LSL commands that takes long time and returns an event, for example timers, HTTP requests, etc.
+ ///
+ public class AsyncCommandManager
+ {
+ private static Thread cmdHandlerThread;
+ private static int cmdHandlerThreadCycleSleepms;
+
+ public XEngine m_ScriptEngine;
+
+ public Dataserver m_Dataserver;
+ public Timer m_Timer;
+ public HttpRequest m_HttpRequest;
+ public Listener m_Listener;
+ public SensorRepeat m_SensorRepeat;
+ public XmlRequest m_XmlRequest;
+
+ public AsyncCommandManager(XEngine _ScriptEngine)
+ {
+ m_ScriptEngine = _ScriptEngine;
+ ReadConfig();
+
+ // Create instances of all plugins
+ m_Dataserver = new Dataserver(this);
+ m_Timer = new Timer(this);
+ m_HttpRequest = new HttpRequest(this);
+ m_Listener = new Listener(this);
+ m_SensorRepeat = new SensorRepeat(this);
+ m_XmlRequest = new XmlRequest(this);
+
+ StartThread();
+ }
+
+ private static void StartThread()
+ {
+ if (cmdHandlerThread == null)
+ {
+ // Start the thread that will be doing the work
+ cmdHandlerThread = new Thread(CmdHandlerThreadLoop);
+ cmdHandlerThread.Name = "AsyncLSLCmdHandlerThread";
+ cmdHandlerThread.Priority = ThreadPriority.BelowNormal;
+ cmdHandlerThread.IsBackground = true;
+ cmdHandlerThread.Start();
+ ThreadTracker.Add(cmdHandlerThread);
+ }
+ }
+
+ public void ReadConfig()
+ {
+ cmdHandlerThreadCycleSleepms = m_ScriptEngine.ScriptConfigSource.GetInt("AsyncLLCommandLoopms", 100);
+ }
+
+ ~AsyncCommandManager()
+ {
+ // Shut down thread
+ try
+ {
+ if (cmdHandlerThread != null)
+ {
+ if (cmdHandlerThread.IsAlive == true)
+ {
+ cmdHandlerThread.Abort();
+ //cmdHandlerThread.Join();
+ }
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ private static void CmdHandlerThreadLoop()
+ {
+ while (true)
+ {
+ try
+ {
+ while (true)
+ {
+ Thread.Sleep(cmdHandlerThreadCycleSleepms);
+
+ foreach (XEngine xe in XEngine.ScriptEngines)
+ {
+ xe.m_ASYNCLSLCommandManager.DoOneCmdHandlerPass();
+ }
+ }
+ }
+ catch
+ {
+ }
+ }
+ }
+
+ internal void DoOneCmdHandlerPass()
+ {
+ // Check timers
+ m_Timer.CheckTimerEvents();
+ // Check HttpRequests
+ m_HttpRequest.CheckHttpRequests();
+ // Check XMLRPCRequests
+ m_XmlRequest.CheckXMLRPCRequests();
+ // Check Listeners
+ m_Listener.CheckListeners();
+ // Check Sensors
+ m_SensorRepeat.CheckSenseRepeaterEvents();
+ // Check dataserver
+ m_Dataserver.ExpireRequests();
+ }
+
+ ///
+ /// Remove a specific script (and all its pending commands)
+ ///
+ ///
+ ///
+ public void RemoveScript(uint localID, LLUUID itemID)
+ {
+ // Remove a specific script
+
+ // Remove dataserver events
+ m_Dataserver.RemoveEvents(localID, itemID);
+
+ // Remove from: Timers
+ m_Timer.UnSetTimerEvents(localID, itemID);
+
+ // Remove from: HttpRequest
+ IHttpRequests iHttpReq =
+ m_ScriptEngine.World.RequestModuleInterface();
+ iHttpReq.StopHttpRequest(localID, itemID);
+
+ IWorldComm comms = m_ScriptEngine.World.RequestModuleInterface();
+ comms.DeleteListener(itemID);
+
+ IXMLRPC xmlrpc = m_ScriptEngine.World.RequestModuleInterface();
+ xmlrpc.DeleteChannels(itemID);
+ xmlrpc.CancelSRDRequests(itemID);
+
+ // Remove Sensors
+ m_SensorRepeat.UnSetSenseRepeaterEvents(localID, itemID);
+
+ }
+
+ public Object[] GetSerializationData(LLUUID itemID)
+ {
+ List