Added event SceneGraph.OnObjectCreateBySync, which will be triggered in AddSceneObjectByStateSynch.
ScriptEngineSyncModule now subscribes to this new event to create new script instances.dsg
parent
3123671651
commit
005c743fae
|
@ -85,7 +85,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
//m_scene.EventManager.OnPostSceneCreation += OnPostSceneCreation;
|
||||
|
||||
//Register for Scene/SceneGraph events
|
||||
m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(ClientManager_OnObjectCreate);
|
||||
//m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(ClientManager_OnObjectCreate);
|
||||
m_scene.SceneGraph.OnObjectCreateBySync += new ObjectCreateBySyncDelegate(ClientManager_OnObjectCreateBySync);
|
||||
m_scene.EventManager.OnSymmetricSyncStop += ClientManager_OnSymmetricSyncStop;
|
||||
}
|
||||
|
||||
|
@ -151,7 +152,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
/// <summary>
|
||||
/// Script Engine's action upon an object is added to the local scene
|
||||
/// </summary>
|
||||
private void ClientManager_OnObjectCreate(EntityBase entity)
|
||||
private void ClientManager_OnObjectCreateBySync(EntityBase entity)
|
||||
{
|
||||
if (entity is SceneObjectGroup)
|
||||
{
|
||||
|
|
|
@ -85,7 +85,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
//m_scene.EventManager.OnPostSceneCreation += OnPostSceneCreation;
|
||||
|
||||
//Register for Scene/SceneGraph events
|
||||
m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(PhysicsEngine_OnObjectCreate);
|
||||
//m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(PhysicsEngine_OnObjectCreate);
|
||||
m_scene.SceneGraph.OnObjectCreateBySync += new ObjectCreateBySyncDelegate(PhysicsEngine_OnObjectCreateBySync);
|
||||
m_scene.EventManager.OnSymmetricSyncStop += PhysicsEngine_OnSymmetricSyncStop;
|
||||
}
|
||||
|
||||
|
@ -151,7 +152,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
/// <summary>
|
||||
/// Script Engine's action upon an object is added to the local scene
|
||||
/// </summary>
|
||||
private void PhysicsEngine_OnObjectCreate(EntityBase entity)
|
||||
private void PhysicsEngine_OnObjectCreateBySync(EntityBase entity)
|
||||
{
|
||||
if (entity is SceneObjectGroup)
|
||||
{
|
||||
|
|
|
@ -215,9 +215,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
return;
|
||||
}
|
||||
|
||||
List<SceneObjectGroup> primUpdates;
|
||||
List<ScenePresence> presenceUpdates;
|
||||
List<SceneObjectGroup> primUpdates=null;
|
||||
List<ScenePresence> presenceUpdates=null;
|
||||
|
||||
if (m_primUpdates.Count > 0)
|
||||
{
|
||||
lock (m_updateSceneObjectPartLock)
|
||||
{
|
||||
primUpdates = new List<SceneObjectGroup>(m_primUpdates.Values);
|
||||
|
@ -225,12 +227,16 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
m_primUpdates.Clear();
|
||||
//m_presenceUpdates.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
if (m_presenceUpdates.Count > 0)
|
||||
{
|
||||
lock (m_updateScenePresenceLock)
|
||||
{
|
||||
presenceUpdates = new List<ScenePresence>(m_presenceUpdates.Values);
|
||||
m_presenceUpdates.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
// This could be another thread for sending outgoing messages or just have the Queue functions
|
||||
// create and queue the messages directly into the outgoing server thread.
|
||||
|
@ -238,6 +244,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
{
|
||||
// Dan's note: Sending the message when it's first queued would yield lower latency but much higher load on the simulator
|
||||
// as parts may be updated many many times very quickly. Need to implement a higher resolution send in heartbeat
|
||||
|
||||
if (primUpdates != null)
|
||||
{
|
||||
foreach (SceneObjectGroup sog in primUpdates)
|
||||
{
|
||||
//If this is a relay node, or at least one part of the object has the last update caused by this actor, then send the update
|
||||
|
@ -249,7 +258,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
SendObjectUpdateToRelevantSyncConnectors(sog, syncMsg);
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
if(presenceUpdates!=null){
|
||||
foreach (ScenePresence presence in presenceUpdates)
|
||||
{
|
||||
try
|
||||
|
@ -291,7 +302,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
{
|
||||
m_log.ErrorFormat("[REGION SYNC MODULE] Caught exception sending presence updates for {0}: {1}", presence.Name, e.Message);
|
||||
}
|
||||
}
|
||||
}}
|
||||
* */
|
||||
|
||||
// Indicate that the current batch of updates has been completed
|
||||
|
@ -415,6 +426,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
m_log.Warn("[REGION SYNC MODULE]: StatsTimerElapsed -- NOT yet implemented.");
|
||||
}
|
||||
|
||||
//Object updates are sent by enqueuing into each connector's outQueue.
|
||||
private void SendObjectUpdateToRelevantSyncConnectors(SceneObjectGroup sog, SymmetricSyncMessage syncMsg)
|
||||
{
|
||||
List<SyncConnector> syncConnectors = GetSyncConnectorsForObjectUpdates(sog);
|
||||
|
@ -427,6 +439,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
}
|
||||
}
|
||||
|
||||
//Events are send out right away, without being put into the connector's outQueue first.
|
||||
//May need a better method for managing the outgoing messages (i.e. prioritizing object updates and events)
|
||||
private void SendSceneEventToRelevantSyncConnectors(string init_actorID, SymmetricSyncMessage rsm)
|
||||
{
|
||||
List<SyncConnector> syncConnectors = GetSyncConnectorsForSceneEvents(init_actorID, rsm);
|
||||
|
@ -784,8 +798,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// This function will enqueue a message for each SyncConnector in the connector's outgoing queue.
|
||||
/// Each SyncConnector has a SendLoop thread to send the messages in its outgoing queue.
|
||||
/// This function will send out the sync message right away, without putting it into the SyncConnector's queue.
|
||||
/// Should only be called for infrequent or high prority messages.
|
||||
/// </summary>
|
||||
/// <param name="msgType"></param>
|
||||
/// <param name="data"></param>
|
||||
|
|
|
@ -82,7 +82,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
//m_scene.EventManager.OnPostSceneCreation += OnPostSceneCreation;
|
||||
|
||||
//Register for Scene/SceneGraph events
|
||||
m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(ScenePersistence_OnObjectCreate);
|
||||
//m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(ScenePersistence_OnObjectCreate);
|
||||
m_scene.SceneGraph.OnObjectCreateBySync += new ObjectCreateBySyncDelegate(ScenePersistence_OnObjectCreateBySync);
|
||||
}
|
||||
|
||||
//Called after AddRegion() has been called for all region modules of the scene.
|
||||
|
@ -156,12 +157,16 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
/// <summary>
|
||||
/// ScenePersistence's actions upon an object is added to the local scene.
|
||||
/// </summary>
|
||||
private void ScenePersistence_OnObjectCreate(EntityBase entity)
|
||||
private void ScenePersistence_OnObjectCreateBySync(EntityBase entity)
|
||||
{
|
||||
if (entity is SceneObjectGroup)
|
||||
{
|
||||
m_log.Warn(LogHeader + ": link to backup for " + entity.UUID);
|
||||
SceneObjectGroup sog = (SceneObjectGroup)entity;
|
||||
|
||||
//probably what we should do here is to set some variable sog.SyncToBackup to true, and sog.ProcessBackup will only run if that value is true,
|
||||
//then we do not need to worry about where an object is attach-to-backup and modify all those lines.
|
||||
|
||||
sog.AttachToBackup();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,7 +84,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
//m_scene.EventManager.OnPostSceneCreation += OnPostSceneCreation;
|
||||
|
||||
//Register for Scene/SceneGraph events
|
||||
m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(ScriptEngine_OnObjectCreate);
|
||||
//m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(ScriptEngine_OnObjectCreate);
|
||||
m_scene.SceneGraph.OnObjectCreateBySync += new ObjectCreateBySyncDelegate(ScriptEngine_OnObjectCreateBySync);
|
||||
m_scene.EventManager.OnSymmetricSyncStop += ScriptEngine_OnSymmetricSyncStop;
|
||||
|
||||
//for local OnUpdateScript, we'll handle it the same way as a remove OnUpdateScript.
|
||||
|
@ -166,7 +167,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
|||
/// <summary>
|
||||
/// Script Engine's action upon an object is added to the local scene
|
||||
/// </summary>
|
||||
private void ScriptEngine_OnObjectCreate(EntityBase entity)
|
||||
private void ScriptEngine_OnObjectCreateBySync(EntityBase entity)
|
||||
{
|
||||
if (entity is SceneObjectGroup)
|
||||
{
|
||||
|
|
|
@ -47,6 +47,11 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
|
||||
public delegate void ObjectDeleteDelegate(EntityBase obj);
|
||||
|
||||
//SYMMETRIC SYNC
|
||||
public delegate void ObjectCreateBySyncDelegate(EntityBase obj);
|
||||
//end of SYMMETRIC SYNC
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// This class used to be called InnerScene and may not yet truly be a SceneGraph. The non scene graph components
|
||||
/// should be migrated out over time.
|
||||
|
@ -64,6 +69,10 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public event ObjectCreateDelegate OnObjectCreate;
|
||||
public event ObjectDeleteDelegate OnObjectRemove;
|
||||
|
||||
//SYMMETRIC SYNC
|
||||
public event ObjectCreateBySyncDelegate OnObjectCreateBySync;
|
||||
//end of SYMMETRIC SYNC
|
||||
|
||||
#endregion
|
||||
|
||||
#region Fields
|
||||
|
@ -1963,9 +1972,8 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
}
|
||||
|
||||
//This is an object added due to receiving a state synchronization message from Scene or an actor. Do similar things as the original AddSceneObject(),
|
||||
//but call ScheduleGroupForFullUpdate_TimeStampUnchanged() instead, so as not to modify the timestamp or actorID, since the object was not created
|
||||
//locally.
|
||||
//This is called when an object is added due to receiving a state synchronization message from Scene or an actor. Do similar things as the original AddSceneObject(),
|
||||
//but call ScheduleGroupForFullUpdate_TimeStampUnchanged() instead, so as not to modify the timestamp or actorID, since the object was not created locally.
|
||||
public bool AddSceneObjectByStateSynch(SceneObjectGroup sceneObject)
|
||||
{
|
||||
if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero)
|
||||
|
@ -2007,8 +2015,12 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
//if (attachToBackup)
|
||||
// sceneObject.AttachToBackup();
|
||||
|
||||
if (OnObjectCreate != null)
|
||||
OnObjectCreate(sceneObject);
|
||||
//if (OnObjectCreate != null)
|
||||
// OnObjectCreate(sceneObject);
|
||||
|
||||
if (OnObjectCreateBySync != null)
|
||||
OnObjectCreateBySync(sceneObject);
|
||||
|
||||
|
||||
lock (SceneObjectGroupsByFullID)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue