Add "scripts suspend" and "scripts resume" commands.

These aim currently to suspend and resume all scripts.
However, resume isn't currently working due to what looks like a bug in resume functionality itself.
0.7.2-post-fixes
Justin Clark-Casey (justincc) 2011-10-19 20:53:24 +01:00
parent 9d59fc0587
commit 8340bd7e20
2 changed files with 53 additions and 3 deletions

View File

@ -55,7 +55,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
{ {
public class ScriptInstance : MarshalByRefObject, IScriptInstance public class ScriptInstance : MarshalByRefObject, IScriptInstance
{ {
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private IScriptEngine m_Engine; private IScriptEngine m_Engine;
private IScriptWorkItem m_CurrentResult = null; private IScriptWorkItem m_CurrentResult = null;
@ -645,6 +645,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
/// <returns></returns> /// <returns></returns>
public object EventProcessor() public object EventProcessor()
{ {
// m_log.DebugFormat("[XEngine]: EventProcessor() invoked for {0}.{1}", PrimName, ScriptName);
if (Suspended) if (Suspended)
return 0; return 0;
@ -679,7 +681,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Instance
m_CollisionInQueue = false; m_CollisionInQueue = false;
} }
//m_log.DebugFormat("[XEngine]: Processing event {0} for {1}", data.EventName, this); // m_log.DebugFormat("[XEngine]: Processing event {0} for {1}", data.EventName, this);
m_DetectParams = data.DetectParams; m_DetectParams = data.DetectParams;

View File

@ -274,6 +274,16 @@ namespace OpenSim.Region.ScriptEngine.XEngine
MainConsole.Instance.Commands.AddCommand( MainConsole.Instance.Commands.AddCommand(
"scripts", false, "show scripts", "show scripts", "Show script information", "scripts", false, "show scripts", "show scripts", "Show script information",
"Synonym for scripts show command", HandleShowScripts); "Synonym for scripts show command", HandleShowScripts);
MainConsole.Instance.Commands.AddCommand(
"scripts", false, "scripts suspend", "scripts suspend", "Suspend all scripts",
"Suspends all currently running scripts. This only suspends event delivery, it will not suspend a"
+ " script that is currently processing an event.",
HandleSuspendScripts);
MainConsole.Instance.Commands.AddCommand(
"scripts", false, "scripts resume", "scripts resume", "Resume all scripts",
"Resumes all currently suspended scripts", HandleResumeScripts);
} }
public void HandleShowScripts(string module, string[] cmdparams) public void HandleShowScripts(string module, string[] cmdparams)
@ -313,6 +323,44 @@ namespace OpenSim.Region.ScriptEngine.XEngine
} }
} }
public void HandleSuspendScripts(string module, string[] cmdparams)
{
lock (m_Scripts)
{
foreach (IScriptInstance instance in m_Scripts.Values)
{
if (!instance.Suspended)
{
instance.Suspend();
SceneObjectPart sop = m_Scene.GetSceneObjectPart(instance.ObjectID);
MainConsole.Instance.OutputFormat(
"Suspended {0}.{1}, item UUID {2}, prim UUID {3} @ {4}",
instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, sop.AbsolutePosition);
}
}
}
}
public void HandleResumeScripts(string module, string[] cmdparams)
{
lock (m_Scripts)
{
foreach (IScriptInstance instance in m_Scripts.Values)
{
if (instance.Suspended)
{
instance.Resume();
SceneObjectPart sop = m_Scene.GetSceneObjectPart(instance.ObjectID);
MainConsole.Instance.OutputFormat(
"Resumed {0}.{1}, item UUID {2}, prim UUID {3} @ {4}",
instance.PrimName, instance.ScriptName, instance.ItemID, instance.ObjectID, sop.AbsolutePosition);
}
}
}
}
public void RemoveRegion(Scene scene) public void RemoveRegion(Scene scene)
{ {
if (!m_Enabled) if (!m_Enabled)
@ -841,7 +889,7 @@ namespace OpenSim.Region.ScriptEngine.XEngine
m_log.DebugFormat( m_log.DebugFormat(
"[XEngine] Loaded script {0}.{1}, item UUID {2}, prim UUID {3} @ {4}.{5}", "[XEngine] Loaded script {0}.{1}, item UUID {2}, prim UUID {3} @ {4}.{5}",
part.ParentGroup.RootPart.Name, item.Name, itemID, part.UUID, part.ParentGroup.RootPart.Name, item.Name, itemID, part.UUID,
part.ParentGroup.RootPart.AbsolutePosition, part.ParentGroup.Scene.RegionInfo.RegionName); part.ParentGroup.RootPart.AbsolutePosition, part.ParentGroup.Scene.RegionInfo.RegionName);
if (presence != null) if (presence != null)