Convergence is almost complete. This brings the diff between the API to < 10k
and makes it use a common set of types in both engine. Fixes the issues with running both engines and HTTP requests / listens / timers etc.. Also fixes a couple of minor Scene issues and a CTB by nullref.0.6.0-stable
parent
5edaddce6d
commit
f3c8963c86
|
@ -502,7 +502,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP
|
||||||
// horribly tangly. Hopefully it should be possible to greatly simplify it.
|
// horribly tangly. Hopefully it should be possible to greatly simplify it.
|
||||||
if (shutdownCircuit)
|
if (shutdownCircuit)
|
||||||
{
|
{
|
||||||
OnConnectionClosed(this);
|
if (OnConnectionClosed != null)
|
||||||
|
OnConnectionClosed(this);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 OpenSim.Framework;
|
|
||||||
using OpenMetaverse;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.Environment.Interfaces
|
|
||||||
{
|
|
||||||
public interface IScriptModule : IRegionModule
|
|
||||||
{
|
|
||||||
bool GetScriptRunning(UUID objectID, UUID itemID);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -192,6 +192,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public event ScriptTimerEvent OnScriptTimerEvent;
|
public event ScriptTimerEvent OnScriptTimerEvent;
|
||||||
|
|
||||||
public delegate void EstateToolsTimeUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour);
|
public delegate void EstateToolsTimeUpdate(ulong regionHandle, bool FixedTime, bool EstateSun, float LindenHour);
|
||||||
|
public delegate void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID);
|
||||||
|
|
||||||
public event EstateToolsTimeUpdate OnEstateToolsTimeUpdate;
|
public event EstateToolsTimeUpdate OnEstateToolsTimeUpdate;
|
||||||
|
|
||||||
public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj);
|
public delegate void ObjectBeingRemovedFromScene(SceneObjectGroup obj);
|
||||||
|
@ -211,6 +213,7 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
public delegate void ParcelPrimCountTainted();
|
public delegate void ParcelPrimCountTainted();
|
||||||
public event ParcelPrimCountTainted OnParcelPrimCountTainted;
|
public event ParcelPrimCountTainted OnParcelPrimCountTainted;
|
||||||
|
public event GetScriptRunning OnGetScriptRunning;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// RegisterCapsEvent is called by Scene after the Caps object
|
/// RegisterCapsEvent is called by Scene after the Caps object
|
||||||
|
@ -368,9 +371,17 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
private ScriptColliding handlerCollidingStart = null;
|
private ScriptColliding handlerCollidingStart = null;
|
||||||
private ScriptColliding handlerColliding = null;
|
private ScriptColliding handlerColliding = null;
|
||||||
private ScriptColliding handlerCollidingEnd = null;
|
private ScriptColliding handlerCollidingEnd = null;
|
||||||
|
private GetScriptRunning handlerGetScriptRunning = null;
|
||||||
|
|
||||||
private SunLindenHour handlerSunGetLindenHour = null;
|
private SunLindenHour handlerSunGetLindenHour = null;
|
||||||
|
|
||||||
|
public void TriggerGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID)
|
||||||
|
{
|
||||||
|
handlerGetScriptRunning = OnGetScriptRunning;
|
||||||
|
if (handlerGetScriptRunning != null)
|
||||||
|
handlerGetScriptRunning(controllingClient, objectID, itemID);
|
||||||
|
}
|
||||||
|
|
||||||
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
public void TriggerOnScriptChangedEvent(uint localID, uint change)
|
||||||
{
|
{
|
||||||
handlerScriptChangedEvent = OnScriptChangedEvent;
|
handlerScriptChangedEvent = OnScriptChangedEvent;
|
||||||
|
|
|
@ -445,7 +445,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Console.WriteLine("Non-Prim item ==>");
|
|
||||||
itemCopy.BasePermissions = item.BasePermissions & item.NextPermissions;
|
itemCopy.BasePermissions = item.BasePermissions & item.NextPermissions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -896,6 +895,9 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (group != null)
|
if (group != null)
|
||||||
{
|
{
|
||||||
TaskInventoryItem item = group.GetInventoryItem(localID, itemID);
|
TaskInventoryItem item = group.GetInventoryItem(localID, itemID);
|
||||||
|
if (item == null)
|
||||||
|
return;
|
||||||
|
|
||||||
if (item.Type == 10)
|
if (item.Type == 10)
|
||||||
{
|
{
|
||||||
EventManager.TriggerRemoveScript(localID, itemID);
|
EventManager.TriggerRemoveScript(localID, itemID);
|
||||||
|
@ -2311,16 +2313,6 @@ System.Console.WriteLine("Item asset {0}, request asset {1}", prevItem.AssetID.T
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID)
|
|
||||||
{
|
|
||||||
IScriptModule scriptModule = RequestModuleInterface<IScriptModule>();
|
|
||||||
if (scriptModule == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
controllingClient.SendScriptRunningReply(objectID, itemID,
|
|
||||||
scriptModule.GetScriptRunning(objectID, itemID));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID, bool running)
|
public void SetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID, bool running)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = GetSceneObjectPart(objectID);
|
SceneObjectPart part = GetSceneObjectPart(objectID);
|
||||||
|
@ -2388,5 +2380,10 @@ System.Console.WriteLine("Item asset {0}, request asset {1}", prevItem.AssetID.T
|
||||||
}
|
}
|
||||||
m_innerScene.DetachSingleAttachmentToInv(itemID, remoteClient);
|
m_innerScene.DetachSingleAttachmentToInv(itemID, remoteClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void GetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID)
|
||||||
|
{
|
||||||
|
EventManager.TriggerGetScriptRunning(controllingClient, objectID, itemID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
||||||
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common
|
namespace OpenSim.Region.ScriptEngine.Common
|
||||||
{
|
{
|
||||||
|
@ -36,6 +37,5 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
ExecutorBase Exec { get; }
|
ExecutorBase Exec { get; }
|
||||||
string Source { get; set; }
|
string Source { get; set; }
|
||||||
void Start(BuilIn_Commands BuiltIn_Commands);
|
void Start(BuilIn_Commands BuiltIn_Commands);
|
||||||
EventQueueManager.Queue_llDetectParams_Struct llDetectParams { get; set; }
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,6 +45,7 @@ using OpenSim.Region.Environment.Scenes;
|
||||||
using OpenSim.Region.Physics.Manager;
|
using OpenSim.Region.Physics.Manager;
|
||||||
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
|
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||||
|
|
||||||
using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
|
using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
|
||||||
using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
||||||
|
@ -79,7 +80,8 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
m_localID = localID;
|
m_localID = localID;
|
||||||
m_itemID = itemID;
|
m_itemID = itemID;
|
||||||
|
|
||||||
AsyncCommands = m_ScriptEngine.m_ASYNCLSLCommandManager;
|
AsyncCommands = new AsyncCommandManager(m_ScriptEngine);
|
||||||
|
|
||||||
//m_log.Info(ScriptEngineName, "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]");
|
//m_log.Info(ScriptEngineName, "LSL_BaseClass.Start() called. Hosted by [" + m_host.Name + ":" + m_host.UUID + "@" + m_host.AbsolutePosition + "]");
|
||||||
|
|
||||||
|
|
||||||
|
@ -759,256 +761,95 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
public LSL_String llDetectedName(int number)
|
public LSL_String llDetectedName(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
LSL_List SenseList = AsyncCommands.SensorRepeatPlugin.GetSensorList(m_localID, m_itemID);
|
DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SenseList != null)
|
if (d == null)
|
||||||
{
|
|
||||||
if ((number >= 0) && (number < SenseList.Length))
|
|
||||||
{
|
|
||||||
UUID SensedUUID = (UUID)SenseList.Data[number];
|
|
||||||
return resolveName(SensedUUID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ScriptManager sm;
|
|
||||||
IScript script = null;
|
|
||||||
|
|
||||||
if ((sm = m_ScriptEngine.m_ScriptManager) != null)
|
|
||||||
{
|
|
||||||
if (sm.Scripts.ContainsKey(m_localID))
|
|
||||||
{
|
|
||||||
if ((script = sm.GetScript(m_localID, m_itemID)) != null)
|
|
||||||
{
|
|
||||||
//System.Console.WriteLine(number + " - " + script.llDetectParams._key.Length);
|
|
||||||
if (script.llDetectParams._string != null)
|
|
||||||
{
|
|
||||||
if (script.llDetectParams._string.Length > number)
|
|
||||||
{
|
|
||||||
if (script.llDetectParams._string[number] != null)
|
|
||||||
{
|
|
||||||
return script.llDetectParams._string[number];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return String.Empty;
|
return String.Empty;
|
||||||
}
|
return d.Name;
|
||||||
|
|
||||||
public UUID uuidDetectedKey(int number)
|
|
||||||
{
|
|
||||||
LSL_List SenseList = AsyncCommands.SensorRepeatPlugin.GetSensorList(m_localID, m_itemID);
|
|
||||||
if (SenseList != null)
|
|
||||||
{
|
|
||||||
if ((number >= 0) && (number < SenseList.Length))
|
|
||||||
{
|
|
||||||
UUID SensedUUID = (UUID)SenseList.Data[number];
|
|
||||||
return SensedUUID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ScriptManager sm;
|
|
||||||
IScript script = null;
|
|
||||||
|
|
||||||
if ((sm = m_ScriptEngine.m_ScriptManager) != null)
|
|
||||||
{
|
|
||||||
if (sm.Scripts.ContainsKey(m_localID))
|
|
||||||
{
|
|
||||||
if ((script = sm.GetScript(m_localID, m_itemID)) != null)
|
|
||||||
{
|
|
||||||
//System.Console.WriteLine(number + " - " + script.llDetectParams._key.Length);
|
|
||||||
if (script.llDetectParams._key.Length > number)
|
|
||||||
{
|
|
||||||
if (script.llDetectParams._key[number])
|
|
||||||
{
|
|
||||||
return new UUID(script.llDetectParams._key[number]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return UUID.Zero;
|
|
||||||
}
|
|
||||||
|
|
||||||
public EntityBase entityDetectedKey(int number)
|
|
||||||
{
|
|
||||||
LSL_List SenseList = AsyncCommands.SensorRepeatPlugin.GetSensorList(m_localID, m_itemID);
|
|
||||||
if (SenseList != null)
|
|
||||||
{
|
|
||||||
if ((number >= 0) && (number < SenseList.Length))
|
|
||||||
{
|
|
||||||
UUID SensedUUID = (UUID)SenseList.Data[number];
|
|
||||||
EntityBase SensedObject = null;
|
|
||||||
lock (World.Entities)
|
|
||||||
{
|
|
||||||
World.Entities.TryGetValue(SensedUUID, out SensedObject);
|
|
||||||
}
|
|
||||||
return SensedObject;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ScriptManager sm;
|
|
||||||
IScript script = null;
|
|
||||||
|
|
||||||
if ((sm = m_ScriptEngine.m_ScriptManager) != null)
|
|
||||||
{
|
|
||||||
if (sm.Scripts.ContainsKey(m_localID))
|
|
||||||
{
|
|
||||||
if ((script = sm.GetScript(m_localID, m_itemID)) != null)
|
|
||||||
{
|
|
||||||
//System.Console.WriteLine(number + " - " + script.llDetectParams._key.Length);
|
|
||||||
if (script.llDetectParams._key.Length > number)
|
|
||||||
{
|
|
||||||
if (script.llDetectParams._key[number])
|
|
||||||
{
|
|
||||||
UUID SensedUUID = new UUID(script.llDetectParams._key[number]);
|
|
||||||
EntityBase SensedObject = null;
|
|
||||||
lock (World.Entities)
|
|
||||||
{
|
|
||||||
World.Entities.TryGetValue(SensedUUID, out SensedObject);
|
|
||||||
}
|
|
||||||
return SensedObject;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_String llDetectedKey(int number)
|
public LSL_String llDetectedKey(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID SensedUUID = uuidDetectedKey(number);
|
DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedUUID == UUID.Zero)
|
if (d == null)
|
||||||
return String.Empty;
|
return String.Empty;
|
||||||
return SensedUUID.ToString();
|
return d.Key.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_String llDetectedOwner(int number)
|
public LSL_String llDetectedOwner(int number)
|
||||||
{
|
{
|
||||||
// returns UUID of owner of object detected
|
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
EntityBase SensedObject = entityDetectedKey(number);
|
DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedObject ==null)
|
if (d == null)
|
||||||
return String.Empty;
|
return String.Empty;
|
||||||
UUID SensedUUID = uuidDetectedKey(number);
|
return d.Owner.ToString();
|
||||||
if (World.GetScenePresence(SensedUUID) == null)
|
|
||||||
{
|
|
||||||
// sensed object is not an avatar
|
|
||||||
// so get the owner of the sensed object
|
|
||||||
SceneObjectPart SOP = World.GetSceneObjectPart(SensedUUID);
|
|
||||||
if (SOP != null) { return SOP.ObjectOwner.ToString(); }
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// sensed object is an avatar, and so must be its own owner
|
|
||||||
return SensedUUID.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
return String.Empty;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llDetectedType(int number)
|
public LSL_Integer llDetectedType(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
EntityBase SensedObject = entityDetectedKey(number);
|
DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedObject == null)
|
if (d == null)
|
||||||
return 0;
|
return 0;
|
||||||
int mask = 0;
|
return new LSL_Integer(d.Type);
|
||||||
|
|
||||||
UUID SensedUUID = uuidDetectedKey(number);
|
|
||||||
LSL_Vector ZeroVector = new LSL_Vector(0, 0, 0);
|
|
||||||
|
|
||||||
if (World.GetScenePresence(SensedUUID) != null) mask |= 0x01; // actor
|
|
||||||
if (SensedObject.Velocity.Equals(ZeroVector))
|
|
||||||
mask |= 0x04; // passive non-moving
|
|
||||||
else
|
|
||||||
mask |= 0x02; // active moving
|
|
||||||
if (SensedObject is IScript) mask |= 0x08; // Scripted. It COULD have one hidden ...
|
|
||||||
return mask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Vector llDetectedPos(int number)
|
public LSL_Vector llDetectedPos(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
EntityBase SensedObject = entityDetectedKey(number);
|
DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedObject == null)
|
if (d == null)
|
||||||
return new LSL_Vector(0, 0, 0);
|
return new LSL_Vector();
|
||||||
return new LSL_Vector(
|
return d.Position;
|
||||||
SensedObject.AbsolutePosition.X,
|
|
||||||
SensedObject.AbsolutePosition.Y,
|
|
||||||
SensedObject.AbsolutePosition.Z);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Vector llDetectedVel(int number)
|
public LSL_Vector llDetectedVel(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
EntityBase SensedObject = entityDetectedKey(number);
|
DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedObject == null)
|
if (d == null)
|
||||||
return new LSL_Vector(0, 0, 0);
|
return new LSL_Vector();
|
||||||
return new LSL_Vector(
|
return d.Velocity;
|
||||||
SensedObject.Velocity.X,
|
|
||||||
SensedObject.Velocity.Y,
|
|
||||||
SensedObject.Velocity.Z);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Vector llDetectedGrab(int number)
|
public LSL_Vector llDetectedGrab(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
EntityBase SensedObject = entityDetectedKey(number);
|
DetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedObject == null)
|
if (parms == null)
|
||||||
return new LSL_Vector(0, 0, 0);
|
return new LSL_Vector(0, 0, 0);
|
||||||
|
|
||||||
return new LSL_Vector(
|
return parms.OffsetPos;
|
||||||
SensedObject.AbsolutePosition.X,
|
|
||||||
SensedObject.AbsolutePosition.Y,
|
|
||||||
SensedObject.AbsolutePosition.Z);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Rotation llDetectedRot(int number)
|
public LSL_Rotation llDetectedRot(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
EntityBase SensedObject = entityDetectedKey(number);
|
DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedObject == null)
|
if (d == null)
|
||||||
return new LSL_Rotation();
|
return new LSL_Rotation();
|
||||||
return new LSL_Rotation(
|
return d.Rotation;
|
||||||
SensedObject.Rotation.X,
|
|
||||||
SensedObject.Rotation.Y,
|
|
||||||
SensedObject.Rotation.Z,
|
|
||||||
SensedObject.Rotation.W);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llDetectedGroup(int number)
|
public LSL_Integer llDetectedGroup(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
UUID SensedUUID = uuidDetectedKey(number);
|
DetectParams d = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedUUID == UUID.Zero)
|
if (d == null)
|
||||||
return new LSL_Integer(0);
|
return new LSL_Integer(0);
|
||||||
ScenePresence presence = World.GetScenePresence(SensedUUID);
|
if (m_host.GroupID == d.Group)
|
||||||
IClientAPI client = presence.ControllingClient;
|
|
||||||
if (m_host.GroupID == client.ActiveGroupId)
|
|
||||||
return new LSL_Integer(1);
|
return new LSL_Integer(1);
|
||||||
else
|
|
||||||
return new LSL_Integer(0);
|
return new LSL_Integer(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Integer llDetectedLinkNumber(int number)
|
public LSL_Integer llDetectedLinkNumber(int number)
|
||||||
{
|
{
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
EntityBase SensedObject = entityDetectedKey(number);
|
DetectParams parms = m_ScriptEngine.GetDetectParams(m_itemID, number);
|
||||||
if (SensedObject == null)
|
if (parms == null)
|
||||||
return 0;
|
return new LSL_Integer(0);
|
||||||
return m_host.LinkNum;
|
|
||||||
|
return new LSL_Integer(parms.LinkNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Vector llDetectedTouchBinormal(int index)
|
public LSL_Vector llDetectedTouchBinormal(int index)
|
||||||
|
|
|
@ -577,7 +577,7 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
{
|
{
|
||||||
UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, new UUID(channel));
|
UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_localID, m_itemID, new UUID(channel));
|
||||||
object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(UUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) };
|
object[] resobj = new object[] { new LSL_Types.LSLInteger(1), new LSL_Types.LSLString(channelID.ToString()), new LSL_Types.LSLString(UUID.Zero.ToString()), new LSL_Types.LSLString(String.Empty), new LSL_Types.LSLInteger(0), new LSL_Types.LSLString(String.Empty) };
|
||||||
m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "remote_data", EventQueueManager.llDetectNull, resobj);
|
m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(m_localID, m_itemID, "remote_data", new DetectParams[0], resobj);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@ using System.Runtime.Remoting.Lifetime;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using OpenSim.Region.Environment.Interfaces;
|
using OpenSim.Region.Environment.Interfaces;
|
||||||
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
||||||
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
|
|
||||||
using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
|
using LSL_Float = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLFloat;
|
||||||
using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
using LSL_Integer = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLInteger;
|
||||||
|
@ -68,13 +69,6 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
return lease;
|
return lease;
|
||||||
}
|
}
|
||||||
|
|
||||||
public EventQueueManager.Queue_llDetectParams_Struct _llDetectParams;
|
|
||||||
EventQueueManager.Queue_llDetectParams_Struct IScript.llDetectParams
|
|
||||||
{
|
|
||||||
get { return _llDetectParams; }
|
|
||||||
set { _llDetectParams = value; }
|
|
||||||
}
|
|
||||||
|
|
||||||
private Executor m_Exec;
|
private Executor m_Exec;
|
||||||
|
|
||||||
ExecutorBase IScript.Exec
|
ExecutorBase IScript.Exec
|
||||||
|
|
|
@ -1,234 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.Collections;
|
|
||||||
using System.Threading;
|
|
||||||
using OpenMetaverse;
|
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Region.Environment.Interfaces;
|
|
||||||
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins;
|
|
||||||
using Timer=OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins.Timer;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Handles LSL commands that takes long time and returns an event, for example timers, HTTP requests, etc.
|
|
||||||
/// </summary>
|
|
||||||
public class AsyncCommandManager : iScriptEngineFunctionModule
|
|
||||||
{
|
|
||||||
private static Thread cmdHandlerThread;
|
|
||||||
private static int cmdHandlerThreadCycleSleepms;
|
|
||||||
|
|
||||||
public ScriptEngine m_ScriptEngine;
|
|
||||||
|
|
||||||
private Timer m_Timer;
|
|
||||||
private HttpRequest m_HttpRequest;
|
|
||||||
private Listener m_Listener;
|
|
||||||
private SensorRepeat m_SensorRepeat;
|
|
||||||
private XmlRequest m_XmlRequest;
|
|
||||||
private Dataserver m_Dataserver;
|
|
||||||
|
|
||||||
public Dataserver DataserverPlugin
|
|
||||||
{
|
|
||||||
get { return m_Dataserver; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Timer TimerPlugin
|
|
||||||
{
|
|
||||||
get { return m_Timer; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public HttpRequest HttpRequestPlugin
|
|
||||||
{
|
|
||||||
get { return m_HttpRequest; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public Listener ListenerPlugin
|
|
||||||
{
|
|
||||||
get { return m_Listener; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public SensorRepeat SensorRepeatPlugin
|
|
||||||
{
|
|
||||||
get { return m_SensorRepeat; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public XmlRequest XmlRequestPlugin
|
|
||||||
{
|
|
||||||
get { return m_XmlRequest; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public AsyncCommandManager(ScriptEngine _ScriptEngine)
|
|
||||||
{
|
|
||||||
m_ScriptEngine = _ScriptEngine;
|
|
||||||
ReadConfig();
|
|
||||||
|
|
||||||
// Create instances of all plugins
|
|
||||||
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);
|
|
||||||
m_Dataserver = new Dataserver(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);
|
|
||||||
//lock (ScriptEngine.ScriptEngines)
|
|
||||||
//{
|
|
||||||
foreach (ScriptEngine se in new ArrayList(ScriptEngine.ScriptEngines))
|
|
||||||
{
|
|
||||||
se.m_ASYNCLSLCommandManager.DoOneCmdHandlerPass();
|
|
||||||
}
|
|
||||||
//}
|
|
||||||
// Sleep before next cycle
|
|
||||||
//Thread.Sleep(cmdHandlerThreadCycleSleepms);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Remove a specific script (and all its pending commands)
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="localID"></param>
|
|
||||||
/// <param name="itemID"></param>
|
|
||||||
public void RemoveScript(uint localID, UUID itemID)
|
|
||||||
{
|
|
||||||
// Remove a specific script
|
|
||||||
|
|
||||||
// Remove from: Timers
|
|
||||||
m_Timer.UnSetTimerEvents(localID, itemID);
|
|
||||||
|
|
||||||
// Remove from: HttpRequest
|
|
||||||
IHttpRequests iHttpReq =
|
|
||||||
m_ScriptEngine.World.RequestModuleInterface<IHttpRequests>();
|
|
||||||
iHttpReq.StopHttpRequest(localID, itemID);
|
|
||||||
|
|
||||||
IWorldComm comms = m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
|
|
||||||
comms.DeleteListener(itemID);
|
|
||||||
|
|
||||||
IXMLRPC xmlrpc = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
|
|
||||||
xmlrpc.DeleteChannels(itemID);
|
|
||||||
xmlrpc.CancelSRDRequests(itemID);
|
|
||||||
|
|
||||||
// Remove Sensors
|
|
||||||
m_SensorRepeat.UnSetSenseRepeaterEvents(localID, itemID);
|
|
||||||
|
|
||||||
// Remove queries
|
|
||||||
m_Dataserver.RemoveEvents(localID, itemID);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#region Check llRemoteData channels
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Check llListeners
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// If set to true then threads and stuff should try to make a graceful exit
|
|
||||||
/// </summary>
|
|
||||||
public bool PleaseShutdown
|
|
||||||
{
|
|
||||||
get { return _PleaseShutdown; }
|
|
||||||
set { _PleaseShutdown = value; }
|
|
||||||
}
|
|
||||||
private bool _PleaseShutdown = false;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,127 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 OpenMetaverse;
|
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins
|
|
||||||
|
|
||||||
{
|
|
||||||
public class Dataserver
|
|
||||||
{
|
|
||||||
public AsyncCommandManager m_CmdManager;
|
|
||||||
|
|
||||||
private Dictionary<string, DataserverRequest> DataserverRequests =
|
|
||||||
new Dictionary<string, DataserverRequest>();
|
|
||||||
|
|
||||||
public Dataserver(AsyncCommandManager CmdManager)
|
|
||||||
{
|
|
||||||
m_CmdManager = CmdManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
private class DataserverRequest
|
|
||||||
{
|
|
||||||
public uint localID;
|
|
||||||
public UUID itemID;
|
|
||||||
|
|
||||||
public UUID ID;
|
|
||||||
public string handle;
|
|
||||||
|
|
||||||
public DateTime startTime;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UUID RegisterRequest(uint localID, UUID itemID,
|
|
||||||
string identifier)
|
|
||||||
{
|
|
||||||
lock (DataserverRequests)
|
|
||||||
{
|
|
||||||
if (DataserverRequests.ContainsKey(identifier))
|
|
||||||
return UUID.Zero;
|
|
||||||
|
|
||||||
DataserverRequest ds = new DataserverRequest();
|
|
||||||
|
|
||||||
ds.localID = localID;
|
|
||||||
ds.itemID = itemID;
|
|
||||||
|
|
||||||
ds.ID = UUID.Random();
|
|
||||||
ds.handle = identifier;
|
|
||||||
|
|
||||||
ds.startTime = DateTime.Now;
|
|
||||||
|
|
||||||
DataserverRequests[identifier]=ds;
|
|
||||||
|
|
||||||
return ds.ID;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void DataserverReply(string identifier, string reply)
|
|
||||||
{
|
|
||||||
DataserverRequest ds;
|
|
||||||
|
|
||||||
lock (DataserverRequests)
|
|
||||||
{
|
|
||||||
if (!DataserverRequests.ContainsKey(identifier))
|
|
||||||
return;
|
|
||||||
|
|
||||||
ds=DataserverRequests[identifier];
|
|
||||||
DataserverRequests.Remove(identifier);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_CmdManager.m_ScriptEngine.m_EventQueueManager.AddToObjectQueue(
|
|
||||||
ds.localID, "dataserver", EventQueueManager.llDetectNull,
|
|
||||||
new Object[] { new LSL_Types.LSLString(ds.ID.ToString()),
|
|
||||||
new LSL_Types.LSLString(reply)});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveEvents(uint localID, UUID itemID)
|
|
||||||
{
|
|
||||||
lock (DataserverRequests)
|
|
||||||
{
|
|
||||||
foreach (DataserverRequest ds in new List<DataserverRequest>(DataserverRequests.Values))
|
|
||||||
{
|
|
||||||
if (ds.itemID == itemID)
|
|
||||||
DataserverRequests.Remove(ds.handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void ExpireRequests()
|
|
||||||
{
|
|
||||||
lock (DataserverRequests)
|
|
||||||
{
|
|
||||||
foreach (DataserverRequest ds in new List<DataserverRequest>(DataserverRequests.Values))
|
|
||||||
{
|
|
||||||
if (ds.startTime > DateTime.Now.AddSeconds(30))
|
|
||||||
DataserverRequests.Remove(ds.handle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,98 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 OpenSim.Region.Environment.Interfaces;
|
|
||||||
using OpenSim.Region.Environment.Modules.Scripting.HttpRequest;
|
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins
|
|
||||||
{
|
|
||||||
public class HttpRequest
|
|
||||||
{
|
|
||||||
public AsyncCommandManager m_CmdManager;
|
|
||||||
|
|
||||||
public HttpRequest(AsyncCommandManager CmdManager)
|
|
||||||
{
|
|
||||||
m_CmdManager = CmdManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CheckHttpRequests()
|
|
||||||
{
|
|
||||||
if (m_CmdManager.m_ScriptEngine.World == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
IHttpRequests iHttpReq =
|
|
||||||
m_CmdManager.m_ScriptEngine.World.RequestModuleInterface<IHttpRequests>();
|
|
||||||
|
|
||||||
HttpRequestClass httpInfo = null;
|
|
||||||
|
|
||||||
if (iHttpReq != null)
|
|
||||||
httpInfo = iHttpReq.GetNextCompletedRequest();
|
|
||||||
|
|
||||||
while (httpInfo != null)
|
|
||||||
{
|
|
||||||
//m_ScriptEngine.Log.Info("[AsyncLSL]:" + httpInfo.response_body + httpInfo.status);
|
|
||||||
|
|
||||||
// Deliver data to prim's remote_data handler
|
|
||||||
//
|
|
||||||
// TODO: Returning null for metadata, since the lsl function
|
|
||||||
// only returns the byte for HTTP_BODY_TRUNCATED, which is not
|
|
||||||
// implemented here yet anyway. Should be fixed if/when maxsize
|
|
||||||
// is supported
|
|
||||||
|
|
||||||
bool handled = false;
|
|
||||||
iHttpReq.RemoveCompletedRequest(httpInfo.reqID);
|
|
||||||
foreach (ScriptEngine sman in ScriptEngine.ScriptEngines)
|
|
||||||
{
|
|
||||||
if (sman.m_ScriptManager.GetScript(httpInfo.localID, httpInfo.itemID) != null)
|
|
||||||
{
|
|
||||||
object[] resobj = new object[]
|
|
||||||
{
|
|
||||||
new LSL_Types.LSLString(httpInfo.reqID.ToString()), new LSL_Types.LSLInteger(httpInfo.status), null, new LSL_Types.LSLString(httpInfo.response_body)
|
|
||||||
};
|
|
||||||
|
|
||||||
sman.m_EventQueueManager.AddToScriptQueue(
|
|
||||||
httpInfo.localID, httpInfo.itemID, "http_response", EventQueueManager.llDetectNull, resobj
|
|
||||||
);
|
|
||||||
|
|
||||||
handled = true;
|
|
||||||
break;
|
|
||||||
//Thread.Sleep(2500);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!handled)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Unhandled http_response: " + httpInfo.reqID);
|
|
||||||
}
|
|
||||||
|
|
||||||
httpInfo = iHttpReq.GetNextCompletedRequest();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 OpenSim.Region.Environment.Interfaces;
|
|
||||||
using OpenSim.Region.Environment.Modules.Scripting.WorldComm;
|
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins
|
|
||||||
{
|
|
||||||
public class Listener
|
|
||||||
{
|
|
||||||
// private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
||||||
|
|
||||||
public AsyncCommandManager m_CmdManager;
|
|
||||||
|
|
||||||
public Listener(AsyncCommandManager CmdManager)
|
|
||||||
{
|
|
||||||
m_CmdManager = CmdManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CheckListeners()
|
|
||||||
{
|
|
||||||
if (m_CmdManager.m_ScriptEngine.World == null)
|
|
||||||
return;
|
|
||||||
IWorldComm comms = m_CmdManager.m_ScriptEngine.World.RequestModuleInterface<IWorldComm>();
|
|
||||||
|
|
||||||
if (comms != null)
|
|
||||||
{
|
|
||||||
while (comms.HasMessages())
|
|
||||||
{
|
|
||||||
ListenerInfo lInfo = comms.GetNextMessage();
|
|
||||||
if (m_CmdManager.m_ScriptEngine.m_ScriptManager.GetScript(
|
|
||||||
lInfo.GetLocalID(), lInfo.GetItemID()) != null)
|
|
||||||
{
|
|
||||||
//Deliver data to prim's listen handler
|
|
||||||
object[] resobj = new object[]
|
|
||||||
{
|
|
||||||
//lInfo.GetChannel(), lInfo.GetName(), lInfo.GetID().ToString(), lInfo.GetMessage()
|
|
||||||
new LSL_Types.LSLInteger(lInfo.GetChannel()), new LSL_Types.LSLString(lInfo.GetName()), new LSL_Types.LSLString(lInfo.GetID().ToString()), new LSL_Types.LSLString(lInfo.GetMessage())
|
|
||||||
};
|
|
||||||
|
|
||||||
m_CmdManager.m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
|
|
||||||
lInfo.GetLocalID(), lInfo.GetItemID(), "listen", EventQueueManager.llDetectNull, resobj
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// else
|
|
||||||
// m_log.Info("[ScriptEngineBase.AsyncCommandPlugins: received a listen event for a (no longer) existing script ("+lInfo.GetLocalID().AsString()+")");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,334 +0,0 @@
|
||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
//#define SPAM
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using OpenMetaverse;
|
|
||||||
using OpenSim.Framework;
|
|
||||||
using OpenSim.Region.Environment.Scenes;
|
|
||||||
using OpenSim.Framework.Communications.Cache;
|
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins
|
|
||||||
{
|
|
||||||
public class SensorRepeat
|
|
||||||
{
|
|
||||||
public AsyncCommandManager m_CmdManager;
|
|
||||||
|
|
||||||
public SensorRepeat(AsyncCommandManager CmdManager)
|
|
||||||
{
|
|
||||||
m_CmdManager = CmdManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Dictionary<uint, Dictionary<UUID, LSL_Types.list>> SenseEvents =
|
|
||||||
new Dictionary<uint, Dictionary<UUID, LSL_Types.list>>();
|
|
||||||
private Object SenseLock = new Object();
|
|
||||||
|
|
||||||
//
|
|
||||||
// SenseRepeater and Sensors
|
|
||||||
//
|
|
||||||
private class SenseRepeatClass
|
|
||||||
{
|
|
||||||
public uint localID;
|
|
||||||
public UUID itemID;
|
|
||||||
public double interval;
|
|
||||||
public DateTime next;
|
|
||||||
|
|
||||||
public string name;
|
|
||||||
public UUID keyID;
|
|
||||||
public int type;
|
|
||||||
public double range;
|
|
||||||
public double arc;
|
|
||||||
public SceneObjectPart host;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<SenseRepeatClass> SenseRepeaters = new List<SenseRepeatClass>();
|
|
||||||
private object SenseRepeatListLock = new object();
|
|
||||||
|
|
||||||
public void SetSenseRepeatEvent(uint m_localID, UUID m_itemID,
|
|
||||||
string name, UUID keyID, int type, double range, double arc, double sec, SceneObjectPart host)
|
|
||||||
{
|
|
||||||
#if SPAM
|
|
||||||
Console.WriteLine("SetSensorEvent");
|
|
||||||
#endif
|
|
||||||
// Always remove first, in case this is a re-set
|
|
||||||
UnSetSenseRepeaterEvents(m_localID, m_itemID);
|
|
||||||
if (sec == 0) // Disabling timer
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Add to timer
|
|
||||||
SenseRepeatClass ts = new SenseRepeatClass();
|
|
||||||
ts.localID = m_localID;
|
|
||||||
ts.itemID = m_itemID;
|
|
||||||
ts.interval = sec;
|
|
||||||
ts.name = name;
|
|
||||||
ts.keyID = keyID;
|
|
||||||
ts.type = type;
|
|
||||||
ts.range = range;
|
|
||||||
ts.arc = arc;
|
|
||||||
ts.host = host;
|
|
||||||
|
|
||||||
ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval);
|
|
||||||
lock (SenseRepeatListLock)
|
|
||||||
{
|
|
||||||
SenseRepeaters.Add(ts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UnSetSenseRepeaterEvents(uint m_localID, UUID m_itemID)
|
|
||||||
{
|
|
||||||
// Remove from timer
|
|
||||||
lock (SenseRepeatListLock)
|
|
||||||
{
|
|
||||||
List<SenseRepeatClass> NewSensors = new List<SenseRepeatClass>();
|
|
||||||
foreach (SenseRepeatClass ts in SenseRepeaters)
|
|
||||||
{
|
|
||||||
if (ts.localID != m_localID && ts.itemID != m_itemID)
|
|
||||||
{
|
|
||||||
NewSensors.Add(ts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
SenseRepeaters.Clear();
|
|
||||||
SenseRepeaters = NewSensors;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CheckSenseRepeaterEvents()
|
|
||||||
{
|
|
||||||
// Nothing to do here?
|
|
||||||
if (SenseRepeaters.Count == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lock (SenseRepeatListLock)
|
|
||||||
{
|
|
||||||
// Go through all timers
|
|
||||||
foreach (SenseRepeatClass ts in SenseRepeaters)
|
|
||||||
{
|
|
||||||
// Time has passed?
|
|
||||||
if (ts.next.ToUniversalTime() < DateTime.Now.ToUniversalTime())
|
|
||||||
{
|
|
||||||
SensorSweep(ts);
|
|
||||||
// set next interval
|
|
||||||
ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} // lock
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SenseOnce(uint m_localID, UUID m_itemID,
|
|
||||||
string name, UUID keyID, int type,
|
|
||||||
double range, double arc, SceneObjectPart host)
|
|
||||||
{
|
|
||||||
// Add to timer
|
|
||||||
SenseRepeatClass ts = new SenseRepeatClass();
|
|
||||||
ts.localID = m_localID;
|
|
||||||
ts.itemID = m_itemID;
|
|
||||||
ts.interval = 0;
|
|
||||||
ts.name = name;
|
|
||||||
ts.keyID = keyID;
|
|
||||||
ts.type = type;
|
|
||||||
ts.range = range;
|
|
||||||
ts.arc = arc;
|
|
||||||
ts.host = host;
|
|
||||||
SensorSweep(ts);
|
|
||||||
}
|
|
||||||
|
|
||||||
public LSL_Types.list GetSensorList(uint m_localID, UUID m_itemID)
|
|
||||||
{
|
|
||||||
lock (SenseLock)
|
|
||||||
{
|
|
||||||
Dictionary<UUID, LSL_Types.list> Obj = null;
|
|
||||||
if (!SenseEvents.TryGetValue(m_localID, out Obj))
|
|
||||||
{
|
|
||||||
#if SPAM
|
|
||||||
m_CmdManager.m_ScriptEngine.Log.Info("[AsyncLSL]: GetSensorList missing localID: " + m_localID);
|
|
||||||
#endif
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
lock (Obj)
|
|
||||||
{
|
|
||||||
// Get script
|
|
||||||
LSL_Types.list SenseList = null;
|
|
||||||
if (!Obj.TryGetValue(m_itemID, out SenseList))
|
|
||||||
{
|
|
||||||
#if SPAM
|
|
||||||
m_CmdManager.m_ScriptEngine.Log.Info("[AsyncLSL]: GetSensorList missing itemID: " + m_itemID);
|
|
||||||
#endif
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return SenseList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SensorSweep(SenseRepeatClass ts)
|
|
||||||
{
|
|
||||||
//m_ScriptEngine.Log.Info("[AsyncLSL]:Enter SensorSweep");
|
|
||||||
SceneObjectPart SensePoint = ts.host;
|
|
||||||
|
|
||||||
if (SensePoint == null)
|
|
||||||
{
|
|
||||||
|
|
||||||
#if SPAM
|
|
||||||
//m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep (SensePoint == null) for "+ts.itemID.ToString());
|
|
||||||
#endif
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
//m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep Scan");
|
|
||||||
|
|
||||||
Vector3 sensorPos = SensePoint.AbsolutePosition;
|
|
||||||
Vector3 regionPos = new Vector3(m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocX * Constants.RegionSize, m_CmdManager.m_ScriptEngine.World.RegionInfo.RegionLocY * Constants.RegionSize, 0);
|
|
||||||
Vector3 fromRegionPos = sensorPos + regionPos;
|
|
||||||
|
|
||||||
Quaternion q = SensePoint.RotationOffset;
|
|
||||||
LSL_Types.Quaternion r = new LSL_Types.Quaternion(q.X, q.Y, q.Z, q.W);
|
|
||||||
LSL_Types.Vector3 forward_dir = (new LSL_Types.Vector3(1, 0, 0) * r);
|
|
||||||
double mag_fwd = LSL_Types.Vector3.Mag(forward_dir);
|
|
||||||
|
|
||||||
// Here we should do some smart culling ...
|
|
||||||
// math seems quicker than strings so try that first
|
|
||||||
LSL_Types.list SensedObjects = new LSL_Types.list();
|
|
||||||
LSL_Types.Vector3 ZeroVector = new LSL_Types.Vector3(0, 0, 0);
|
|
||||||
|
|
||||||
foreach (EntityBase ent in m_CmdManager.m_ScriptEngine.World.Entities.Values)
|
|
||||||
{
|
|
||||||
Vector3 toRegionPos = ent.AbsolutePosition + regionPos;
|
|
||||||
double dis = Math.Abs((double)Util.GetDistanceTo(toRegionPos, fromRegionPos));
|
|
||||||
if (dis <= ts.range)
|
|
||||||
{
|
|
||||||
// In Range, is it the right Type ?
|
|
||||||
int objtype = 0;
|
|
||||||
|
|
||||||
if (m_CmdManager.m_ScriptEngine.World.GetScenePresence(ent.UUID) != null) objtype |= 0x01; // actor
|
|
||||||
if (ent.Velocity.Equals(ZeroVector))
|
|
||||||
objtype |= 0x04; // passive non-moving
|
|
||||||
else
|
|
||||||
objtype |= 0x02; // active moving
|
|
||||||
if (ent is IScript) objtype |= 0x08; // Scripted. It COULD have one hidden ...
|
|
||||||
|
|
||||||
if (((ts.type & objtype) != 0) || ((ts.type & objtype) == ts.type))
|
|
||||||
{
|
|
||||||
// docs claim AGENT|ACTIVE should find agent objects OR active objects
|
|
||||||
// so the bitwise AND with object type should be non-zero
|
|
||||||
|
|
||||||
// Right type too, what about the other params , key and name ?
|
|
||||||
bool keep = true;
|
|
||||||
if (ts.arc < Math.PI)
|
|
||||||
{
|
|
||||||
// not omni-directional. Can you see it ?
|
|
||||||
// vec forward_dir = llRot2Fwd(llGetRot())
|
|
||||||
// vec obj_dir = toRegionPos-fromRegionPos
|
|
||||||
// dot=dot(forward_dir,obj_dir)
|
|
||||||
// mag_fwd = mag(forward_dir)
|
|
||||||
// mag_obj = mag(obj_dir)
|
|
||||||
// ang = acos(dot /(mag_fwd*mag_obj))
|
|
||||||
double ang_obj = 0;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Vector3 diff = toRegionPos - fromRegionPos;
|
|
||||||
LSL_Types.Vector3 obj_dir = new LSL_Types.Vector3(diff.X, diff.Y, diff.Z);
|
|
||||||
double dot = LSL_Types.Vector3.Dot(forward_dir, obj_dir);
|
|
||||||
double mag_obj = LSL_Types.Vector3.Mag(obj_dir);
|
|
||||||
ang_obj = Math.Acos(dot / (mag_fwd * mag_obj));
|
|
||||||
}
|
|
||||||
catch
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ang_obj > ts.arc) keep = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (keep && (ts.keyID != UUID.Zero) && (ts.keyID != ent.UUID))
|
|
||||||
{
|
|
||||||
keep = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (keep && (ts.name.Length > 0))
|
|
||||||
{
|
|
||||||
string avatarname=null;
|
|
||||||
string objectname=null;
|
|
||||||
string entname =ent.Name;
|
|
||||||
|
|
||||||
// try avatar username surname
|
|
||||||
CachedUserInfo profile = m_CmdManager.m_ScriptEngine.World.CommsManager.UserProfileCacheService.GetUserDetails(ent.UUID);
|
|
||||||
if (profile != null && profile.UserProfile != null)
|
|
||||||
{
|
|
||||||
avatarname = profile.UserProfile.FirstName + " " + profile.UserProfile.SurName;
|
|
||||||
}
|
|
||||||
// try an scene object
|
|
||||||
SceneObjectPart SOP = m_CmdManager.m_ScriptEngine.World.GetSceneObjectPart(ent.UUID);
|
|
||||||
if (SOP != null)
|
|
||||||
{
|
|
||||||
objectname = SOP.Name;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ts.name != entname) && (ts.name != avatarname) && (ts.name != objectname))
|
|
||||||
{
|
|
||||||
keep = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (keep == true) SensedObjects.Add(ent.UUID);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#if SPAM
|
|
||||||
//m_ScriptEngine.Log.Info("[AsyncLSL]: Enter SensorSweep SenseLock");
|
|
||||||
#endif
|
|
||||||
lock (SenseLock)
|
|
||||||
{
|
|
||||||
// Create object if it doesn't exist
|
|
||||||
if (SenseEvents.ContainsKey(ts.localID) == false)
|
|
||||||
{
|
|
||||||
SenseEvents.Add(ts.localID, new Dictionary<UUID, LSL_Types.list>());
|
|
||||||
}
|
|
||||||
// clear if previous traces exist
|
|
||||||
Dictionary<UUID, LSL_Types.list> Obj;
|
|
||||||
SenseEvents.TryGetValue(ts.localID, out Obj);
|
|
||||||
if (Obj.ContainsKey(ts.itemID) == true)
|
|
||||||
Obj.Remove(ts.itemID);
|
|
||||||
|
|
||||||
// note list may be zero length
|
|
||||||
Obj.Add(ts.itemID, SensedObjects);
|
|
||||||
|
|
||||||
if (SensedObjects.Length == 0)
|
|
||||||
{
|
|
||||||
// send a "no_sensor"
|
|
||||||
// Add it to queue
|
|
||||||
m_CmdManager.m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(ts.localID, ts.itemID, "no_sensor", EventQueueManager.llDetectNull,
|
|
||||||
new object[] { });
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_CmdManager.m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(ts.localID, ts.itemID, "sensor", EventQueueManager.llDetectNull,
|
|
||||||
new object[] { new LSL_Types.LSLInteger(SensedObjects.Length) });
|
|
||||||
}
|
|
||||||
m_CmdManager.m_ScriptEngine.World.EventManager.TriggerTimerEvent(ts.localID, ts.interval);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,139 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 OpenMetaverse;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins
|
|
||||||
{
|
|
||||||
public class Timer
|
|
||||||
{
|
|
||||||
public AsyncCommandManager m_CmdManager;
|
|
||||||
|
|
||||||
public Timer(AsyncCommandManager CmdManager)
|
|
||||||
{
|
|
||||||
m_CmdManager = CmdManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// TIMER
|
|
||||||
//
|
|
||||||
private class TimerClass
|
|
||||||
{
|
|
||||||
public uint localID;
|
|
||||||
public UUID itemID;
|
|
||||||
//public double interval;
|
|
||||||
public long interval;
|
|
||||||
//public DateTime next;
|
|
||||||
public long next;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<TimerClass> Timers = new List<TimerClass>();
|
|
||||||
private object TimerListLock = new object();
|
|
||||||
|
|
||||||
public void SetTimerEvent(uint m_localID, UUID m_itemID, double sec)
|
|
||||||
{
|
|
||||||
// Console.WriteLine("SetTimerEvent");
|
|
||||||
|
|
||||||
// Always remove first, in case this is a re-set
|
|
||||||
UnSetTimerEvents(m_localID, m_itemID);
|
|
||||||
if (sec == 0) // Disabling timer
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Add to timer
|
|
||||||
TimerClass ts = new TimerClass();
|
|
||||||
ts.localID = m_localID;
|
|
||||||
ts.itemID = m_itemID;
|
|
||||||
ts.interval = Convert.ToInt64(sec * 10000000); // How many 100 nanoseconds (ticks) should we wait
|
|
||||||
// 2193386136332921 ticks
|
|
||||||
// 219338613 seconds
|
|
||||||
|
|
||||||
//ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval);
|
|
||||||
ts.next = DateTime.Now.Ticks + ts.interval;
|
|
||||||
lock (TimerListLock)
|
|
||||||
{
|
|
||||||
Timers.Add(ts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void UnSetTimerEvents(uint m_localID, UUID m_itemID)
|
|
||||||
{
|
|
||||||
// Remove from timer
|
|
||||||
lock (TimerListLock)
|
|
||||||
{
|
|
||||||
foreach (TimerClass ts in new ArrayList(Timers))
|
|
||||||
{
|
|
||||||
if (ts.localID == m_localID && ts.itemID == m_itemID)
|
|
||||||
Timers.Remove(ts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Old method: Create new list
|
|
||||||
//List<TimerClass> NewTimers = new List<TimerClass>();
|
|
||||||
//foreach (TimerClass ts in Timers)
|
|
||||||
//{
|
|
||||||
// if (ts.localID != m_localID && ts.itemID != m_itemID)
|
|
||||||
// {
|
|
||||||
// NewTimers.Add(ts);
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
//Timers.Clear();
|
|
||||||
//Timers = NewTimers;
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CheckTimerEvents()
|
|
||||||
{
|
|
||||||
// Nothing to do here?
|
|
||||||
if (Timers.Count == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lock (TimerListLock)
|
|
||||||
{
|
|
||||||
// Go through all timers
|
|
||||||
foreach (TimerClass ts in Timers)
|
|
||||||
{
|
|
||||||
// Time has passed?
|
|
||||||
if (ts.next < DateTime.Now.Ticks)
|
|
||||||
{
|
|
||||||
// Console.WriteLine("Time has passed: Now: " + DateTime.Now.Ticks + ", Passed: " + ts.next);
|
|
||||||
// Add it to queue
|
|
||||||
m_CmdManager.m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(ts.localID, ts.itemID, "timer", EventQueueManager.llDetectNull,
|
|
||||||
null);
|
|
||||||
m_CmdManager.m_ScriptEngine.World.EventManager.TriggerTimerEvent(ts.localID, ((double)ts.interval / 10000000));
|
|
||||||
// set next interval
|
|
||||||
|
|
||||||
//ts.next = DateTime.Now.ToUniversalTime().AddSeconds(ts.interval);
|
|
||||||
ts.next = DateTime.Now.Ticks + ts.interval;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,130 +0,0 @@
|
||||||
/*
|
|
||||||
* 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 OpenSim.Region.Environment.Interfaces;
|
|
||||||
using OpenSim.Region.Environment.Modules.Scripting.XMLRPC;
|
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase.AsyncCommandPlugins
|
|
||||||
{
|
|
||||||
public class XmlRequest
|
|
||||||
{
|
|
||||||
public AsyncCommandManager m_CmdManager;
|
|
||||||
|
|
||||||
public XmlRequest(AsyncCommandManager CmdManager)
|
|
||||||
{
|
|
||||||
m_CmdManager = CmdManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void CheckXMLRPCRequests()
|
|
||||||
{
|
|
||||||
if (m_CmdManager.m_ScriptEngine.World == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
IXMLRPC xmlrpc = m_CmdManager.m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>();
|
|
||||||
if (null == xmlrpc)
|
|
||||||
return;
|
|
||||||
|
|
||||||
// Process the completed request queue
|
|
||||||
RPCRequestInfo rInfo = xmlrpc.GetNextCompletedRequest();
|
|
||||||
|
|
||||||
while (rInfo != null)
|
|
||||||
{
|
|
||||||
bool handled = false;
|
|
||||||
|
|
||||||
// Request must be taken out of the queue in case there is no handler, otherwise we loop infinitely
|
|
||||||
xmlrpc.RemoveCompletedRequest(rInfo.GetMessageID());
|
|
||||||
|
|
||||||
// And since the xmlrpc request queue is actually shared among all regions on the simulator, we need
|
|
||||||
// to look in each one for the appropriate handler
|
|
||||||
foreach (ScriptEngine sman in ScriptEngine.ScriptEngines) {
|
|
||||||
if (sman.m_ScriptManager.GetScript(rInfo.GetLocalID(),rInfo.GetItemID()) != null) {
|
|
||||||
|
|
||||||
//Deliver data to prim's remote_data handler
|
|
||||||
object[] resobj = new object[]
|
|
||||||
{
|
|
||||||
new LSL_Types.LSLInteger(2), new LSL_Types.LSLString(rInfo.GetChannelKey().ToString()), new LSL_Types.LSLString(rInfo.GetMessageID().ToString()), new LSL_Types.LSLString(String.Empty),
|
|
||||||
new LSL_Types.LSLInteger(rInfo.GetIntValue()),
|
|
||||||
new LSL_Types.LSLString(rInfo.GetStrVal())
|
|
||||||
};
|
|
||||||
sman.m_EventQueueManager.AddToScriptQueue(
|
|
||||||
rInfo.GetLocalID(), rInfo.GetItemID(), "remote_data", EventQueueManager.llDetectNull, resobj
|
|
||||||
);
|
|
||||||
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! handled)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Unhandled xml_request: " + rInfo.GetItemID());
|
|
||||||
}
|
|
||||||
|
|
||||||
rInfo = xmlrpc.GetNextCompletedRequest();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Process the send queue
|
|
||||||
SendRemoteDataRequest srdInfo = xmlrpc.GetNextCompletedSRDRequest();
|
|
||||||
|
|
||||||
while (srdInfo != null)
|
|
||||||
{
|
|
||||||
bool handled = false;
|
|
||||||
|
|
||||||
// Request must be taken out of the queue in case there is no handler, otherwise we loop infinitely
|
|
||||||
xmlrpc.RemoveCompletedSRDRequest(srdInfo.GetReqID());
|
|
||||||
|
|
||||||
// And this is another shared queue... so we check each of the script engines for a handler
|
|
||||||
foreach (ScriptEngine sman in ScriptEngine.ScriptEngines)
|
|
||||||
{
|
|
||||||
if (sman.m_ScriptManager.GetScript(srdInfo.m_localID,srdInfo.m_itemID) != null) {
|
|
||||||
|
|
||||||
//Deliver data to prim's remote_data handler
|
|
||||||
object[] resobj = new object[]
|
|
||||||
{
|
|
||||||
new LSL_Types.LSLInteger(3), new LSL_Types.LSLString(srdInfo.channel.ToString()), new LSL_Types.LSLString(srdInfo.GetReqID().ToString()), new LSL_Types.LSLString(String.Empty),
|
|
||||||
new LSL_Types.LSLInteger(srdInfo.idata),
|
|
||||||
new LSL_Types.LSLString(srdInfo.sdata)
|
|
||||||
};
|
|
||||||
sman.m_EventQueueManager.AddToScriptQueue(
|
|
||||||
srdInfo.m_localID, srdInfo.m_itemID, "remote_data", EventQueueManager.llDetectNull, resobj
|
|
||||||
);
|
|
||||||
|
|
||||||
handled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (! handled)
|
|
||||||
{
|
|
||||||
Console.WriteLine("Unhandled xml_srdrequest: " + srdInfo.GetReqID());
|
|
||||||
}
|
|
||||||
|
|
||||||
srdInfo = xmlrpc.GetNextCompletedSRDRequest();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -114,83 +114,103 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
public void changed(uint localID, uint change)
|
public void changed(uint localID, uint change)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in localID, Object pass change.
|
// Add to queue for all scripts in localID, Object pass change.
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "changed", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(change) });
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"changed",new object[] { new LSL_Types.LSLInteger(change) },
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void state_entry(uint localID)
|
public void state_entry(uint localID)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "state_entry", EventQueueManager.llDetectNull, new object[] { });
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"state_entry",new object[] { },
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch_start(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient)
|
public void touch_start(uint localID, uint originalID, Vector3 offsetPos,
|
||||||
|
IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
DetectParams[] det = new DetectParams[1];
|
||||||
detstruct._key = new LSL_Types.key[1];
|
det[0] = new DetectParams();
|
||||||
detstruct._key2 = new LSL_Types.key[1];
|
det[0].Key = remoteClient.AgentId;
|
||||||
detstruct._string = new string[1];
|
det[0].Populate(myScriptEngine.World);
|
||||||
detstruct._Vector3 = new LSL_Types.Vector3[1];
|
|
||||||
detstruct._Vector32 = new LSL_Types.Vector3[1];
|
if (originalID == 0)
|
||||||
detstruct._Quaternion = new LSL_Types.Quaternion[1];
|
|
||||||
detstruct._int = new int[1];
|
|
||||||
ScenePresence av = myScriptEngine.World.GetScenePresence(remoteClient.AgentId);
|
|
||||||
if (av != null)
|
|
||||||
{
|
{
|
||||||
detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(localID);
|
||||||
detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
|
if (part == null)
|
||||||
detstruct._string[0] = remoteClient.Name;
|
return;
|
||||||
detstruct._int[0] = 0;
|
|
||||||
detstruct._Quaternion[0] = new LSL_Types.Quaternion(av.Rotation.X,av.Rotation.Y,av.Rotation.Z,av.Rotation.W);
|
det[0].LinkNum = part.LinkNum;
|
||||||
detstruct._Vector3[0] = new LSL_Types.Vector3(av.AbsolutePosition.X,av.AbsolutePosition.Y,av.AbsolutePosition.Z);
|
|
||||||
detstruct._Vector32[0] = new LSL_Types.Vector3(av.Velocity.X,av.Velocity.Y,av.Velocity.Z);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
|
SceneObjectPart originalPart = myScriptEngine.World.GetSceneObjectPart(originalID);
|
||||||
detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
|
det[0].LinkNum = originalPart.LinkNum;
|
||||||
detstruct._string[0] = remoteClient.Name;
|
|
||||||
detstruct._int[0] = 0;
|
|
||||||
detstruct._Quaternion[0] = new LSL_Types.Quaternion(0, 0, 0, 1);
|
|
||||||
detstruct._Vector3[0] = new LSL_Types.Vector3(0, 0, 0);
|
|
||||||
detstruct._Vector32[0] = new LSL_Types.Vector3(0, 0, 0);
|
|
||||||
}
|
}
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_start", detstruct, new object[] { new LSL_Types.LSLInteger(1) });
|
|
||||||
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"touch_start", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
|
det));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void touch(uint localID, uint originalID, Vector3 offsetPos,
|
||||||
|
IClientAPI remoteClient)
|
||||||
|
{
|
||||||
|
// Add to queue for all scripts in ObjectID object
|
||||||
|
DetectParams[] det = new DetectParams[1];
|
||||||
|
det[0] = new DetectParams();
|
||||||
|
det[0].Key = remoteClient.AgentId;
|
||||||
|
det[0].Populate(myScriptEngine.World);
|
||||||
|
det[0].OffsetPos = new LSL_Types.Vector3(offsetPos.X,
|
||||||
|
offsetPos.Y,
|
||||||
|
offsetPos.Z);
|
||||||
|
|
||||||
|
if (originalID == 0)
|
||||||
|
{
|
||||||
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(localID);
|
||||||
|
if (part == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
det[0].LinkNum = part.LinkNum;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SceneObjectPart originalPart = myScriptEngine.World.GetSceneObjectPart(originalID);
|
||||||
|
det[0].LinkNum = originalPart.LinkNum;
|
||||||
|
}
|
||||||
|
|
||||||
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"touch", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
|
det));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void touch_end(uint localID, uint originalID, IClientAPI remoteClient)
|
public void touch_end(uint localID, uint originalID, IClientAPI remoteClient)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
// Add to queue for all scripts in ObjectID object
|
||||||
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
DetectParams[] det = new DetectParams[1];
|
||||||
detstruct._key = new LSL_Types.key[1];
|
det[0] = new DetectParams();
|
||||||
detstruct._key2 = new LSL_Types.key[1];
|
det[0].Key = remoteClient.AgentId;
|
||||||
detstruct._string = new string[1];
|
det[0].Populate(myScriptEngine.World);
|
||||||
detstruct._Vector3 = new LSL_Types.Vector3[1];
|
|
||||||
detstruct._Vector32 = new LSL_Types.Vector3[1];
|
if (originalID == 0)
|
||||||
detstruct._Quaternion = new LSL_Types.Quaternion[1];
|
|
||||||
detstruct._int = new int[1];
|
|
||||||
ScenePresence av = myScriptEngine.World.GetScenePresence(remoteClient.AgentId);
|
|
||||||
if (av != null)
|
|
||||||
{
|
{
|
||||||
detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
|
SceneObjectPart part = myScriptEngine.World.GetSceneObjectPart(localID);
|
||||||
detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
|
if (part == null)
|
||||||
detstruct._string[0] = remoteClient.Name;
|
return;
|
||||||
detstruct._int[0] = 0;
|
|
||||||
detstruct._Quaternion[0] = new LSL_Types.Quaternion(av.Rotation.X, av.Rotation.Y, av.Rotation.Z, av.Rotation.W);
|
det[0].LinkNum = part.LinkNum;
|
||||||
detstruct._Vector3[0] = new LSL_Types.Vector3(av.AbsolutePosition.X, av.AbsolutePosition.Y, av.AbsolutePosition.Z);
|
|
||||||
detstruct._Vector32[0] = new LSL_Types.Vector3(av.Velocity.X, av.Velocity.Y, av.Velocity.Z);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
detstruct._key[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
|
SceneObjectPart originalPart = myScriptEngine.World.GetSceneObjectPart(originalID);
|
||||||
detstruct._key2[0] = new LSL_Types.key(remoteClient.AgentId.ToString());
|
det[0].LinkNum = originalPart.LinkNum;
|
||||||
detstruct._string[0] = remoteClient.Name;
|
|
||||||
detstruct._int[0] = 0;
|
|
||||||
detstruct._Quaternion[0] = new LSL_Types.Quaternion(0, 0, 0, 1);
|
|
||||||
detstruct._Vector3[0] = new LSL_Types.Vector3(0, 0, 0);
|
|
||||||
detstruct._Vector32[0] = new LSL_Types.Vector3(0, 0, 0);
|
|
||||||
}
|
}
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "touch_end", detstruct, new object[] { new LSL_Types.LSLInteger(1) });
|
|
||||||
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"touch_end", new Object[] { new LSL_Types.LSLInteger(1) },
|
||||||
|
det));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine)
|
public void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine)
|
||||||
|
@ -228,7 +248,11 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
|
|
||||||
public void money(uint localID, UUID agentID, int amount)
|
public void money(uint localID, UUID agentID, int amount)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "money", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLString(agentID.ToString()), new LSL_Types.LSLInteger(amount) });
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"money", new object[] {
|
||||||
|
new LSL_Types.LSLString(agentID.ToString()),
|
||||||
|
new LSL_Types.LSLInteger(amount) },
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Replace placeholders below
|
// TODO: Replace placeholders below
|
||||||
|
@ -239,225 +263,196 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
|
|
||||||
public void state_exit(uint localID)
|
public void state_exit(uint localID)
|
||||||
{
|
{
|
||||||
// Add to queue for all scripts in ObjectID object
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "state_exit", EventQueueManager.llDetectNull, new object[] { });
|
"state_exit", new object[] { },
|
||||||
}
|
new DetectParams[0]));
|
||||||
|
|
||||||
public void touch(uint localID, uint originalID, UUID itemID)
|
|
||||||
{
|
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "touch", EventQueueManager.llDetectNull);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void touch_end(uint localID, uint originalID, UUID itemID)
|
|
||||||
{
|
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "touch_end", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(1) });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void collision_start(uint localID, ColliderArgs col)
|
public void collision_start(uint localID, ColliderArgs col)
|
||||||
{
|
{
|
||||||
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
// Add to queue for all scripts in ObjectID object
|
||||||
detstruct._string = new string[col.Colliders.Count];
|
List<DetectParams> det = new List<DetectParams>();
|
||||||
detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count];
|
|
||||||
detstruct._int = new int[col.Colliders.Count];
|
|
||||||
detstruct._key = new LSL_Types.key[col.Colliders.Count];
|
|
||||||
detstruct._key2 = new LSL_Types.key[col.Colliders.Count];
|
|
||||||
detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count];
|
|
||||||
detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count];
|
|
||||||
detstruct._bool = new bool[col.Colliders.Count];
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
foreach (DetectedObject detobj in col.Colliders)
|
foreach (DetectedObject detobj in col.Colliders)
|
||||||
{
|
{
|
||||||
detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString());
|
DetectParams d = new DetectParams();
|
||||||
detstruct._key2[i] = new LSL_Types.key(detobj.ownerUUID.ToString());
|
d.Key =detobj.keyUUID;
|
||||||
detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W);
|
d.Populate(myScriptEngine.World);
|
||||||
detstruct._string[i] = detobj.nameStr;
|
det.Add(d);
|
||||||
detstruct._int[i] = detobj.colliderType;
|
|
||||||
detstruct._Vector3[i] = new LSL_Types.Vector3(detobj.posVector.X, detobj.posVector.Y, detobj.posVector.Z);
|
|
||||||
detstruct._Vector32[i] = new LSL_Types.Vector3(detobj.velVector.X, detobj.velVector.Y, detobj.velVector.Z);
|
|
||||||
detstruct._bool[i] = true; // Apparently the script engine uses this to see if this is a valid entry...
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "collision_start", detstruct, new object[] { new LSL_Types.LSLInteger(col.Colliders.Count) });
|
if (det.Count > 0)
|
||||||
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"collision_start",
|
||||||
|
new Object[] { new LSL_Types.LSLInteger(det.Count) },
|
||||||
|
det.ToArray()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void collision(uint localID, ColliderArgs col)
|
public void collision(uint localID, ColliderArgs col)
|
||||||
{
|
{
|
||||||
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
// Add to queue for all scripts in ObjectID object
|
||||||
detstruct._string = new string[col.Colliders.Count];
|
List<DetectParams> det = new List<DetectParams>();
|
||||||
detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count];
|
|
||||||
detstruct._int = new int[col.Colliders.Count];
|
|
||||||
detstruct._key = new LSL_Types.key[col.Colliders.Count];
|
|
||||||
detstruct._key2 = new LSL_Types.key[col.Colliders.Count];
|
|
||||||
detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count];
|
|
||||||
detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count];
|
|
||||||
detstruct._bool = new bool[col.Colliders.Count];
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
foreach (DetectedObject detobj in col.Colliders)
|
foreach (DetectedObject detobj in col.Colliders)
|
||||||
{
|
{
|
||||||
detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString());
|
DetectParams d = new DetectParams();
|
||||||
detstruct._key2[i] = new LSL_Types.key(detobj.ownerUUID.ToString());
|
d.Key =detobj.keyUUID;
|
||||||
detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W);
|
d.Populate(myScriptEngine.World);
|
||||||
detstruct._string[i] = detobj.nameStr;
|
det.Add(d);
|
||||||
detstruct._int[i] = detobj.colliderType;
|
|
||||||
detstruct._Vector3[i] = new LSL_Types.Vector3(detobj.posVector.X, detobj.posVector.Y, detobj.posVector.Z);
|
|
||||||
detstruct._Vector32[i] = new LSL_Types.Vector3(detobj.velVector.X, detobj.velVector.Y, detobj.velVector.Z);
|
|
||||||
detstruct._bool[i] = true; // Apparently the script engine uses this to see if this is a valid entry... i++;
|
|
||||||
}
|
}
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "collision", detstruct, new object[] { new LSL_Types.LSLInteger(col.Colliders.Count) });
|
|
||||||
|
if (det.Count > 0)
|
||||||
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"collision", new Object[] { new LSL_Types.LSLInteger(det.Count) },
|
||||||
|
det.ToArray()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void collision_end(uint localID, ColliderArgs col)
|
public void collision_end(uint localID, ColliderArgs col)
|
||||||
{
|
{
|
||||||
EventQueueManager.Queue_llDetectParams_Struct detstruct = new EventQueueManager.Queue_llDetectParams_Struct();
|
// Add to queue for all scripts in ObjectID object
|
||||||
detstruct._string = new string[col.Colliders.Count];
|
List<DetectParams> det = new List<DetectParams>();
|
||||||
detstruct._Quaternion = new LSL_Types.Quaternion[col.Colliders.Count];
|
|
||||||
detstruct._int = new int[col.Colliders.Count];
|
|
||||||
detstruct._key = new LSL_Types.key[col.Colliders.Count];
|
|
||||||
detstruct._key2 = new LSL_Types.key[col.Colliders.Count];
|
|
||||||
detstruct._Vector3 = new LSL_Types.Vector3[col.Colliders.Count];
|
|
||||||
detstruct._Vector32 = new LSL_Types.Vector3[col.Colliders.Count];
|
|
||||||
detstruct._bool = new bool[col.Colliders.Count];
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
foreach (DetectedObject detobj in col.Colliders)
|
foreach (DetectedObject detobj in col.Colliders)
|
||||||
{
|
{
|
||||||
detstruct._key[i] = new LSL_Types.key(detobj.keyUUID.ToString());
|
DetectParams d = new DetectParams();
|
||||||
detstruct._key2[i] = new LSL_Types.key(detobj.ownerUUID.ToString());
|
d.Key =detobj.keyUUID;
|
||||||
detstruct._Quaternion[i] = new LSL_Types.Quaternion(detobj.rotQuat.X, detobj.rotQuat.Y, detobj.rotQuat.Z, detobj.rotQuat.W);
|
d.Populate(myScriptEngine.World);
|
||||||
detstruct._string[i] = detobj.nameStr;
|
det.Add(d);
|
||||||
detstruct._int[i] = detobj.colliderType;
|
|
||||||
detstruct._Vector3[i] = new LSL_Types.Vector3(detobj.posVector.X, detobj.posVector.Y, detobj.posVector.Z);
|
|
||||||
detstruct._Vector32[i] = new LSL_Types.Vector3(detobj.velVector.X, detobj.velVector.Y, detobj.velVector.Z);
|
|
||||||
detstruct._bool[i] = true; // Apparently the script engine uses this to see if this is a valid entry...
|
|
||||||
i++;
|
|
||||||
}
|
}
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "collision_end", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(col.Colliders.Count) });
|
|
||||||
|
if (det.Count > 0)
|
||||||
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"collision_end",
|
||||||
|
new Object[] { new LSL_Types.LSLInteger(det.Count) },
|
||||||
|
det.ToArray()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void land_collision_start(uint localID, UUID itemID)
|
public void land_collision_start(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "land_collision_start", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"land_collision_start",
|
||||||
|
new object[0],
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void land_collision(uint localID, ColliderArgs col)
|
public void land_collision(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "land_collision", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"land_collision",
|
||||||
|
new object[0],
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void land_collision_end(uint localID, UUID itemID)
|
public void land_collision_end(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "land_collision_end", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"land_collision_end",
|
||||||
|
new object[0],
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handled by long commands
|
// Handled by long commands
|
||||||
public void timer(uint localID, UUID itemID)
|
public void timer(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
//myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, String.Empty);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void listen(uint localID, UUID itemID)
|
public void listen(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "listen", EventQueueManager.llDetectNull);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void on_rez(uint localID, UUID itemID)
|
|
||||||
{
|
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "on_rez", EventQueueManager.llDetectNull);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sensor(uint localID, UUID itemID)
|
|
||||||
{
|
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "sensor", EventQueueManager.llDetectNull);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void no_sensor(uint localID, UUID itemID)
|
|
||||||
{
|
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "no_sensor", EventQueueManager.llDetectNull);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void control(uint localID, UUID itemID, UUID agentID, uint held, uint change)
|
public void control(uint localID, UUID itemID, UUID agentID, uint held, uint change)
|
||||||
{
|
{
|
||||||
if ((change == 0) && (myScriptEngine.m_EventQueueManager.CheckEeventQueueForEvent(localID,"control"))) return;
|
if ((change == 0) && (myScriptEngine.m_EventQueueManager.CheckEeventQueueForEvent(localID,"control"))) return;
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "control", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLString(agentID.ToString()), new LSL_Types.LSLInteger(held), new LSL_Types.LSLInteger(change)});
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"control",new object[] {
|
||||||
|
new LSL_Types.LSLString(agentID.ToString()),
|
||||||
|
new LSL_Types.LSLInteger(held),
|
||||||
|
new LSL_Types.LSLInteger(change)},
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void email(uint localID, UUID itemID)
|
public void email(uint localID, UUID itemID, string timeSent,
|
||||||
|
string address, string subject, string message, int numLeft)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "email", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"email",new object[] {
|
||||||
|
new LSL_Types.LSLString(timeSent),
|
||||||
|
new LSL_Types.LSLString(address),
|
||||||
|
new LSL_Types.LSLString(subject),
|
||||||
|
new LSL_Types.LSLString(message),
|
||||||
|
new LSL_Types.LSLInteger(numLeft)},
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void at_target(uint localID, uint handle, Vector3 targetpos, Vector3 atpos)
|
public void at_target(uint localID, uint handle, Vector3 targetpos,
|
||||||
|
Vector3 atpos)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "at_target", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(handle), new LSL_Types.Vector3(targetpos.X,targetpos.Y,targetpos.Z), new LSL_Types.Vector3(atpos.X,atpos.Y,atpos.Z) });
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"at_target", new object[] {
|
||||||
|
new LSL_Types.LSLInteger(handle),
|
||||||
|
new LSL_Types.Vector3(targetpos.X,targetpos.Y,targetpos.Z),
|
||||||
|
new LSL_Types.Vector3(atpos.X,atpos.Y,atpos.Z) },
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void not_at_target(uint localID)
|
public void not_at_target(uint localID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToObjectQueue(localID, "not_at_target", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"not_at_target",new object[0],
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void at_rot_target(uint localID, UUID itemID)
|
public void at_rot_target(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "at_rot_target", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"at_rot_target",new object[0],
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void not_at_rot_target(uint localID, UUID itemID)
|
public void not_at_rot_target(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "not_at_rot_target", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
}
|
"not_at_rot_target",new object[0],
|
||||||
|
new DetectParams[0]));
|
||||||
public void run_time_permissions(uint localID, UUID itemID)
|
|
||||||
{
|
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "run_time_permissions", EventQueueManager.llDetectNull);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void changed(uint localID, UUID itemID)
|
|
||||||
{
|
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "changed", EventQueueManager.llDetectNull);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void attach(uint localID, UUID itemID)
|
public void attach(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "attach", EventQueueManager.llDetectNull);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dataserver(uint localID, UUID itemID)
|
public void dataserver(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "dataserver", EventQueueManager.llDetectNull);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void link_message(uint localID, UUID itemID)
|
public void link_message(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "link_message", EventQueueManager.llDetectNull);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void moving_start(uint localID, UUID itemID)
|
public void moving_start(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "moving_start", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"moving_start",new object[0],
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void moving_end(uint localID, UUID itemID)
|
public void moving_end(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "moving_end", EventQueueManager.llDetectNull);
|
myScriptEngine.PostObjectEvent(localID, new EventParams(
|
||||||
|
"moving_end",new object[0],
|
||||||
|
new DetectParams[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void object_rez(uint localID, UUID itemID)
|
public void object_rez(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "object_rez", EventQueueManager.llDetectNull);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void remote_data(uint localID, UUID itemID)
|
public void remote_data(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "remote_data", EventQueueManager.llDetectNull);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handled by long commands
|
// Handled by long commands
|
||||||
public void http_response(uint localID, UUID itemID)
|
public void http_response(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
// myScriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "http_response", EventQueueManager.llDetectNull);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -137,32 +137,10 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
public uint localID;
|
public uint localID;
|
||||||
public UUID itemID;
|
public UUID itemID;
|
||||||
public string functionName;
|
public string functionName;
|
||||||
public Queue_llDetectParams_Struct llDetectParams;
|
public DetectParams[] llDetectParams;
|
||||||
public object[] param;
|
public object[] param;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Shared empty llDetectNull
|
|
||||||
/// </summary>
|
|
||||||
public readonly static Queue_llDetectParams_Struct llDetectNull = new Queue_llDetectParams_Struct();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Structure to hold data for llDetect* commands
|
|
||||||
/// </summary>
|
|
||||||
[Serializable]
|
|
||||||
public struct Queue_llDetectParams_Struct
|
|
||||||
{
|
|
||||||
// More or less just a placeholder for the actual moving of additional data
|
|
||||||
// should be fixed to something better :)
|
|
||||||
public LSL_Types.key[] _key; // detected key
|
|
||||||
public LSL_Types.key[] _key2; // ownerkey
|
|
||||||
public LSL_Types.Quaternion[] _Quaternion;
|
|
||||||
public LSL_Types.Vector3[] _Vector3; // Pos
|
|
||||||
public LSL_Types.Vector3[] _Vector32; // Vel
|
|
||||||
public bool[] _bool;
|
|
||||||
public int[] _int;
|
|
||||||
public string[] _string;
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region " Initialization / Startup "
|
#region " Initialization / Startup "
|
||||||
|
@ -322,7 +300,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
/// <param name="localID">Region object ID</param>
|
/// <param name="localID">Region object ID</param>
|
||||||
/// <param name="FunctionName">Name of the function, will be state + "_event_" + FunctionName</param>
|
/// <param name="FunctionName">Name of the function, will be state + "_event_" + FunctionName</param>
|
||||||
/// <param name="param">Array of parameters to match event mask</param>
|
/// <param name="param">Array of parameters to match event mask</param>
|
||||||
public bool AddToObjectQueue(uint localID, string FunctionName, Queue_llDetectParams_Struct qParams, params object[] param)
|
public bool AddToObjectQueue(uint localID, string FunctionName, DetectParams[] qParams, params object[] param)
|
||||||
{
|
{
|
||||||
// Determine all scripts in Object and add to their queue
|
// Determine all scripts in Object and add to their queue
|
||||||
//myScriptEngine.log.Info("[" + ScriptEngineName + "]: EventQueueManager Adding localID: " + localID + ", FunctionName: " + FunctionName);
|
//myScriptEngine.log.Info("[" + ScriptEngineName + "]: EventQueueManager Adding localID: " + localID + ", FunctionName: " + FunctionName);
|
||||||
|
@ -353,7 +331,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
/// <param name="itemID">Region script ID</param>
|
/// <param name="itemID">Region script ID</param>
|
||||||
/// <param name="FunctionName">Name of the function, will be state + "_event_" + FunctionName</param>
|
/// <param name="FunctionName">Name of the function, will be state + "_event_" + FunctionName</param>
|
||||||
/// <param name="param">Array of parameters to match event mask</param>
|
/// <param name="param">Array of parameters to match event mask</param>
|
||||||
public bool AddToScriptQueue(uint localID, UUID itemID, string FunctionName, Queue_llDetectParams_Struct qParams, params object[] param)
|
public bool AddToScriptQueue(uint localID, UUID itemID, string FunctionName, DetectParams[] qParams, params object[] param)
|
||||||
{
|
{
|
||||||
List<UUID> keylist = m_ScriptEngine.m_ScriptManager.GetScriptKeys(localID);
|
List<UUID> keylist = m_ScriptEngine.m_ScriptManager.GetScriptKeys(localID);
|
||||||
|
|
||||||
|
|
|
@ -57,7 +57,6 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
public EventQueueManager m_EventQueueManager; // Executes events, handles script threads
|
public EventQueueManager m_EventQueueManager; // Executes events, handles script threads
|
||||||
public ScriptManager m_ScriptManager; // Load, unload and execute scripts
|
public ScriptManager m_ScriptManager; // Load, unload and execute scripts
|
||||||
public AppDomainManager m_AppDomainManager; // Handles loading/unloading of scripts into AppDomains
|
public AppDomainManager m_AppDomainManager; // Handles loading/unloading of scripts into AppDomains
|
||||||
public AsyncCommandManager m_ASYNCLSLCommandManager; // Asyncronous LSL commands (commands that returns with an event)
|
|
||||||
public static MaintenanceThread m_MaintenanceThread; // Thread that does different kinds of maintenance, for example refreshing config and killing scripts that has been running too long
|
public static MaintenanceThread m_MaintenanceThread; // Thread that does different kinds of maintenance, for example refreshing config and killing scripts that has been running too long
|
||||||
|
|
||||||
public IConfigSource ConfigSource;
|
public IConfigSource ConfigSource;
|
||||||
|
@ -121,7 +120,6 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
// We need to start it
|
// We need to start it
|
||||||
m_ScriptManager = newScriptManager;
|
m_ScriptManager = newScriptManager;
|
||||||
m_AppDomainManager = new AppDomainManager(this);
|
m_AppDomainManager = new AppDomainManager(this);
|
||||||
m_ASYNCLSLCommandManager = new AsyncCommandManager(this);
|
|
||||||
if (m_MaintenanceThread == null)
|
if (m_MaintenanceThread == null)
|
||||||
m_MaintenanceThread = new MaintenanceThread();
|
m_MaintenanceThread = new MaintenanceThread();
|
||||||
|
|
||||||
|
@ -172,7 +170,6 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
if (m_EventManager != null) m_EventManager.ReadConfig();
|
if (m_EventManager != null) m_EventManager.ReadConfig();
|
||||||
if (m_ScriptManager != null) m_ScriptManager.ReadConfig();
|
if (m_ScriptManager != null) m_ScriptManager.ReadConfig();
|
||||||
if (m_AppDomainManager != null) m_AppDomainManager.ReadConfig();
|
if (m_AppDomainManager != null) m_AppDomainManager.ReadConfig();
|
||||||
if (m_ASYNCLSLCommandManager != null) m_ASYNCLSLCommandManager.ReadConfig();
|
|
||||||
if (m_MaintenanceThread != null) m_MaintenanceThread.ReadConfig();
|
if (m_MaintenanceThread != null) m_MaintenanceThread.ReadConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,15 +193,33 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
|
|
||||||
public bool PostObjectEvent(uint localID, EventParams p)
|
public bool PostObjectEvent(uint localID, EventParams p)
|
||||||
{
|
{
|
||||||
return m_EventQueueManager.AddToObjectQueue(localID, p.EventName, EventQueueManager.llDetectNull, p.Params);
|
return m_EventQueueManager.AddToObjectQueue(localID, p.EventName, p.DetectParams, p.Params);
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool PostScriptEvent(UUID itemID, EventParams p)
|
public bool PostScriptEvent(UUID itemID, EventParams p)
|
||||||
{
|
{
|
||||||
uint localID = m_ScriptManager.GetLocalID(itemID);
|
uint localID = m_ScriptManager.GetLocalID(itemID);
|
||||||
return m_EventQueueManager.AddToScriptQueue(localID, itemID, p.EventName, EventQueueManager.llDetectNull, p.Params);
|
return m_EventQueueManager.AddToScriptQueue(localID, itemID, p.EventName, p.DetectParams, p.Params);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DetectParams GetDetectParams(UUID itemID, int number)
|
||||||
|
{
|
||||||
|
uint localID = m_ScriptManager.GetLocalID(itemID);
|
||||||
|
if (localID == 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
IScript Script = m_ScriptManager.GetScript(localID, itemID);
|
||||||
|
|
||||||
|
if (Script == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
DetectParams[] det = m_ScriptManager.GetDetectParams(Script);
|
||||||
|
|
||||||
|
if (number < 0 || number >= det.Length)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return det[number];
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ using System.Runtime.Serialization.Formatters.Binary;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Region.Environment.Scenes;
|
using OpenSim.Region.Environment.Scenes;
|
||||||
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
{
|
{
|
||||||
|
@ -65,6 +66,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
private int LoadUnloadMaxQueueSize;
|
private int LoadUnloadMaxQueueSize;
|
||||||
private Object scriptLock = new Object();
|
private Object scriptLock = new Object();
|
||||||
private bool m_started = false;
|
private bool m_started = false;
|
||||||
|
private Dictionary<IScript, DetectParams[]> detparms = new Dictionary<IScript, DetectParams[]>();
|
||||||
|
|
||||||
// Load/Unload structure
|
// Load/Unload structure
|
||||||
private struct LUStruct
|
private struct LUStruct
|
||||||
|
@ -228,6 +230,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
if (item.Action == LUType.Unload)
|
if (item.Action == LUType.Unload)
|
||||||
{
|
{
|
||||||
_StopScript(item.localID, item.itemID);
|
_StopScript(item.localID, item.itemID);
|
||||||
|
RemoveScript(item.localID, item.itemID);
|
||||||
}
|
}
|
||||||
else if (item.Action == LUType.Load)
|
else if (item.Action == LUType.Load)
|
||||||
{
|
{
|
||||||
|
@ -318,7 +321,7 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
/// <param name="itemID">Script ID</param>
|
/// <param name="itemID">Script ID</param>
|
||||||
/// <param name="FunctionName">Name of function</param>
|
/// <param name="FunctionName">Name of function</param>
|
||||||
/// <param name="args">Arguments to pass to function</param>
|
/// <param name="args">Arguments to pass to function</param>
|
||||||
internal void ExecuteEvent(uint localID, UUID itemID, string FunctionName, EventQueueManager.Queue_llDetectParams_Struct qParams, object[] args)
|
internal void ExecuteEvent(uint localID, UUID itemID, string FunctionName, DetectParams[] qParams, object[] args)
|
||||||
{
|
{
|
||||||
//cfk 2-7-08 dont need this right now and the default Linux build has DEBUG defined
|
//cfk 2-7-08 dont need this right now and the default Linux build has DEBUG defined
|
||||||
///#if DEBUG
|
///#if DEBUG
|
||||||
|
@ -337,8 +340,9 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
/// Console.WriteLine("ScriptEngine: Executing event: " + FunctionName);
|
/// Console.WriteLine("ScriptEngine: Executing event: " + FunctionName);
|
||||||
///#endif
|
///#endif
|
||||||
// Must be done in correct AppDomain, so leaving it up to the script itself
|
// Must be done in correct AppDomain, so leaving it up to the script itself
|
||||||
Script.llDetectParams = qParams;
|
detparms[Script] = qParams;
|
||||||
Script.Exec.ExecuteEvent(FunctionName, args);
|
Script.Exec.ExecuteEvent(FunctionName, args);
|
||||||
|
detparms.Remove(Script);
|
||||||
}
|
}
|
||||||
|
|
||||||
public uint GetLocalID(UUID itemID)
|
public uint GetLocalID(UUID itemID)
|
||||||
|
@ -430,6 +434,9 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
|
|
||||||
public void RemoveScript(uint localID, UUID itemID)
|
public void RemoveScript(uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
|
if (localID == 0)
|
||||||
|
localID = GetLocalID(itemID);
|
||||||
|
|
||||||
// Don't have that object?
|
// Don't have that object?
|
||||||
if (Scripts.ContainsKey(localID) == false)
|
if (Scripts.ContainsKey(localID) == false)
|
||||||
return;
|
return;
|
||||||
|
@ -486,5 +493,13 @@ namespace OpenSim.Region.ScriptEngine.Common.ScriptEngineBase
|
||||||
// set { _PleaseShutdown = value; }
|
// set { _PleaseShutdown = value; }
|
||||||
//}
|
//}
|
||||||
//private bool _PleaseShutdown = false;
|
//private bool _PleaseShutdown = false;
|
||||||
|
|
||||||
|
public DetectParams[] GetDetectParams(IScript script)
|
||||||
|
{
|
||||||
|
if (detparms.ContainsKey(script))
|
||||||
|
return detparms[script];
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,7 @@ using Nini.Config;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Region.Environment.Scenes;
|
using OpenSim.Region.Environment.Scenes;
|
||||||
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
||||||
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
|
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.Common
|
namespace OpenSim.Region.ScriptEngine.Common
|
||||||
|
@ -42,28 +43,29 @@ namespace OpenSim.Region.ScriptEngine.Common
|
||||||
void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine);
|
void OnRezScript(uint localID, UUID itemID, string script, int startParam, bool postOnRez, string engine);
|
||||||
void OnRemoveScript(uint localID, UUID itemID);
|
void OnRemoveScript(uint localID, UUID itemID);
|
||||||
void state_exit(uint localID);
|
void state_exit(uint localID);
|
||||||
void touch(uint localID, uint originalID, UUID itemID);
|
void touch(uint localID, uint originalID, Vector3 offsetPos,
|
||||||
void touch_end(uint localID, uint originalID, UUID itemID);
|
IClientAPI remoteClient);
|
||||||
|
void touch_end(uint localID, uint originalID, IClientAPI remoteClient);
|
||||||
void collision_start(uint localID, ColliderArgs col);
|
void collision_start(uint localID, ColliderArgs col);
|
||||||
void collision(uint localID, ColliderArgs col);
|
void collision(uint localID, ColliderArgs col);
|
||||||
void collision_end(uint localID, ColliderArgs col);
|
void collision_end(uint localID, ColliderArgs col);
|
||||||
void land_collision_start(uint localID, UUID itemID);
|
// void land_collision_start(uint localID, UUID itemID);
|
||||||
void land_collision(uint localID, ColliderArgs col);
|
// void land_collision(uint localID, ColliderArgs col);
|
||||||
void land_collision_end(uint localID, UUID itemID);
|
// void land_collision_end(uint localID, UUID itemID);
|
||||||
void timer(uint localID, UUID itemID);
|
void timer(uint localID, UUID itemID);
|
||||||
void listen(uint localID, UUID itemID);
|
void listen(uint localID, UUID itemID);
|
||||||
void on_rez(uint localID, UUID itemID);
|
// void on_rez(uint localID, UUID itemID);
|
||||||
void sensor(uint localID, UUID itemID);
|
// void sensor(uint localID, UUID itemID);
|
||||||
void no_sensor(uint localID, UUID itemID);
|
// void no_sensor(uint localID, UUID itemID);
|
||||||
void control(uint localID, UUID itemID, UUID agentID, uint held, uint change);
|
void control(uint localID, UUID itemID, UUID agentID, uint held, uint change);
|
||||||
void money(uint LocalID, UUID agentID, int amount);
|
void money(uint LocalID, UUID agentID, int amount);
|
||||||
void email(uint localID, UUID itemID);
|
// void email(uint localID, UUID itemID);
|
||||||
void at_target(uint localID, uint handle, Vector3 targetpos, Vector3 atpos);
|
void at_target(uint localID, uint handle, Vector3 targetpos, Vector3 atpos);
|
||||||
void not_at_target(uint localID);
|
void not_at_target(uint localID);
|
||||||
void at_rot_target(uint localID, UUID itemID);
|
void at_rot_target(uint localID, UUID itemID);
|
||||||
void not_at_rot_target(uint localID, UUID itemID);
|
void not_at_rot_target(uint localID, UUID itemID);
|
||||||
void run_time_permissions(uint localID, UUID itemID);
|
// void run_time_permissions(uint localID, UUID itemID);
|
||||||
void changed(uint localID, UUID itemID);
|
// void changed(uint localID, UUID itemID);
|
||||||
void attach(uint localID, UUID itemID);
|
void attach(uint localID, UUID itemID);
|
||||||
void dataserver(uint localID, UUID itemID);
|
void dataserver(uint localID, UUID itemID);
|
||||||
void link_message(uint localID, UUID itemID);
|
void link_message(uint localID, UUID itemID);
|
||||||
|
|
|
@ -33,6 +33,7 @@ using OpenSim.Framework;
|
||||||
using OpenSim.Region.Environment.Scenes;
|
using OpenSim.Region.Environment.Scenes;
|
||||||
using OpenSim.Region.ScriptEngine.Common;
|
using OpenSim.Region.ScriptEngine.Common;
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
|
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||||
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
|
@ -139,10 +140,10 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
// Fire the first start-event
|
// Fire the first start-event
|
||||||
int eventFlags = m_scriptEngine.m_ScriptManager.GetStateEventFlags(localID, itemID);
|
int eventFlags = m_scriptEngine.m_ScriptManager.GetStateEventFlags(localID, itemID);
|
||||||
m_host.SetScriptEvents(itemID, eventFlags);
|
m_host.SetScriptEvents(itemID, eventFlags);
|
||||||
m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "state_entry", EventQueueManager.llDetectNull, new object[] { });
|
m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "state_entry", new DetectParams[0], new object[] { });
|
||||||
if (postOnRez)
|
if (postOnRez)
|
||||||
{
|
{
|
||||||
m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "on_rez", EventQueueManager.llDetectNull, new object[] { new LSL_Types.LSLInteger(startParam) });
|
m_scriptEngine.m_EventQueueManager.AddToScriptQueue(localID, itemID, "on_rez", new DetectParams[0], new object[] { new LSL_Types.LSLInteger(startParam) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) // LEGIT: User Scripting
|
catch (Exception e) // LEGIT: User Scripting
|
||||||
|
@ -174,7 +175,7 @@ namespace OpenSim.Region.ScriptEngine.DotNetEngine
|
||||||
//#endif
|
//#endif
|
||||||
|
|
||||||
// Stop long command on script
|
// Stop long command on script
|
||||||
m_scriptEngine.m_ASYNCLSLCommandManager.RemoveScript(localID, itemID);
|
AsyncCommandManager.RemoveScript(m_scriptEngine, localID, itemID);
|
||||||
|
|
||||||
IScript LSLBC = GetScript(localID, itemID);
|
IScript LSLBC = GetScript(localID, itemID);
|
||||||
if (LSLBC == null)
|
if (LSLBC == null)
|
||||||
|
|
|
@ -54,47 +54,47 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
public IEventReceiver m_ScriptEngine;
|
public IEventReceiver m_ScriptEngine;
|
||||||
private IScene m_Scene;
|
private IScene m_Scene;
|
||||||
|
|
||||||
private static Dictionary<IScene, Dataserver> m_Dataserver =
|
private static Dictionary<IEventReceiver, Dataserver> m_Dataserver =
|
||||||
new Dictionary<IScene, Dataserver>();
|
new Dictionary<IEventReceiver, Dataserver>();
|
||||||
private static Dictionary<IScene, Timer> m_Timer =
|
private static Dictionary<IEventReceiver, Timer> m_Timer =
|
||||||
new Dictionary<IScene, Timer>();
|
new Dictionary<IEventReceiver, Timer>();
|
||||||
private static Dictionary<IScene, Listener> m_Listener =
|
private static Dictionary<IEventReceiver, Listener> m_Listener =
|
||||||
new Dictionary<IScene, Listener>();
|
new Dictionary<IEventReceiver, Listener>();
|
||||||
private static Dictionary<IScene, HttpRequest> m_HttpRequest =
|
private static Dictionary<IEventReceiver, HttpRequest> m_HttpRequest =
|
||||||
new Dictionary<IScene, HttpRequest>();
|
new Dictionary<IEventReceiver, HttpRequest>();
|
||||||
private static Dictionary<IScene, SensorRepeat> m_SensorRepeat =
|
private static Dictionary<IEventReceiver, SensorRepeat> m_SensorRepeat =
|
||||||
new Dictionary<IScene, SensorRepeat>();
|
new Dictionary<IEventReceiver, SensorRepeat>();
|
||||||
private static Dictionary<IScene, XmlRequest> m_XmlRequest =
|
private static Dictionary<IEventReceiver, XmlRequest> m_XmlRequest =
|
||||||
new Dictionary<IScene, XmlRequest>();
|
new Dictionary<IEventReceiver, XmlRequest>();
|
||||||
|
|
||||||
public Dataserver DataserverPlugin
|
public Dataserver DataserverPlugin
|
||||||
{
|
{
|
||||||
get { return m_Dataserver[m_Scene]; }
|
get { return m_Dataserver[m_ScriptEngine]; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Timer TimerPlugin
|
public Timer TimerPlugin
|
||||||
{
|
{
|
||||||
get { return m_Timer[m_Scene]; }
|
get { return m_Timer[m_ScriptEngine]; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpRequest HttpRequestPlugin
|
public HttpRequest HttpRequestPlugin
|
||||||
{
|
{
|
||||||
get { return m_HttpRequest[m_Scene]; }
|
get { return m_HttpRequest[m_ScriptEngine]; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public Listener ListenerPlugin
|
public Listener ListenerPlugin
|
||||||
{
|
{
|
||||||
get { return m_Listener[m_Scene]; }
|
get { return m_Listener[m_ScriptEngine]; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public SensorRepeat SensorRepeatPlugin
|
public SensorRepeat SensorRepeatPlugin
|
||||||
{
|
{
|
||||||
get { return m_SensorRepeat[m_Scene]; }
|
get { return m_SensorRepeat[m_ScriptEngine]; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public XmlRequest XmlRequestPlugin
|
public XmlRequest XmlRequestPlugin
|
||||||
{
|
{
|
||||||
get { return m_XmlRequest[m_Scene]; }
|
get { return m_XmlRequest[m_ScriptEngine]; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEventReceiver[] ScriptEngines
|
public IEventReceiver[] ScriptEngines
|
||||||
|
@ -107,26 +107,27 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_ScriptEngine = _ScriptEngine;
|
m_ScriptEngine = _ScriptEngine;
|
||||||
m_Scene = m_ScriptEngine.World;
|
m_Scene = m_ScriptEngine.World;
|
||||||
|
|
||||||
|
if (m_Scenes.Count == 0)
|
||||||
|
ReadConfig();
|
||||||
|
|
||||||
if (!m_Scenes.Contains(m_Scene))
|
if (!m_Scenes.Contains(m_Scene))
|
||||||
m_Scenes.Add(m_Scene);
|
m_Scenes.Add(m_Scene);
|
||||||
if (!m_ScriptEngines.Contains(m_ScriptEngine))
|
if (!m_ScriptEngines.Contains(m_ScriptEngine))
|
||||||
m_ScriptEngines.Add(m_ScriptEngine);
|
m_ScriptEngines.Add(m_ScriptEngine);
|
||||||
|
|
||||||
ReadConfig();
|
|
||||||
|
|
||||||
// Create instances of all plugins
|
// Create instances of all plugins
|
||||||
if (!m_Dataserver.ContainsKey(m_Scene))
|
if (!m_Dataserver.ContainsKey(m_ScriptEngine))
|
||||||
m_Dataserver[m_Scene] = new Dataserver(this);
|
m_Dataserver[m_ScriptEngine] = new Dataserver(this);
|
||||||
if (!m_Timer.ContainsKey(m_Scene))
|
if (!m_Timer.ContainsKey(m_ScriptEngine))
|
||||||
m_Timer[m_Scene] = new Timer(this);
|
m_Timer[m_ScriptEngine] = new Timer(this);
|
||||||
if (!m_HttpRequest.ContainsKey(m_Scene))
|
if (!m_HttpRequest.ContainsKey(m_ScriptEngine))
|
||||||
m_HttpRequest[m_Scene] = new HttpRequest(this);
|
m_HttpRequest[m_ScriptEngine] = new HttpRequest(this);
|
||||||
if (!m_Listener.ContainsKey(m_Scene))
|
if (!m_Listener.ContainsKey(m_ScriptEngine))
|
||||||
m_Listener[m_Scene] = new Listener(this);
|
m_Listener[m_ScriptEngine] = new Listener(this);
|
||||||
if (!m_SensorRepeat.ContainsKey(m_Scene))
|
if (!m_SensorRepeat.ContainsKey(m_ScriptEngine))
|
||||||
m_SensorRepeat[m_Scene] = new SensorRepeat(this);
|
m_SensorRepeat[m_ScriptEngine] = new SensorRepeat(this);
|
||||||
if (!m_XmlRequest.ContainsKey(m_Scene))
|
if (!m_XmlRequest.ContainsKey(m_ScriptEngine))
|
||||||
m_XmlRequest[m_Scene] = new XmlRequest(this);
|
m_XmlRequest[m_ScriptEngine] = new XmlRequest(this);
|
||||||
|
|
||||||
StartThread();
|
StartThread();
|
||||||
}
|
}
|
||||||
|
@ -145,7 +146,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReadConfig()
|
private void ReadConfig()
|
||||||
{
|
{
|
||||||
// cmdHandlerThreadCycleSleepms = m_ScriptEngine.Config.GetInt("AsyncLLCommandLoopms", 100);
|
// cmdHandlerThreadCycleSleepms = m_ScriptEngine.Config.GetInt("AsyncLLCommandLoopms", 100);
|
||||||
// TODO: Make this sane again
|
// TODO: Make this sane again
|
||||||
|
@ -195,18 +196,23 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
private static void DoOneCmdHandlerPass()
|
private static void DoOneCmdHandlerPass()
|
||||||
{
|
{
|
||||||
foreach (IScene s in m_Scenes)
|
// Check Listeners
|
||||||
|
m_Listener[m_ScriptEngines[0]].CheckListeners();
|
||||||
|
|
||||||
|
// Check HttpRequests
|
||||||
|
m_HttpRequest[m_ScriptEngines[0]].CheckHttpRequests();
|
||||||
|
|
||||||
|
// Check XMLRPCRequests
|
||||||
|
m_XmlRequest[m_ScriptEngines[0]].CheckXMLRPCRequests();
|
||||||
|
|
||||||
|
foreach (IEventReceiver s in m_ScriptEngines)
|
||||||
{
|
{
|
||||||
// Check timers
|
// Check timers
|
||||||
m_Timer[s].CheckTimerEvents();
|
m_Timer[s].CheckTimerEvents();
|
||||||
// Check HttpRequests
|
|
||||||
m_HttpRequest[s].CheckHttpRequests();
|
|
||||||
// Check XMLRPCRequests
|
|
||||||
m_XmlRequest[s].CheckXMLRPCRequests();
|
|
||||||
// Check Listeners
|
|
||||||
m_Listener[s].CheckListeners();
|
|
||||||
// Check Sensors
|
// Check Sensors
|
||||||
m_SensorRepeat[s].CheckSenseRepeaterEvents();
|
m_SensorRepeat[s].CheckSenseRepeaterEvents();
|
||||||
|
|
||||||
// Check dataserver
|
// Check dataserver
|
||||||
m_Dataserver[s].ExpireRequests();
|
m_Dataserver[s].ExpireRequests();
|
||||||
}
|
}
|
||||||
|
@ -217,38 +223,38 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="localID"></param>
|
/// <param name="localID"></param>
|
||||||
/// <param name="itemID"></param>
|
/// <param name="itemID"></param>
|
||||||
public static void RemoveScript(IScene scene, uint localID, UUID itemID)
|
public static void RemoveScript(IEventReceiver engine, uint localID, UUID itemID)
|
||||||
{
|
{
|
||||||
// Remove a specific script
|
// Remove a specific script
|
||||||
|
|
||||||
// Remove dataserver events
|
// Remove dataserver events
|
||||||
m_Dataserver[scene].RemoveEvents(localID, itemID);
|
m_Dataserver[engine].RemoveEvents(localID, itemID);
|
||||||
|
|
||||||
// Remove from: Timers
|
// Remove from: Timers
|
||||||
m_Timer[scene].UnSetTimerEvents(localID, itemID);
|
m_Timer[engine].UnSetTimerEvents(localID, itemID);
|
||||||
|
|
||||||
// Remove from: HttpRequest
|
// Remove from: HttpRequest
|
||||||
IHttpRequests iHttpReq =
|
IHttpRequests iHttpReq =
|
||||||
scene.RequestModuleInterface<IHttpRequests>();
|
engine.World.RequestModuleInterface<IHttpRequests>();
|
||||||
iHttpReq.StopHttpRequest(localID, itemID);
|
iHttpReq.StopHttpRequest(localID, itemID);
|
||||||
|
|
||||||
IWorldComm comms = scene.RequestModuleInterface<IWorldComm>();
|
IWorldComm comms = engine.World.RequestModuleInterface<IWorldComm>();
|
||||||
comms.DeleteListener(itemID);
|
comms.DeleteListener(itemID);
|
||||||
|
|
||||||
IXMLRPC xmlrpc = scene.RequestModuleInterface<IXMLRPC>();
|
IXMLRPC xmlrpc = engine.World.RequestModuleInterface<IXMLRPC>();
|
||||||
xmlrpc.DeleteChannels(itemID);
|
xmlrpc.DeleteChannels(itemID);
|
||||||
xmlrpc.CancelSRDRequests(itemID);
|
xmlrpc.CancelSRDRequests(itemID);
|
||||||
|
|
||||||
// Remove Sensors
|
// Remove Sensors
|
||||||
m_SensorRepeat[scene].UnSetSenseRepeaterEvents(localID, itemID);
|
m_SensorRepeat[engine].UnSetSenseRepeaterEvents(localID, itemID);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Object[] GetSerializationData(IScene scene, UUID itemID)
|
public static Object[] GetSerializationData(IEventReceiver engine, UUID itemID)
|
||||||
{
|
{
|
||||||
List<Object> data = new List<Object>();
|
List<Object> data = new List<Object>();
|
||||||
|
|
||||||
Object[] listeners=m_Listener[scene].GetSerializationData(itemID);
|
Object[] listeners=m_Listener[engine].GetSerializationData(itemID);
|
||||||
if (listeners.Length > 0)
|
if (listeners.Length > 0)
|
||||||
{
|
{
|
||||||
data.Add("listener");
|
data.Add("listener");
|
||||||
|
@ -256,7 +262,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
data.AddRange(listeners);
|
data.AddRange(listeners);
|
||||||
}
|
}
|
||||||
|
|
||||||
Object[] timers=m_Timer[scene].GetSerializationData(itemID);
|
Object[] timers=m_Timer[engine].GetSerializationData(itemID);
|
||||||
if (timers.Length > 0)
|
if (timers.Length > 0)
|
||||||
{
|
{
|
||||||
data.Add("timer");
|
data.Add("timer");
|
||||||
|
@ -264,7 +270,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
data.AddRange(timers);
|
data.AddRange(timers);
|
||||||
}
|
}
|
||||||
|
|
||||||
Object[] sensors=m_SensorRepeat[scene].GetSerializationData(itemID);
|
Object[] sensors=m_SensorRepeat[engine].GetSerializationData(itemID);
|
||||||
if (sensors.Length > 0)
|
if (sensors.Length > 0)
|
||||||
{
|
{
|
||||||
data.Add("sensor");
|
data.Add("sensor");
|
||||||
|
@ -275,7 +281,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
return data.ToArray();
|
return data.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void CreateFromData(IScene scene, uint localID,
|
public static void CreateFromData(IEventReceiver engine, uint localID,
|
||||||
UUID itemID, UUID hostID, Object[] data)
|
UUID itemID, UUID hostID, Object[] data)
|
||||||
{
|
{
|
||||||
int idx = 0;
|
int idx = 0;
|
||||||
|
@ -297,15 +303,15 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case "listener":
|
case "listener":
|
||||||
m_Listener[scene].CreateFromData(localID, itemID,
|
m_Listener[engine].CreateFromData(localID, itemID,
|
||||||
hostID, item);
|
hostID, item);
|
||||||
break;
|
break;
|
||||||
case "timer":
|
case "timer":
|
||||||
m_Timer[scene].CreateFromData(localID, itemID,
|
m_Timer[engine].CreateFromData(localID, itemID,
|
||||||
hostID, item);
|
hostID, item);
|
||||||
break;
|
break;
|
||||||
case "sensor":
|
case "sensor":
|
||||||
m_SensorRepeat[scene].CreateFromData(localID,
|
m_SensorRepeat[engine].CreateFromData(localID,
|
||||||
itemID, hostID, item);
|
itemID, hostID, item);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||||
|
|
||||||
while (httpInfo != null)
|
while (httpInfo != null)
|
||||||
{
|
{
|
||||||
//m_ScriptEngine.Log.Info("[AsyncLSL]:" + httpInfo.response_body + httpInfo.status);
|
//System.Console.WriteLine("[AsyncLSL]:" + httpInfo.response_body + httpInfo.status);
|
||||||
|
|
||||||
// Deliver data to prim's remote_data handler
|
// Deliver data to prim's remote_data handler
|
||||||
//
|
//
|
||||||
|
@ -77,7 +77,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||||
new LSL_Types.LSLString(httpInfo.response_body)
|
new LSL_Types.LSLString(httpInfo.response_body)
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (IScriptEngine e in m_CmdManager.ScriptEngines)
|
foreach (IEventReceiver e in m_CmdManager.ScriptEngines)
|
||||||
{
|
{
|
||||||
if (e.PostObjectEvent(httpInfo.localID,
|
if (e.PostObjectEvent(httpInfo.localID,
|
||||||
new EventParams("http_response",
|
new EventParams("http_response",
|
||||||
|
|
|
@ -29,6 +29,7 @@ using System;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Region.Environment.Interfaces;
|
using OpenSim.Region.Environment.Interfaces;
|
||||||
using OpenSim.Region.Environment.Modules.Scripting.WorldComm;
|
using OpenSim.Region.Environment.Modules.Scripting.WorldComm;
|
||||||
|
using OpenSim.Region.ScriptEngine.Interfaces;
|
||||||
using OpenSim.Region.ScriptEngine.Shared;
|
using OpenSim.Region.ScriptEngine.Shared;
|
||||||
using OpenSim.Region.ScriptEngine.Shared.Api;
|
using OpenSim.Region.ScriptEngine.Shared.Api;
|
||||||
|
|
||||||
|
@ -66,10 +67,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||||
new LSL_Types.LSLString(lInfo.GetMessage())
|
new LSL_Types.LSLString(lInfo.GetMessage())
|
||||||
};
|
};
|
||||||
|
|
||||||
m_CmdManager.m_ScriptEngine.PostScriptEvent(
|
foreach (IEventReceiver e in m_CmdManager.ScriptEngines)
|
||||||
lInfo.GetItemID(), new EventParams(
|
{
|
||||||
"listen", resobj,
|
e.PostScriptEvent(
|
||||||
new DetectParams[0]));
|
lInfo.GetItemID(), new EventParams(
|
||||||
|
"listen", resobj,
|
||||||
|
new DetectParams[0]));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,28 +156,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||||
SensorSweep(ts);
|
SensorSweep(ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Types.list GetSensorList(uint m_localID, UUID m_itemID)
|
|
||||||
{
|
|
||||||
lock (SenseLock)
|
|
||||||
{
|
|
||||||
Dictionary<UUID, LSL_Types.list> Obj = null;
|
|
||||||
if (!SenseEvents.TryGetValue(m_localID, out Obj))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
lock (Obj)
|
|
||||||
{
|
|
||||||
// Get script
|
|
||||||
LSL_Types.list SenseList = null;
|
|
||||||
if (!Obj.TryGetValue(m_itemID, out SenseList))
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return SenseList;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void SensorSweep(SenseRepeatClass ts)
|
private void SensorSweep(SenseRepeatClass ts)
|
||||||
{
|
{
|
||||||
SceneObjectPart SensePoint = ts.host;
|
SceneObjectPart SensePoint = ts.host;
|
||||||
|
|
|
@ -108,7 +108,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||||
// Time has passed?
|
// Time has passed?
|
||||||
if (ts.next < DateTime.Now.Ticks)
|
if (ts.next < DateTime.Now.Ticks)
|
||||||
{
|
{
|
||||||
// Console.WriteLine("Time has passed: Now: " + DateTime.Now.Ticks + ", Passed: " + ts.next);
|
//Console.WriteLine("Time has passed: Now: " + DateTime.Now.Ticks + ", Passed: " + ts.next);
|
||||||
// Add it to queue
|
// Add it to queue
|
||||||
m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID,
|
m_CmdManager.m_ScriptEngine.PostScriptEvent(ts.itemID,
|
||||||
new EventParams("timer", new Object[0],
|
new EventParams("timer", new Object[0],
|
||||||
|
|
|
@ -71,7 +71,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||||
new LSL_Types.LSLString(rInfo.GetStrVal())
|
new LSL_Types.LSLString(rInfo.GetStrVal())
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (IScriptEngine e in m_CmdManager.ScriptEngines)
|
foreach (IEventReceiver e in m_CmdManager.ScriptEngines)
|
||||||
{
|
{
|
||||||
if (e.PostScriptEvent(
|
if (e.PostScriptEvent(
|
||||||
rInfo.GetItemID(), new EventParams(
|
rInfo.GetItemID(), new EventParams(
|
||||||
|
@ -100,7 +100,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins
|
||||||
new LSL_Types.LSLString(srdInfo.sdata)
|
new LSL_Types.LSLString(srdInfo.sdata)
|
||||||
};
|
};
|
||||||
|
|
||||||
foreach (IScriptEngine e in m_CmdManager.ScriptEngines)
|
foreach (IEventReceiver e in m_CmdManager.ScriptEngines)
|
||||||
{
|
{
|
||||||
if (e.PostScriptEvent(
|
if (e.PostScriptEvent(
|
||||||
srdInfo.m_itemID, new EventParams(
|
srdInfo.m_itemID, new EventParams(
|
||||||
|
|
|
@ -246,7 +246,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
|
|
||||||
ScriptSerializer.Deserialize(xml, this);
|
ScriptSerializer.Deserialize(xml, this);
|
||||||
|
|
||||||
AsyncCommandManager.CreateFromData(m_Engine.World,
|
AsyncCommandManager.CreateFromData(m_Engine,
|
||||||
m_LocalID, m_ItemID, m_ObjectID,
|
m_LocalID, m_ItemID, m_ObjectID,
|
||||||
PluginData);
|
PluginData);
|
||||||
|
|
||||||
|
@ -336,7 +336,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
public void DestroyScriptInstance()
|
public void DestroyScriptInstance()
|
||||||
{
|
{
|
||||||
ReleaseControls();
|
ReleaseControls();
|
||||||
AsyncCommandManager.RemoveScript(m_Engine.World, m_LocalID, m_ItemID);
|
AsyncCommandManager.RemoveScript(m_Engine, m_LocalID, m_ItemID);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveState()
|
public void RemoveState()
|
||||||
|
@ -554,7 +554,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
// m_Engine.Log.DebugFormat("[Script] Script {0}.{1} state set to {2}",
|
// m_Engine.Log.DebugFormat("[Script] Script {0}.{1} state set to {2}",
|
||||||
// m_PrimName, m_ScriptName, data.Params[0].ToString());
|
// m_PrimName, m_ScriptName, data.Params[0].ToString());
|
||||||
m_State=data.Params[0].ToString();
|
m_State=data.Params[0].ToString();
|
||||||
AsyncCommandManager.RemoveScript(m_Engine.World,
|
AsyncCommandManager.RemoveScript(m_Engine,
|
||||||
m_LocalID, m_ItemID);
|
m_LocalID, m_ItemID);
|
||||||
|
|
||||||
SceneObjectPart part = m_Engine.World.GetSceneObjectPart(
|
SceneObjectPart part = m_Engine.World.GetSceneObjectPart(
|
||||||
|
@ -690,7 +690,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
SceneObjectPart part=m_Engine.World.GetSceneObjectPart(m_LocalID);
|
SceneObjectPart part=m_Engine.World.GetSceneObjectPart(m_LocalID);
|
||||||
part.GetInventoryItem(m_ItemID).PermsMask = 0;
|
part.GetInventoryItem(m_ItemID).PermsMask = 0;
|
||||||
part.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero;
|
part.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero;
|
||||||
AsyncCommandManager.RemoveScript(m_Engine.World, m_LocalID, m_ItemID);
|
AsyncCommandManager.RemoveScript(m_Engine, m_LocalID, m_ItemID);
|
||||||
m_EventQueue.Clear();
|
m_EventQueue.Clear();
|
||||||
m_Script.ResetVars();
|
m_Script.ResetVars();
|
||||||
m_State = "default";
|
m_State = "default";
|
||||||
|
@ -715,7 +715,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
SceneObjectPart part=m_Engine.World.GetSceneObjectPart(m_LocalID);
|
SceneObjectPart part=m_Engine.World.GetSceneObjectPart(m_LocalID);
|
||||||
part.GetInventoryItem(m_ItemID).PermsMask = 0;
|
part.GetInventoryItem(m_ItemID).PermsMask = 0;
|
||||||
part.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero;
|
part.GetInventoryItem(m_ItemID).PermsGranter = UUID.Zero;
|
||||||
AsyncCommandManager.RemoveScript(m_Engine.World, m_LocalID, m_ItemID);
|
AsyncCommandManager.RemoveScript(m_Engine, m_LocalID, m_ItemID);
|
||||||
|
|
||||||
m_EventQueue.Clear();
|
m_EventQueue.Clear();
|
||||||
m_Script.ResetVars();
|
m_Script.ResetVars();
|
||||||
|
@ -772,7 +772,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginData = AsyncCommandManager.GetSerializationData(m_Engine.World, m_ItemID);
|
PluginData = AsyncCommandManager.GetSerializationData(m_Engine, m_ItemID);
|
||||||
|
|
||||||
string xml = ScriptSerializer.Serialize(this);
|
string xml = ScriptSerializer.Serialize(this);
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,7 @@ using OpenSim.Region.ScriptEngine.Interfaces;
|
||||||
|
|
||||||
namespace OpenSim.Region.ScriptEngine.XEngine
|
namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
{
|
{
|
||||||
public class XEngine : IScriptModule, IScriptEngine
|
public class XEngine : IRegionModule, IScriptEngine
|
||||||
{
|
{
|
||||||
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
#pragma warning restore 414
|
#pragma warning restore 414
|
||||||
private int m_EventLimit;
|
private int m_EventLimit;
|
||||||
private bool m_KillTimedOutScripts;
|
private bool m_KillTimedOutScripts;
|
||||||
bool m_firstStart = true;
|
// bool m_firstStart = true;
|
||||||
|
|
||||||
private static List<XEngine> m_ScriptEngines =
|
private static List<XEngine> m_ScriptEngines =
|
||||||
new List<XEngine>();
|
new List<XEngine>();
|
||||||
|
@ -205,8 +205,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
m_ScriptEngines.Add(this);
|
m_ScriptEngines.Add(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
scene.RegisterModuleInterface<IScriptModule>(this);
|
|
||||||
|
|
||||||
// Needs to be here so we can queue the scripts that need starting
|
// Needs to be here so we can queue the scripts that need starting
|
||||||
//
|
//
|
||||||
m_Scene.EventManager.OnRezScript += OnRezScript;
|
m_Scene.EventManager.OnRezScript += OnRezScript;
|
||||||
|
@ -230,6 +228,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
m_Scene.EventManager.OnScriptReset += OnScriptReset;
|
m_Scene.EventManager.OnScriptReset += OnScriptReset;
|
||||||
m_Scene.EventManager.OnStartScript += OnStartScript;
|
m_Scene.EventManager.OnStartScript += OnStartScript;
|
||||||
m_Scene.EventManager.OnStopScript += OnStopScript;
|
m_Scene.EventManager.OnStopScript += OnStopScript;
|
||||||
|
m_Scene.EventManager.OnGetScriptRunning += OnGetScriptRunning;
|
||||||
m_Scene.EventManager.OnShutdown += OnShutdown;
|
m_Scene.EventManager.OnShutdown += OnShutdown;
|
||||||
|
|
||||||
if (m_SleepTime > 0)
|
if (m_SleepTime > 0)
|
||||||
|
@ -357,14 +356,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
|
|
||||||
if (m_CurrentCompile == null)
|
if (m_CurrentCompile == null)
|
||||||
{
|
{
|
||||||
if (m_firstStart)
|
// if (m_firstStart)
|
||||||
{
|
// {
|
||||||
m_firstStart = false;
|
// m_firstStart = false;
|
||||||
m_CurrentCompile = m_ThreadPool.QueueWorkItem(
|
// m_CurrentCompile = m_ThreadPool.QueueWorkItem(
|
||||||
new WorkItemCallback(this.DoScriptWait),
|
// new WorkItemCallback(this.DoScriptWait),
|
||||||
new Object[0]);
|
// new Object[0]);
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
m_CurrentCompile = m_ThreadPool.QueueWorkItem(
|
m_CurrentCompile = m_ThreadPool.QueueWorkItem(
|
||||||
new WorkItemCallback(this.DoOnRezScriptQueue),
|
new WorkItemCallback(this.DoOnRezScriptQueue),
|
||||||
|
@ -375,7 +374,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
|
|
||||||
public Object DoScriptWait(Object dummy)
|
public Object DoScriptWait(Object dummy)
|
||||||
{
|
{
|
||||||
Thread.Sleep(30000);
|
Thread.Sleep(10000);
|
||||||
|
|
||||||
lock (m_CompileQueue)
|
lock (m_CompileQueue)
|
||||||
{
|
{
|
||||||
|
@ -884,11 +883,6 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
return instance.StartParam;
|
return instance.StartParam;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetScriptRunning(UUID objectID, UUID itemID)
|
|
||||||
{
|
|
||||||
return GetScriptState(itemID);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnShutdown()
|
public void OnShutdown()
|
||||||
{
|
{
|
||||||
List<IScriptInstance> instances = new List<IScriptInstance>();
|
List<IScriptInstance> instances = new List<IScriptInstance>();
|
||||||
|
@ -922,5 +916,14 @@ namespace OpenSim.Region.ScriptEngine.XEngine
|
||||||
return null;
|
return null;
|
||||||
return instance.GetApi(name);
|
return instance.GetApi(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnGetScriptRunning(IClientAPI controllingClient, UUID objectID, UUID itemID)
|
||||||
|
{
|
||||||
|
IScriptInstance instance = GetInstance(itemID);
|
||||||
|
if (instance == null)
|
||||||
|
return;
|
||||||
|
controllingClient.SendScriptRunningReply(objectID, itemID,
|
||||||
|
GetScriptState(itemID));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1952,6 +1952,7 @@
|
||||||
<Reference name="OpenSim.Region.Physics.Manager" />
|
<Reference name="OpenSim.Region.Physics.Manager" />
|
||||||
<Reference name="OpenSim.Framework.Console"/>
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
<Reference name="OpenSim.Region.ScriptEngine.Shared"/>
|
<Reference name="OpenSim.Region.ScriptEngine.Shared"/>
|
||||||
|
<Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/>
|
||||||
<Reference name="Nini.dll" />
|
<Reference name="Nini.dll" />
|
||||||
<Reference name="RAIL.dll"/>
|
<Reference name="RAIL.dll"/>
|
||||||
<Reference name="OpenSim.Framework.Console"/>
|
<Reference name="OpenSim.Framework.Console"/>
|
||||||
|
@ -1990,6 +1991,7 @@
|
||||||
<Reference name="OpenSim.Region.Environment" />
|
<Reference name="OpenSim.Region.Environment" />
|
||||||
<Reference name="OpenSim.Region.ScriptEngine.Common"/>
|
<Reference name="OpenSim.Region.ScriptEngine.Common"/>
|
||||||
<Reference name="OpenSim.Region.ScriptEngine.Shared"/>
|
<Reference name="OpenSim.Region.ScriptEngine.Shared"/>
|
||||||
|
<Reference name="OpenSim.Region.ScriptEngine.Shared.Api"/>
|
||||||
<Reference name="Microsoft.JScript"/>
|
<Reference name="Microsoft.JScript"/>
|
||||||
<Reference name="Nini.dll" />
|
<Reference name="Nini.dll" />
|
||||||
<Reference name="log4net.dll"/>
|
<Reference name="log4net.dll"/>
|
||||||
|
|
Loading…
Reference in New Issue