JustinCC's core re-merge
parent
1ce39ed5f5
commit
818254916c
|
@ -1782,6 +1782,21 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
/// <param name="itemBase"></param>
|
||||
/// <returns>The part where the script was rezzed if successful. False otherwise.</returns>
|
||||
public SceneObjectPart RezNewScript(UUID agentID, InventoryItemBase itemBase)
|
||||
{
|
||||
return RezNewScript(
|
||||
agentID,
|
||||
itemBase,
|
||||
"default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n}");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rez a new script from nothing with given script text.
|
||||
/// </summary>
|
||||
/// <param name="remoteClient"></param>
|
||||
/// <param name="itemBase">Template item.</param>
|
||||
/// <param name="scriptText"></param>
|
||||
/// <returns>The part where the script was rezzed if successful. False otherwise.</returns>
|
||||
public SceneObjectPart RezNewScript(UUID agentID, InventoryItemBase itemBase, string scriptText)
|
||||
{
|
||||
// The part ID is the folder ID!
|
||||
SceneObjectPart part = GetSceneObjectPart(itemBase.Folder);
|
||||
|
@ -1802,9 +1817,14 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
return null;
|
||||
}
|
||||
|
||||
AssetBase asset = CreateAsset(itemBase.Name, itemBase.Description, (sbyte)itemBase.AssetType,
|
||||
Encoding.ASCII.GetBytes("default\n{\n state_entry()\n {\n llSay(0, \"Script running\");\n }\n\n touch_start(integer num)\n {\n }\n}"),
|
||||
AssetBase asset
|
||||
= CreateAsset(
|
||||
itemBase.Name,
|
||||
itemBase.Description,
|
||||
(sbyte)itemBase.AssetType,
|
||||
Encoding.ASCII.GetBytes(scriptText),
|
||||
agentID);
|
||||
|
||||
AssetService.Store(asset);
|
||||
|
||||
TaskInventoryItem taskItem = new TaskInventoryItem();
|
||||
|
|
|
@ -26,9 +26,11 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
|
||||
namespace OpenSim.Region.ScriptEngine.Interfaces
|
||||
{
|
||||
|
@ -38,11 +40,12 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
|
|||
/// Initialize the API
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Each API has an identifier, which is used to load the
|
||||
/// proper runtime assembly at load time.
|
||||
/// <param name='engine'>/param>
|
||||
/// <param name='part'></param>
|
||||
/// <param name='item'></param>
|
||||
void Initialize(IScriptEngine engine, SceneObjectPart part, TaskInventoryItem item);
|
||||
/// Each API has an identifier, which is used to load the proper runtime assembly at load time.
|
||||
/// <param name='scriptEngine'>/param>
|
||||
/// <param name='host'>/param>
|
||||
/// <param name='item'>/param>
|
||||
/// <param name='coopSleepHandle'>/param>
|
||||
void Initialize(
|
||||
IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, EventWaitHandle coopSleepHandle);
|
||||
}
|
||||
}
|
|
@ -28,9 +28,11 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using OpenMetaverse;
|
||||
using log4net;
|
||||
using OpenSim.Framework;
|
||||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Interfaces;
|
||||
|
||||
|
@ -105,6 +107,11 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
|
|||
/// </summary>
|
||||
long MeasurementPeriodExecutionTime { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Scene part in which this script instance is contained.
|
||||
/// </summary>
|
||||
SceneObjectPart Part { get; }
|
||||
|
||||
IScriptEngine Engine { get; }
|
||||
UUID AppDomain { get; set; }
|
||||
string PrimName { get; }
|
||||
|
@ -124,6 +131,12 @@ namespace OpenSim.Region.ScriptEngine.Interfaces
|
|||
|
||||
uint LocalID { get; }
|
||||
UUID AssetID { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Inventory item containing the script used.
|
||||
/// </summary>
|
||||
TaskInventoryItem ScriptTask { get; }
|
||||
|
||||
Queue EventQueue { get; }
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
*/
|
||||
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Reflection;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
|
@ -62,7 +63,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
internal TaskInventoryItem m_item;
|
||||
internal bool m_CMFunctionsEnabled = false;
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item, EventWaitHandle coopSleepHandle)
|
||||
{
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_host = host;
|
||||
|
|
|
@ -87,9 +87,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
public class LSL_Api : MarshalByRefObject, ILSL_Api, IScriptApi
|
||||
{
|
||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||
|
||||
protected IScriptEngine m_ScriptEngine;
|
||||
protected SceneObjectPart m_host;
|
||||
|
||||
/// <summary>
|
||||
/// Used for script sleeps when we are using co-operative script termination.
|
||||
/// </summary>
|
||||
/// <remarks>null if co-operative script termination is not active</remarks>
|
||||
EventWaitHandle m_coopSleepHandle;
|
||||
|
||||
/// <summary>
|
||||
/// The item that hosts this script
|
||||
/// </summary>
|
||||
|
@ -142,33 +149,31 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{"TURNRIGHT", "Turning Right"}
|
||||
};
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
public void Initialize(
|
||||
IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, EventWaitHandle coopSleepHandle)
|
||||
{
|
||||
/*
|
||||
m_ShoutSayTimer = new Timer(1000);
|
||||
m_ShoutSayTimer.Elapsed += SayShoutTimerElapsed;
|
||||
m_ShoutSayTimer.AutoReset = true;
|
||||
m_ShoutSayTimer.Start();
|
||||
*/
|
||||
m_lastSayShoutCheck = DateTime.UtcNow;
|
||||
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_ScriptEngine = scriptEngine;
|
||||
m_host = host;
|
||||
m_item = item;
|
||||
m_debuggerSafe = m_ScriptEngine.Config.GetBoolean("DebuggerSafe", false);
|
||||
m_coopSleepHandle = coopSleepHandle;
|
||||
|
||||
LoadLimits(); // read script limits from config.
|
||||
LoadConfig();
|
||||
|
||||
m_TransferModule =
|
||||
m_ScriptEngine.World.RequestModuleInterface<IMessageTransferModule>();
|
||||
m_UrlModule = m_ScriptEngine.World.RequestModuleInterface<IUrlModule>();
|
||||
m_SoundModule = m_ScriptEngine.World.RequestModuleInterface<ISoundModule>();
|
||||
|
||||
AsyncCommands = new AsyncCommandManager(ScriptEngine);
|
||||
AsyncCommands = new AsyncCommandManager(m_ScriptEngine);
|
||||
}
|
||||
|
||||
/* load configuration items that affect script, object and run-time behavior. */
|
||||
private void LoadLimits()
|
||||
/// <summary>
|
||||
/// Load configuration items that affect script, object and run-time behavior. */
|
||||
/// </summary>
|
||||
private void LoadConfig()
|
||||
{
|
||||
m_ScriptDelayFactor =
|
||||
m_ScriptEngine.Config.GetFloat("ScriptDelayFactor", 1.0f);
|
||||
|
@ -182,12 +187,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
m_ScriptEngine.Config.GetInt("NotecardLineReadCharsMax", 255);
|
||||
if (m_notecardLineReadCharsMax > 65535)
|
||||
m_notecardLineReadCharsMax = 65535;
|
||||
|
||||
// load limits for particular subsystems.
|
||||
IConfig SMTPConfig;
|
||||
if ((SMTPConfig = m_ScriptEngine.ConfigSource.Configs["SMTP"]) != null) {
|
||||
// there's an smtp config, so load in the snooze time.
|
||||
EMAIL_PAUSE_TIME = SMTPConfig.GetInt("email_pause_time", EMAIL_PAUSE_TIME);
|
||||
}
|
||||
|
||||
// Rezzing an object with a velocity can create recoil. This feature seems to have been
|
||||
// removed from recent versions of SL. The code computes recoil (vel*mass) and scales
|
||||
// it by this factor. May be zero to turn off recoil all together.
|
||||
|
@ -212,7 +219,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
delay = (int)((float)delay * m_ScriptDelayFactor);
|
||||
if (delay == 0)
|
||||
return;
|
||||
|
||||
Sleep(delay);
|
||||
}
|
||||
|
||||
protected virtual void Sleep(int delay)
|
||||
{
|
||||
if (m_coopSleepHandle == null)
|
||||
System.Threading.Thread.Sleep(delay);
|
||||
else if (m_coopSleepHandle.WaitOne(delay))
|
||||
throw new ScriptCoopStopException();
|
||||
}
|
||||
|
||||
public Scene World
|
||||
|
@ -3228,7 +3244,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
{
|
||||
// m_log.Info("llSleep snoozing " + sec + "s.");
|
||||
m_host.AddScriptLPS(1);
|
||||
Thread.Sleep((int)(sec * 1000));
|
||||
|
||||
Sleep((int)(sec * 1000));
|
||||
}
|
||||
|
||||
public LSL_Float llGetMass()
|
||||
|
|
|
@ -30,6 +30,7 @@ using System.Reflection;
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.Remoting.Lifetime;
|
||||
using System.Threading;
|
||||
using OpenMetaverse;
|
||||
using Nini.Config;
|
||||
using OpenSim;
|
||||
|
@ -61,9 +62,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
internal bool m_LSFunctionsEnabled = false;
|
||||
internal IScriptModuleComms m_comms = null;
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
public void Initialize(
|
||||
IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, EventWaitHandle coopSleepHandle)
|
||||
{
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_ScriptEngine = scriptEngine;
|
||||
m_host = host;
|
||||
|
||||
if (m_ScriptEngine.Config.GetBoolean("AllowLightShareFunctions", false))
|
||||
|
@ -92,10 +94,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
get { return m_ScriptEngine.World; }
|
||||
}
|
||||
|
||||
//
|
||||
//Dumps an error message on the debug console.
|
||||
//
|
||||
|
||||
/// <summary>
|
||||
/// Dumps an error message on the debug console.
|
||||
/// </summary>
|
||||
internal void LSShoutError(string message)
|
||||
{
|
||||
if (message.Length > 1023)
|
||||
|
|
|
@ -30,6 +30,7 @@ using System.Reflection;
|
|||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime.Remoting.Lifetime;
|
||||
using System.Threading;
|
||||
using OpenMetaverse;
|
||||
using Nini.Config;
|
||||
using OpenSim;
|
||||
|
@ -61,9 +62,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
internal bool m_MODFunctionsEnabled = false;
|
||||
internal IScriptModuleComms m_comms = null;
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
public void Initialize(
|
||||
IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, EventWaitHandle coopSleepHandle)
|
||||
{
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_ScriptEngine = scriptEngine;
|
||||
m_host = host;
|
||||
m_item = item;
|
||||
|
||||
|
|
|
@ -143,9 +143,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
|||
|
||||
protected IUrlModule m_UrlModule = null;
|
||||
|
||||
public void Initialize(IScriptEngine ScriptEngine, SceneObjectPart host, TaskInventoryItem item)
|
||||
public void Initialize(
|
||||
IScriptEngine scriptEngine, SceneObjectPart host, TaskInventoryItem item, EventWaitHandle coopSleepHandle)
|
||||
{
|
||||
m_ScriptEngine = ScriptEngine;
|
||||
m_ScriptEngine = scriptEngine;
|
||||
m_host = host;
|
||||
m_item = item;
|
||||
m_debuggerSafe = m_ScriptEngine.Config.GetBoolean("DebuggerSafe", false);
|
||||
|
|
|
@ -82,6 +82,24 @@ namespace OpenSim.Region.ScriptEngine.Shared
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Used to signal when the script is stopping in co-operation with the script engine
|
||||
/// (instead of through Thread.Abort()).
|
||||
/// </summary>
|
||||
[Serializable]
|
||||
public class ScriptCoopStopException : Exception
|
||||
{
|
||||
public ScriptCoopStopException()
|
||||
{
|
||||
}
|
||||
|
||||
protected ScriptCoopStopException(
|
||||
SerializationInfo info,
|
||||
StreamingContext context)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class DetectParams
|
||||
{
|
||||
public const int AGENT = 1;
|
||||
|
|
|
@ -158,6 +158,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
|
||||
public UUID AppDomain { get; set; }
|
||||
|
||||
public SceneObjectPart Part { get; private set; }
|
||||
|
||||
public string PrimName { get; private set; }
|
||||
|
||||
public string ScriptName { get; private set; }
|
||||
|
@ -199,54 +201,68 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
|
||||
public static readonly long MaxMeasurementPeriod = 30 * TimeSpan.TicksPerMinute;
|
||||
|
||||
private bool m_coopTermination;
|
||||
|
||||
private EventWaitHandle m_coopSleepHandle;
|
||||
|
||||
public void ClearQueue()
|
||||
{
|
||||
m_TimerQueued = false;
|
||||
EventQueue.Clear();
|
||||
}
|
||||
|
||||
public ScriptInstance(IScriptEngine engine, SceneObjectPart part,
|
||||
UUID itemID, UUID assetID, string assembly,
|
||||
AppDomain dom, string primName, string scriptName,
|
||||
int startParam, bool postOnRez, StateSource stateSource,
|
||||
public ScriptInstance(
|
||||
IScriptEngine engine, SceneObjectPart part, TaskInventoryItem item,
|
||||
int startParam, bool postOnRez,
|
||||
int maxScriptQueue)
|
||||
{
|
||||
State = "default";
|
||||
EventQueue = new Queue(32);
|
||||
|
||||
Engine = engine;
|
||||
LocalID = part.LocalId;
|
||||
ObjectID = part.UUID;
|
||||
RootLocalID = part.ParentGroup.LocalId;
|
||||
RootObjectID = part.ParentGroup.UUID;
|
||||
ItemID = itemID;
|
||||
AssetID = assetID;
|
||||
PrimName = primName;
|
||||
ScriptName = scriptName;
|
||||
m_Assembly = assembly;
|
||||
Part = part;
|
||||
ScriptTask = item;
|
||||
|
||||
// This is currently only here to allow regression tests to get away without specifying any inventory
|
||||
// item when they are testing script logic that doesn't require an item.
|
||||
if (ScriptTask != null)
|
||||
{
|
||||
ScriptName = ScriptTask.Name;
|
||||
ItemID = ScriptTask.ItemID;
|
||||
AssetID = ScriptTask.AssetID;
|
||||
}
|
||||
|
||||
PrimName = part.ParentGroup.Name;
|
||||
StartParam = startParam;
|
||||
m_MaxScriptQueue = maxScriptQueue;
|
||||
m_stateSource = stateSource;
|
||||
m_postOnRez = postOnRez;
|
||||
m_AttachedAvatar = part.ParentGroup.AttachedAvatar;
|
||||
m_RegionID = part.ParentGroup.Scene.RegionInfo.RegionID;
|
||||
|
||||
if (part != null)
|
||||
if (Engine.Config.GetString("ScriptStopStrategy", "abort") == "co-op")
|
||||
{
|
||||
part.TaskInventory.LockItemsForRead(true);
|
||||
if (part.TaskInventory.ContainsKey(ItemID))
|
||||
m_coopTermination = true;
|
||||
m_coopSleepHandle = new AutoResetEvent(false);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Load the script from an assembly into an AppDomain.
|
||||
/// </summary>
|
||||
/// <param name='dom'></param>
|
||||
/// <param name='assembly'></param>
|
||||
/// <param name='stateSource'></param>
|
||||
public void Load(AppDomain dom, string assembly, StateSource stateSource)
|
||||
{
|
||||
ScriptTask = part.TaskInventory[ItemID];
|
||||
}
|
||||
part.TaskInventory.LockItemsForRead(false);
|
||||
}
|
||||
m_Assembly = assembly;
|
||||
m_stateSource = stateSource;
|
||||
|
||||
ApiManager am = new ApiManager();
|
||||
|
||||
foreach (string api in am.GetApis())
|
||||
{
|
||||
m_Apis[api] = am.CreateApi(api);
|
||||
m_Apis[api].Initialize(engine, part, ScriptTask);
|
||||
m_Apis[api].Initialize(Engine, Part, ScriptTask, m_coopSleepHandle);
|
||||
}
|
||||
|
||||
try
|
||||
|
@ -280,7 +296,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
|
||||
// // m_log.Debug("[Script] Script instance created");
|
||||
|
||||
part.SetScriptEvents(ItemID,
|
||||
Part.SetScriptEvents(ItemID,
|
||||
(int)m_Script.GetStateEventFlags(State));
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -322,7 +338,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
|
||||
// m_log.DebugFormat("[Script] Successfully retrieved state for script {0}.{1}", PrimName, m_ScriptName);
|
||||
|
||||
part.SetScriptEvents(ItemID,
|
||||
Part.SetScriptEvents(ItemID,
|
||||
(int)m_Script.GetStateEventFlags(State));
|
||||
|
||||
if (!Running)
|
||||
|
@ -534,10 +550,35 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
}
|
||||
|
||||
// Wait for the current event to complete.
|
||||
if (!m_InSelfDelete && workItem.Wait(new TimeSpan((long)timeout * 100000)))
|
||||
if (!m_InSelfDelete)
|
||||
{
|
||||
if (!m_coopTermination)
|
||||
{
|
||||
// If we're not co-operative terminating then try and wait for the event to complete before stopping
|
||||
if (workItem.Wait(new TimeSpan((long)timeout * 100000)))
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[SCRIPT INSTANCE]: Co-operatively stopping script {0} {1} in {2} {3}",
|
||||
ScriptName, ItemID, PrimName, ObjectID);
|
||||
|
||||
// This will terminate the event on next handle check by the script.
|
||||
m_coopSleepHandle.Set();
|
||||
|
||||
// For now, we will wait forever since the event should always cleanly terminate once LSL loop
|
||||
// checking is implemented. May want to allow a shorter timeout option later.
|
||||
if (workItem.Wait(TimeSpan.MaxValue))
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[SCRIPT INSTANCE]: Co-operatively stopped script {0} {1} in {2} {3}",
|
||||
ScriptName, ItemID, PrimName, ObjectID);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lock (EventQueue)
|
||||
{
|
||||
|
@ -549,6 +590,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
|
||||
// If the event still hasn't stopped and we the stop isn't the result of script or object removal, then
|
||||
// forcibly abort the work item (this aborts the underlying thread).
|
||||
// Co-operative termination should never reach this point.
|
||||
if (!m_InSelfDelete)
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
|
@ -796,7 +838,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
m_InEvent = false;
|
||||
m_CurrentEvent = String.Empty;
|
||||
|
||||
if ((!(e is TargetInvocationException) || (!(e.InnerException is SelfDeleteException) && !(e.InnerException is ScriptDeleteException))) && !(e is ThreadAbortException))
|
||||
if ((!(e is TargetInvocationException)
|
||||
|| (!(e.InnerException is SelfDeleteException)
|
||||
&& !(e.InnerException is ScriptDeleteException)
|
||||
&& !(e.InnerException is ScriptCoopStopException)))
|
||||
&& !(e is ThreadAbortException))
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@ -846,6 +892,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
|||
if (part != null)
|
||||
part.Inventory.RemoveInventoryItem(ItemID);
|
||||
}
|
||||
else if ((e is TargetInvocationException) && (e.InnerException is ScriptCoopStopException))
|
||||
{
|
||||
m_log.DebugFormat(
|
||||
"[SCRIPT INSTANCE]: Script {0}.{1} in event {2}, state {3} stopped co-operatively.",
|
||||
PrimName, ScriptName, data.EventName, State);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -41,6 +41,7 @@ using OpenSim.Region.OptionalModules.World.NPC;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Instance;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
@ -93,7 +94,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
TaskInventoryHelpers.AddSceneObject(m_scene, so1.RootPart, inventoryItemName, itemId, userId);
|
||||
|
||||
LSL_Api api = new LSL_Api();
|
||||
api.Initialize(m_engine, so1.RootPart, null);
|
||||
api.Initialize(m_engine, so1.RootPart, null, null);
|
||||
|
||||
// Create a second object
|
||||
SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, userId, "so2", 0x100);
|
||||
|
@ -126,7 +127,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
SceneObjectGroup so1 = SceneHelpers.CreateSceneObject(1, user1Id, "so1", 0x10);
|
||||
m_scene.AddSceneObject(so1);
|
||||
LSL_Api api = new LSL_Api();
|
||||
api.Initialize(m_engine, so1.RootPart, null);
|
||||
api.Initialize(m_engine, so1.RootPart, null, null);
|
||||
|
||||
// Create an object embedded inside the first
|
||||
UUID itemId = TestHelpers.ParseTail(0x20);
|
||||
|
@ -136,7 +137,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
SceneObjectGroup so2 = SceneHelpers.CreateSceneObject(1, user2Id, "so2", 0x100);
|
||||
m_scene.AddSceneObject(so2);
|
||||
LSL_Api api2 = new LSL_Api();
|
||||
api2.Initialize(m_engine, so2.RootPart, null);
|
||||
api2.Initialize(m_engine, so2.RootPart, null, null);
|
||||
|
||||
// *** Firstly, we test where llAllowInventoryDrop() has not been called. ***
|
||||
api.llGiveInventory(so2.UUID.ToString(), inventoryItemName);
|
||||
|
|
|
@ -41,6 +41,7 @@ using OpenSim.Region.OptionalModules.World.NPC;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Instance;
|
||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
|
@ -104,7 +105,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(grp2);
|
||||
|
||||
LSL_Api apiGrp1 = new LSL_Api();
|
||||
apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item);
|
||||
apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item, null);
|
||||
|
||||
apiGrp1.llCreateLink(grp2.UUID.ToString(), ScriptBaseClass.TRUE);
|
||||
|
||||
|
@ -131,7 +132,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
grp1Item.PermsMask |= ScriptBaseClass.PERMISSION_CHANGE_LINKS;
|
||||
|
||||
LSL_Api apiGrp1 = new LSL_Api();
|
||||
apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item);
|
||||
apiGrp1.Initialize(m_engine, grp1.RootPart, grp1Item, null);
|
||||
|
||||
apiGrp1.llBreakLink(2);
|
||||
|
||||
|
|
|
@ -34,6 +34,7 @@ using OpenSim.Region.ScriptEngine.Shared;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using Nini.Config;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Instance;
|
||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
|
||||
using OpenMetaverse;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
@ -67,7 +68,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
engine.AddRegion(scene);
|
||||
|
||||
m_lslApi = new LSL_Api();
|
||||
m_lslApi.Initialize(engine, part, null);
|
||||
m_lslApi.Initialize(engine, part, null, null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
|
|
@ -33,6 +33,7 @@ using OpenSim.Region.ScriptEngine.Shared;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using Nini.Config;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Instance;
|
||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
|
||||
using OpenMetaverse;
|
||||
using System;
|
||||
|
@ -66,7 +67,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
engine.AddRegion(scene);
|
||||
|
||||
m_lslApi = new LSL_Api();
|
||||
m_lslApi.Initialize(engine, part, null);
|
||||
m_lslApi.Initialize(engine, part, null, null);
|
||||
}
|
||||
|
||||
[Test]
|
||||
|
|
|
@ -41,6 +41,7 @@ using OpenSim.Region.OptionalModules.World.NPC;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Instance;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
@ -93,7 +94,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
osslApi.Initialize(m_engine, part, null, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
|
||||
|
@ -134,7 +135,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
osslApi.Initialize(m_engine, part, null, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ using OpenSim.Region.CoreModules.Framework.InventoryAccess;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Instance;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
using OpenSim.Tests.Common.Mock;
|
||||
|
@ -98,9 +99,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
|
||||
TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene, inWorldObj.RootPart);
|
||||
|
||||
new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
|
||||
new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem, null);
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
|
||||
osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem, null);
|
||||
|
||||
// SceneObjectGroup sog1 = SceneHelpers.CreateSceneObject(1, ua1.PrincipalID);
|
||||
|
||||
|
@ -144,9 +145,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
|
||||
TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene, inWorldObj.RootPart);
|
||||
|
||||
new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
|
||||
new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem, null);
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
|
||||
osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem, null);
|
||||
|
||||
// Create an object embedded inside the first
|
||||
TaskInventoryHelpers.AddNotecard(
|
||||
|
@ -192,12 +193,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
SceneObjectGroup inWorldObj = SceneHelpers.AddSceneObject(m_scene, "inWorldObj", ua1.PrincipalID);
|
||||
TaskInventoryItem scriptItem = TaskInventoryHelpers.AddScript(m_scene, inWorldObj.RootPart);
|
||||
|
||||
new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem);
|
||||
new LSL_Api().Initialize(m_engine, inWorldObj.RootPart, scriptItem, null);
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem);
|
||||
osslApi.Initialize(m_engine, inWorldObj.RootPart, scriptItem, null);
|
||||
|
||||
// Create an object embedded inside the first
|
||||
TaskInventoryHelpers.AddSceneObject(m_scene, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, ua1.PrincipalID);
|
||||
TaskInventoryHelpers.AddSceneObject(
|
||||
m_scene, inWorldObj.RootPart, taskInvObjItemName, taskInvObjItemId, ua1.PrincipalID);
|
||||
|
||||
ScenePresence sp2 = SceneHelpers.AddScenePresence(m_scene, ua2);
|
||||
|
||||
|
|
|
@ -42,6 +42,7 @@ using OpenSim.Region.OptionalModules.World.NPC;
|
|||
using OpenSim.Region.Framework.Scenes;
|
||||
using OpenSim.Region.ScriptEngine.Shared;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||
using OpenSim.Region.ScriptEngine.Shared.Instance;
|
||||
using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
|
||||
using OpenSim.Services.Interfaces;
|
||||
using OpenSim.Tests.Common;
|
||||
|
@ -99,7 +100,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
osslApi.Initialize(m_engine, part, null, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
osslApi.osOwnerSaveAppearance(notecardName);
|
||||
|
@ -125,7 +126,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, so.RootPart, null);
|
||||
osslApi.Initialize(m_engine, so.RootPart, null, null);
|
||||
|
||||
bool gotExpectedException = false;
|
||||
try
|
||||
|
@ -160,7 +161,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
osslApi.Initialize(m_engine, part, null, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
osslApi.osOwnerSaveAppearance(notecardName);
|
||||
|
@ -194,7 +195,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
osslApi.Initialize(m_engine, part, null, null);
|
||||
|
||||
osslApi.osOwnerSaveAppearance(firstAppearanceNcName);
|
||||
|
||||
|
@ -232,7 +233,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
osslApi.Initialize(m_engine, part, null, null);
|
||||
|
||||
osslApi.osOwnerSaveAppearance(firstAppearanceNcName);
|
||||
|
||||
|
@ -284,10 +285,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(otherSo);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
osslApi.Initialize(m_engine, part, null, null);
|
||||
|
||||
OSSL_Api otherOsslApi = new OSSL_Api();
|
||||
otherOsslApi.Initialize(m_engine, otherPart, null);
|
||||
otherOsslApi.Initialize(m_engine, otherPart, null, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
osslApi.osOwnerSaveAppearance(notecardName);
|
||||
|
@ -331,7 +332,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Tests
|
|||
m_scene.AddSceneObject(so);
|
||||
|
||||
OSSL_Api osslApi = new OSSL_Api();
|
||||
osslApi.Initialize(m_engine, part, null);
|
||||
osslApi.Initialize(m_engine, part, null, null);
|
||||
|
||||
string notecardName = "appearanceNc";
|
||||
osslApi.osOwnerSaveAppearance(notecardName);
|
||||
|
|
|
@ -1356,12 +1356,11 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
m_DomainScripts[appDomain].Add(itemID);
|
||||
|
||||
instance = new ScriptInstance(this, part,
|
||||
itemID, assetID, assembly,
|
||||
m_AppDomains[appDomain],
|
||||
part.ParentGroup.RootPart.Name,
|
||||
item.Name, startParam, postOnRez,
|
||||
stateSource, m_MaxScriptQueue);
|
||||
item,
|
||||
startParam, postOnRez,
|
||||
m_MaxScriptQueue);
|
||||
|
||||
instance.Load(m_AppDomains[appDomain], assembly, stateSource);
|
||||
// m_log.DebugFormat(
|
||||
// "[XEngine] Loaded script {0}.{1}, script UUID {2}, prim UUID {3} @ {4}.{5}",
|
||||
// part.ParentGroup.RootPart.Name, item.Name, assetID, part.UUID,
|
||||
|
@ -1808,10 +1807,15 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
|||
IScriptInstance instance = GetInstance(itemID);
|
||||
|
||||
if (instance != null)
|
||||
{
|
||||
instance.Stop(m_WaitForEventCompletionOnScriptStop);
|
||||
}
|
||||
else
|
||||
{
|
||||
// m_log.DebugFormat("[XENGINE]: Could not find script with ID {0} to stop in {1}", itemID, World.Name);
|
||||
m_runFlags.AddOrUpdate(itemID, false, 240);
|
||||
}
|
||||
}
|
||||
|
||||
public DetectParams GetDetectParams(UUID itemID, int idx)
|
||||
{
|
||||
|
|
|
@ -2541,7 +2541,9 @@
|
|||
<Reference name="log4net" path="../../../../../bin/"/>
|
||||
|
||||
<Files>
|
||||
<Match pattern="*.cs" recurse="true"/>
|
||||
<Match pattern="*.cs" recurse="true">
|
||||
<Exclude name="Tests" pattern="Tests"/>
|
||||
</Match>
|
||||
</Files>
|
||||
</Project>
|
||||
|
||||
|
@ -3409,6 +3411,7 @@
|
|||
<Reference name="OpenSim.Region.ScriptEngine.Shared"/>
|
||||
<Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/>
|
||||
<Reference name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime"/>
|
||||
<Reference name="OpenSim.Region.ScriptEngine.Shared.Instance"/>
|
||||
<Reference name="OpenSim.Region.ScriptEngine.XEngine"/>
|
||||
<Reference name="OpenSim.Services.Interfaces"/>
|
||||
<Reference name="OpenSim.Tests.Common"/>
|
||||
|
@ -3432,6 +3435,7 @@
|
|||
<!-- SADLY the way this works means you need to keep adding these paths -->
|
||||
<Match path="Shared/Tests" pattern="*.cs" recurse="true"/>
|
||||
<Match path="Shared/CodeTools/Tests" pattern="*.cs" recurse="true"/>
|
||||
<Match path="Shared/Instance/Tests" pattern="*.cs" recurse="true"/>
|
||||
<Match path="XEngine/Tests" pattern="*.cs" recurse="true"/>
|
||||
</Files>
|
||||
</Project>
|
||||
|
|
Loading…
Reference in New Issue