From a0000a034f3d193662d56a1c8147771b0d994b23 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 10 Jan 2013 00:32:22 +0000 Subject: Add "show sensors" command to show script sensor information for debug purposes. --- .../Api/Implementation/Plugins/SensorRepeat.cs | 94 ++++++++++++++-------- 1 file changed, 62 insertions(+), 32 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/Shared/Api') diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index 24cceea..37422d7 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs @@ -42,6 +42,41 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins { // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + /// + /// Used by one-off and repeated sensors + /// + public class SensorInfo + { + 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; + + public SensorInfo Clone() + { + SensorInfo s = new SensorInfo(); + s.localID = localID; + s.itemID = itemID; + s.interval = interval; + s.next = next; + s.name = name; + s.keyID = keyID; + s.type = type; + s.range = range; + s.arc = arc; + s.host = host; + + return s; + } + } + public AsyncCommandManager m_CmdManager; /// @@ -79,24 +114,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins private int maximumToReturn = 16; // - // 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; - } - - // // Sensed entity // private class SensedEntity : IComparable @@ -128,7 +145,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins /// /// Always lock SenseRepeatListLock when updating this list. /// - private List SenseRepeaters = new List(); + private List SenseRepeaters = new List(); private object SenseRepeatListLock = new object(); public void SetSenseRepeatEvent(uint m_localID, UUID m_itemID, @@ -142,7 +159,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins return; // Add to timer - SenseRepeatClass ts = new SenseRepeatClass(); + SensorInfo ts = new SensorInfo(); ts.localID = m_localID; ts.itemID = m_itemID; ts.interval = sec; @@ -161,11 +178,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins AddSenseRepeater(ts); } - private void AddSenseRepeater(SenseRepeatClass senseRepeater) + private void AddSenseRepeater(SensorInfo senseRepeater) { lock (SenseRepeatListLock) { - List newSenseRepeaters = new List(SenseRepeaters); + List newSenseRepeaters = new List(SenseRepeaters); newSenseRepeaters.Add(senseRepeater); SenseRepeaters = newSenseRepeaters; } @@ -176,8 +193,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins // Remove from timer lock (SenseRepeatListLock) { - List newSenseRepeaters = new List(); - foreach (SenseRepeatClass ts in SenseRepeaters) + List newSenseRepeaters = new List(); + foreach (SensorInfo ts in SenseRepeaters) { if (ts.localID != m_localID || ts.itemID != m_itemID) { @@ -192,7 +209,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins public void CheckSenseRepeaterEvents() { // Go through all timers - foreach (SenseRepeatClass ts in SenseRepeaters) + foreach (SensorInfo ts in SenseRepeaters) { // Time has passed? if (ts.next.ToUniversalTime() < DateTime.Now.ToUniversalTime()) @@ -209,7 +226,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins double range, double arc, SceneObjectPart host) { // Add to timer - SenseRepeatClass ts = new SenseRepeatClass(); + SensorInfo ts = new SensorInfo(); ts.localID = m_localID; ts.itemID = m_itemID; ts.interval = 0; @@ -225,7 +242,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins SensorSweep(ts); } - private void SensorSweep(SenseRepeatClass ts) + private void SensorSweep(SensorInfo ts) { if (ts.host == null) { @@ -301,7 +318,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } } - private List doObjectSensor(SenseRepeatClass ts) + private List doObjectSensor(SensorInfo ts) { List Entities; List sensedEntities = new List(); @@ -450,7 +467,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins return sensedEntities; } - private List doAgentSensor(SenseRepeatClass ts) + private List doAgentSensor(SensorInfo ts) { List sensedEntities = new List(); @@ -626,7 +643,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins { List data = new List(); - foreach (SenseRepeatClass ts in SenseRepeaters) + foreach (SensorInfo ts in SenseRepeaters) { if (ts.itemID == itemID) { @@ -656,7 +673,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins while (idx < data.Length) { - SenseRepeatClass ts = new SenseRepeatClass(); + SensorInfo ts = new SensorInfo(); ts.localID = localID; ts.itemID = itemID; @@ -677,5 +694,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins idx += 6; } } + + public List GetSensorInfo() + { + List retList = new List(); + + lock (SenseRepeatListLock) + { + foreach (SensorInfo si in SenseRepeaters) + retList.Add(si.Clone()); + } + + return retList; + } } -} +} \ No newline at end of file -- cgit v1.1 From b1b46872500476cf97b5de8c16012b8545fed0c7 Mon Sep 17 00:00:00 2001 From: Justin Clark-Casey (justincc) Date: Thu, 10 Jan 2013 00:57:49 +0000 Subject: Add "show script timers" command to show script timers. For debug purposes. Also, "show sensors" changes to "show script sensors". --- .../Api/Implementation/Plugins/SensorRepeat.cs | 18 ++------ .../Shared/Api/Implementation/Plugins/Timer.cs | 52 +++++++++++++++------- 2 files changed, 38 insertions(+), 32 deletions(-) (limited to 'OpenSim/Region/ScriptEngine/Shared/Api') diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs index 37422d7..dd45406 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/SensorRepeat.cs @@ -61,19 +61,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins public SensorInfo Clone() { - SensorInfo s = new SensorInfo(); - s.localID = localID; - s.itemID = itemID; - s.interval = interval; - s.next = next; - s.name = name; - s.keyID = keyID; - s.type = type; - s.range = range; - s.arc = arc; - s.host = host; - - return s; + return (SensorInfo)this.MemberwiseClone(); } } @@ -701,8 +689,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins lock (SenseRepeatListLock) { - foreach (SensorInfo si in SenseRepeaters) - retList.Add(si.Clone()); + foreach (SensorInfo i in SenseRepeaters) + retList.Add(i.Clone()); } return retList; diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs index bc63030..0b14565 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/Plugins/Timer.cs @@ -35,6 +35,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins { public class Timer { + public class TimerInfo + { + public uint localID; + public UUID itemID; + //public double interval; + public long interval; + //public DateTime next; + public long next; + + public TimerInfo Clone() + { + return (TimerInfo)this.MemberwiseClone(); + } + } + public AsyncCommandManager m_CmdManager; public int TimersCount @@ -59,17 +74,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins return localID.ToString() + itemID.ToString(); } - private class TimerClass - { - public uint localID; - public UUID itemID; - //public double interval; - public long interval; - //public DateTime next; - public long next; - } - - private Dictionary Timers = new Dictionary(); + private Dictionary Timers = new Dictionary(); private object TimerListLock = new object(); public void SetTimerEvent(uint m_localID, UUID m_itemID, double sec) @@ -81,7 +86,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } // Add to timer - TimerClass ts = new TimerClass(); + TimerInfo ts = new TimerInfo(); ts.localID = m_localID; ts.itemID = m_itemID; ts.interval = Convert.ToInt64(sec * 10000000); // How many 100 nanoseconds (ticks) should we wait @@ -121,8 +126,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins lock (TimerListLock) { // Go through all timers - Dictionary.ValueCollection tvals = Timers.Values; - foreach (TimerClass ts in tvals) + Dictionary.ValueCollection tvals = Timers.Values; + foreach (TimerInfo ts in tvals) { // Time has passed? if (ts.next < DateTime.Now.Ticks) @@ -147,8 +152,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins lock (TimerListLock) { - Dictionary.ValueCollection tvals = Timers.Values; - foreach (TimerClass ts in tvals) + Dictionary.ValueCollection tvals = Timers.Values; + foreach (TimerInfo ts in tvals) { if (ts.itemID == itemID) { @@ -167,7 +172,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins while (idx < data.Length) { - TimerClass ts = new TimerClass(); + TimerInfo ts = new TimerInfo(); ts.localID = localID; ts.itemID = itemID; @@ -181,5 +186,18 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Plugins } } } + + public List GetTimersInfo() + { + List retList = new List(); + + lock (TimerListLock) + { + foreach (TimerInfo i in Timers.Values) + retList.Add(i.Clone()); + } + + return retList; + } } } -- cgit v1.1