Add funtions in RegionSyncModule and (Actor)SyncModules to correctly process SyncStop.
E.g. script engine will save script states and delete objects in local scene copy; ScenePersistence still maintains object copies, though.dsg
parent
130915f669
commit
821f80bf3f
|
@ -556,6 +556,12 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
//Shutdown all sync connectors
|
||||
StopAllSyncConnectors();
|
||||
}
|
||||
|
||||
//Trigger SyncStop event, ActorSyncModules can then take actor specific action if needed.
|
||||
//For instance, script engine will save script states
|
||||
//save script state and stop script instances
|
||||
m_scene.EventManager.TriggerOnSymmetricSyncStop();
|
||||
|
||||
}
|
||||
|
||||
private void SyncStatus(Object[] args)
|
||||
|
@ -854,6 +860,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
/// <param name="sog"></param>
|
||||
private void RegionSyncModule_OnObjectBeingRemovedFromScene(SceneObjectGroup sog)
|
||||
{
|
||||
//m_log.DebugFormat("RegionSyncModule_OnObjectBeingRemovedFromScene called at time {0}:{1}:{2}", DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Millisecond);
|
||||
|
||||
//Only send the message out if this is a relay node for sync messages, or this actor caused deleting the object
|
||||
if (m_isSyncRelay || CheckObjectForSendingUpdate(sog))
|
||||
{
|
||||
|
|
|
@ -84,6 +84,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
|
||||
//Register for Scene/SceneGraph events
|
||||
m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(ScriptEngine_OnObjectCreate);
|
||||
m_scene.EventManager.OnSymmetricSyncStop += ScriptEngine_OnSymmetricSyncStop;
|
||||
}
|
||||
|
||||
//Called after AddRegion() has been called for all region modules of the scene.
|
||||
|
@ -167,6 +168,14 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
}
|
||||
}
|
||||
|
||||
public void ScriptEngine_OnSymmetricSyncStop()
|
||||
{
|
||||
//Inform script engine to save script states and stop scripts
|
||||
m_scene.EventManager.TriggerScriptEngineSyncStop();
|
||||
//remove all objects
|
||||
m_scene.DeleteAllSceneObjects();
|
||||
}
|
||||
|
||||
#endregion //ScriptEngineSyncModule
|
||||
|
||||
}
|
||||
|
|
|
@ -2183,7 +2183,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat(
|
||||
"[EVENT MANAGER]: Delegate for TriggerOnSceneObjectLoaded failed - continuing. {0} {1}",
|
||||
"[EVENT MANAGER]: Delegate for TriggerScriptEngineSyncStop failed - continuing. {0} {1}",
|
||||
e.Message, e.StackTrace);
|
||||
}
|
||||
}
|
||||
|
@ -2267,6 +2267,30 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
public delegate void SymmetricSyncStop();
|
||||
public event SymmetricSyncStop OnSymmetricSyncStop;
|
||||
public void TriggerOnSymmetricSyncStop()
|
||||
{
|
||||
SymmetricSyncStop handlerSymmetricSyncStop = OnSymmetricSyncStop;
|
||||
if (handlerSymmetricSyncStop != null)
|
||||
{
|
||||
foreach (SymmetricSyncStop d in handlerSymmetricSyncStop.GetInvocationList())
|
||||
{
|
||||
try
|
||||
{
|
||||
d();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat(
|
||||
"[EVENT MANAGER]: Delegate for TriggerOnSymmetricSyncStop failed - continuing. {0} {1}",
|
||||
e.Message, e.StackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//end of SYMMETRIC SYNC
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue