DelinkFromGroup now calls AddNewSceneObjectByDelink, to avoid calling SyncNewObject later.

Also, replace all "SYMMETRIC SYNC" with "DSG SYNC" in comments.
dsg
Huaiyu (Kitty) Liu 2011-04-20 14:59:06 -07:00
parent a5ebd04d9d
commit 1c1d3893fc
20 changed files with 188 additions and 173 deletions

View File

@ -386,7 +386,7 @@ namespace OpenSim.Framework
public string RemotingAddress; public string RemotingAddress;
public UUID ScopeID = UUID.Zero; public UUID ScopeID = UUID.Zero;
//SYMMETRIC SYNC //DSG SYNC
//IP:port for the symmetric sync listener this actor is configured to connect to //IP:port for the symmetric sync listener this actor is configured to connect to
private string m_syncServerAddr = String.Empty; private string m_syncServerAddr = String.Empty;
private int m_syncServerPort; private int m_syncServerPort;
@ -398,7 +398,7 @@ namespace OpenSim.Framework
private int m_physicsSyncServerPort; private int m_physicsSyncServerPort;
private uint m_quarkLocX; private uint m_quarkLocX;
private uint m_quarkLocY; private uint m_quarkLocY;
//end of SYMMETRIC SYNC //end of DSG SYNC
// Apparently, we're applying the same estatesettings regardless of whether it's local or remote. // Apparently, we're applying the same estatesettings regardless of whether it's local or remote.
@ -689,7 +689,7 @@ namespace OpenSim.Framework
get { return Util.UIntsToLong((RegionLocX * (uint) Constants.RegionSize), (RegionLocY * (uint) Constants.RegionSize)); } get { return Util.UIntsToLong((RegionLocX * (uint) Constants.RegionSize), (RegionLocY * (uint) Constants.RegionSize)); }
} }
//SYMMETRIC SYNC //DSG SYNC
public string SyncServerAddress public string SyncServerAddress
{ {
get { return m_syncServerAddr; } get { return m_syncServerAddr; }
@ -726,7 +726,7 @@ namespace OpenSim.Framework
get { return m_quarkLocY; } get { return m_quarkLocY; }
set { m_quarkLocY = value; } set { m_quarkLocY = value; }
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
public void SetEndPoint(string ipaddr, int port) public void SetEndPoint(string ipaddr, int port)
{ {
@ -883,7 +883,7 @@ namespace OpenSim.Framework
// //
ScopeID = new UUID(config.GetString("ScopeID", UUID.Zero.ToString())); ScopeID = new UUID(config.GetString("ScopeID", UUID.Zero.ToString()));
// SYMMETRIC SYNC // DSG SYNC
m_syncServerAddr = config.GetString("SyncServerAddress", String.Empty); m_syncServerAddr = config.GetString("SyncServerAddress", String.Empty);
m_syncServerPort = config.GetInt("SyncServerPort", -1); m_syncServerPort = config.GetInt("SyncServerPort", -1);
//if either IP or port is not configured, we set IP to empty to raise warning later //if either IP or port is not configured, we set IP to empty to raise warning later
@ -908,7 +908,7 @@ namespace OpenSim.Framework
m_quarkLocY = Convert.ToUInt32(quarkLocElements[1]); m_quarkLocY = Convert.ToUInt32(quarkLocElements[1]);
// end of SYMMETRIC SYNC // end of DSG SYNC
} }

View File

@ -411,11 +411,11 @@ namespace OpenSim
scene.StartTimer(); scene.StartTimer();
//SYMMETRIC SYNC //DSG SYNC
//For INonSharedRegionModule, there is no more PostInitialise(). So we trigger OnPostSceneCreation event here //For INonSharedRegionModule, there is no more PostInitialise(). So we trigger OnPostSceneCreation event here
//to let the Sync modules to do their work once all modules are loaded and scene has interfaces to all of them. //to let the Sync modules to do their work once all modules are loaded and scene has interfaces to all of them.
scene.EventManager.TriggerOnPostSceneCreation(scene); scene.EventManager.TriggerOnPostSceneCreation(scene);
//end of SYMMETRIC SYNC //end of DSG SYNC
return clientServer; return clientServer;
} }

View File

@ -674,7 +674,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
rootPart.TrimPermissions(); rootPart.TrimPermissions();
//SYMMETRIC SYNC: move this part to the bottom of this function, //DSG SYNC: move this part to the bottom of this function,
//so that all properties of the object would have been set once //so that all properties of the object would have been set once
//AddNewSceneObject is called. //AddNewSceneObject is called.
if (attachment) if (attachment)

View File

@ -318,7 +318,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Syncing to region \"{0}\"", m_regionName)); RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Syncing to region \"{0}\"", m_regionName));
return; return;
} }
//SYMMETRIC SYNC: do not handle terrian and object updates //DSG SYNC: do not handle terrian and object updates
case RegionSyncMessage.MsgType.Terrain: case RegionSyncMessage.MsgType.Terrain:
{ {
if(!m_symSync) if(!m_symSync)
@ -378,7 +378,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
} }
return; return;
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
case RegionSyncMessage.MsgType.NewAvatar: case RegionSyncMessage.MsgType.NewAvatar:
{ {
// Get the data from message and error check // Get the data from message and error check
@ -854,13 +854,13 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
Send(new RegionSyncMessage(RegionSyncMessage.MsgType.RegionName, m_scene.RegionInfo.RegionName)); Send(new RegionSyncMessage(RegionSyncMessage.MsgType.RegionName, m_scene.RegionInfo.RegionName));
m_log.WarnFormat("Sending region name: \"{0}\"", m_scene.RegionInfo.RegionName); m_log.WarnFormat("Sending region name: \"{0}\"", m_scene.RegionInfo.RegionName);
//SYMMETRIC SYNC: commenting out terrian and object updates //DSG SYNC: commenting out terrian and object updates
if (!m_symSync) if (!m_symSync)
{ {
Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetTerrain)); Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetTerrain));
Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetObjects)); Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetObjects));
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetAvatars)); Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetAvatars));
// Register for events which will be forwarded to authoritative scene // Register for events which will be forwarded to authoritative scene
@ -910,11 +910,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
// Register for interesting client events which will be forwarded to auth sim // Register for interesting client events which will be forwarded to auth sim
// These are the raw packet data blocks from the client, intercepted and sent up to the sim // These are the raw packet data blocks from the client, intercepted and sent up to the sim
client.OnAgentUpdateRaw += HandleAgentUpdateRaw; client.OnAgentUpdateRaw += HandleAgentUpdateRaw;
//SYMMETRIC SYNC: do not subscribe to OnChatFromClientRaw: RegionSyncModule + Scene.EventManager will handle this. //DSG SYNC: do not subscribe to OnChatFromClientRaw: RegionSyncModule + Scene.EventManager will handle this.
//client.OnChatFromClientRaw += HandleChatFromClientRaw; //client.OnChatFromClientRaw += HandleChatFromClientRaw;
client.OnAgentRequestSit += HandleAgentRequestSit; client.OnAgentRequestSit += HandleAgentRequestSit;
client.OnAgentSit += HandleAgentSit; client.OnAgentSit += HandleAgentSit;
//SYMMETRIC SYNC: do not subscribe to OnGrabObject, OnGrabUpdate, and OnDeGrabObject: RegionSyncModule + Scene.EventManager will handle this. //DSG SYNC: do not subscribe to OnGrabObject, OnGrabUpdate, and OnDeGrabObject: RegionSyncModule + Scene.EventManager will handle this.
//client.OnGrabObject += HandleGrabObject; //client.OnGrabObject += HandleGrabObject;
//client.OnGrabUpdate += HandleGrabUpdate; //client.OnGrabUpdate += HandleGrabUpdate;
//client.OnDeGrabObject += HandleDeGrabObject; //client.OnDeGrabObject += HandleDeGrabObject;

View File

@ -202,10 +202,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
// *** This is the main receive loop thread for each connected client // *** This is the main receive loop thread for each connected client
private void ReceiveLoop() private void ReceiveLoop()
{ {
//SYMMETRIC SYNC: commenting out the code for handling chats //DSG SYNC: commenting out the code for handling chats
// m_scene.EventManager.OnChatFromClient += new EventManager.ChatFromClientEvent(EventManager_OnChatFromClient); // m_scene.EventManager.OnChatFromClient += new EventManager.ChatFromClientEvent(EventManager_OnChatFromClient);
// m_scene.EventManager.OnChatFromWorld += new EventManager.ChatFromWorldEvent(EventManager_OnChatFromClient); // m_scene.EventManager.OnChatFromWorld += new EventManager.ChatFromWorldEvent(EventManager_OnChatFromClient);
//end of SYMMETRIC SYNC //end of DSG SYNC
// Reset stats and time // Reset stats and time
@ -327,7 +327,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
RegionSyncMessage.HandleSuccess(LogHeader, msg, String.Format("Syncing to region \"{0}\"", m_regionName)); RegionSyncMessage.HandleSuccess(LogHeader, msg, String.Format("Syncing to region \"{0}\"", m_regionName));
return; return;
} }
//SYMMETRIC SYNC: do not handle terrian and object updates //DSG SYNC: do not handle terrian and object updates
case RegionSyncMessage.MsgType.GetTerrain: case RegionSyncMessage.MsgType.GetTerrain:
{ {
/* /*
@ -358,7 +358,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
* */ * */
return; return;
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
case RegionSyncMessage.MsgType.GetAvatars: case RegionSyncMessage.MsgType.GetAvatars:
{ {
m_scene.ForEachScenePresence(delegate(ScenePresence presence) m_scene.ForEachScenePresence(delegate(ScenePresence presence)

View File

@ -151,7 +151,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//m_scene.EventManager.OnNewPresence += new EventManager.OnNewPresenceDelegate(EventManager_OnNewPresence); //m_scene.EventManager.OnNewPresence += new EventManager.OnNewPresenceDelegate(EventManager_OnNewPresence);
m_scene.EventManager.OnRemovePresence += new EventManager.OnRemovePresenceDelegate(EventManager_OnRemovePresence); m_scene.EventManager.OnRemovePresence += new EventManager.OnRemovePresenceDelegate(EventManager_OnRemovePresence);
//SYMMETRIC SYNC: do not handle object updates //DSG SYNC: do not handle object updates
/* /*
if (!m_symsync) if (!m_symsync)
{ {
@ -162,7 +162,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
m_scene.EventManager.OnOarFileLoaded += new EventManager.OarFileLoaded(EventManager_OnOarFileLoaded); m_scene.EventManager.OnOarFileLoaded += new EventManager.OarFileLoaded(EventManager_OnOarFileLoaded);
} }
* */ * */
//end of SYMMETRIC SYNC //end of DSG SYNC
// Start the server and listen for RegionSyncClients // Start the server and listen for RegionSyncClients
m_serveraddr = m_scene.RegionInfo.AvatarSyncServerAddress; m_serveraddr = m_scene.RegionInfo.AvatarSyncServerAddress;
m_serverport = m_scene.RegionInfo.AvatarSyncServerPort; m_serverport = m_scene.RegionInfo.AvatarSyncServerPort;
@ -300,7 +300,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
// Sending the message when it's first queued would yield lower latency but much higher load on the simulator // 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 // as parts may be updated many many times very quickly. Need to implement a higher resolution send in heartbeat
//SYMMETRIC SYNC: do not handle object updates //DSG SYNC: do not handle object updates
/* /*
if (!m_symsync) if (!m_symsync)
{ {
@ -317,7 +317,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
} }
} }
* */ * */
//end of SYMMETRIC SYNC //end of DSG SYNC
foreach (ScenePresence presence in presenceUpdates) foreach (ScenePresence presence in presenceUpdates)
{ {
try try

View File

@ -1944,6 +1944,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
foreach (SceneObjectGroup sog in sogList) foreach (SceneObjectGroup sog in sogList)
{ {
m_log.WarnFormat("SyncStateReport -- SOG: name {0}, UUID {1}, position {2}", sog.Name, sog.UUID, sog.AbsolutePosition); m_log.WarnFormat("SyncStateReport -- SOG: name {0}, UUID {1}, position {2}", sog.Name, sog.UUID, sog.AbsolutePosition);
foreach (SceneObjectPart part in sog.Parts)
{
m_log.WarnFormat(" -- part {0}, UUID {1}, LocalID {2}, offset-position {3}", part.Name, part.UUID, part.LocalId, part.OffsetPosition);
}
} }
if (m_isSyncRelay) if (m_isSyncRelay)
@ -2541,6 +2545,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
} }
} }
} }
} }

View File

@ -127,11 +127,11 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm
m_listenerManager = new ListenerManager(maxlisteners, maxhandles); m_listenerManager = new ListenerManager(maxlisteners, maxhandles);
m_scene.EventManager.OnChatFromClient += DeliverClientMessage; m_scene.EventManager.OnChatFromClient += DeliverClientMessage;
m_scene.EventManager.OnChatBroadcast += DeliverClientMessage; m_scene.EventManager.OnChatBroadcast += DeliverClientMessage;
//SYMMETRIC SYNC //DSG SYNC
//m_scene.EventManager.OnChatFromWorld += DeliverClientMessage; //m_scene.EventManager.OnChatFromWorld += DeliverClientMessage;
//Kitty: temp debug //Kitty: temp debug
//m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); //m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//end SYMMETRIC SYNC //end DSG SYNC
m_pendingQ = new Queue(); m_pendingQ = new Queue();
m_pending = Queue.Synchronized(m_pendingQ); m_pending = Queue.Synchronized(m_pendingQ);
} }

View File

@ -551,14 +551,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain
m_scene.PhysicsScene.SetTerrain(m_channel.GetFloatsSerialised()); m_scene.PhysicsScene.SetTerrain(m_channel.GetFloatsSerialised());
m_scene.SaveTerrain(); m_scene.SaveTerrain();
//SYMMETRIC SYNC //DSG SYNC
//Terrain has been modified, send out sync message if needed //Terrain has been modified, send out sync message if needed
//if (m_scene.RegionSyncModule != null) //if (m_scene.RegionSyncModule != null)
//{ //{
//m_log.DebugFormat("EventManager_OnTerrainTick: To call SendTerrainUpdates with TS {0} and actorID {1}", m_lastUpdateTimeStamp, m_lastUpdateActorID); //m_log.DebugFormat("EventManager_OnTerrainTick: To call SendTerrainUpdates with TS {0} and actorID {1}", m_lastUpdateTimeStamp, m_lastUpdateActorID);
//m_scene.RegionSyncModule.SendTerrainUpdates(m_lastUpdateTimeStamp, m_lastUpdateActorID); //m_scene.RegionSyncModule.SendTerrainUpdates(m_lastUpdateTimeStamp, m_lastUpdateActorID);
//} //}
//end of SYMMETRIC SYNC //end of DSG SYNC
// Clients who look at the map will never see changes after they looked at the map, so i've commented this out. // Clients who look at the map will never see changes after they looked at the map, so i've commented this out.
//m_scene.CreateTerrainTexture(true); //m_scene.CreateTerrainTexture(true);
@ -600,7 +600,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
client.OnUnackedTerrain += client_OnUnackedTerrain; client.OnUnackedTerrain += client_OnUnackedTerrain;
} }
//SYMMETRIC SYNC //DSG SYNC
private long m_lastUpdateTimeStamp = DateTime.Now.Ticks; private long m_lastUpdateTimeStamp = DateTime.Now.Ticks;
public long LastUpdateTimeStamp public long LastUpdateTimeStamp
{ {
@ -675,7 +675,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
m_lastUpdateActorID = lastUpdateActorID; m_lastUpdateActorID = lastUpdateActorID;
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
/// <summary> /// <summary>
/// Checks to see if the terrain has been modified since last check /// Checks to see if the terrain has been modified since last check
@ -684,7 +684,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
/// </summary> /// </summary>
private void CheckForTerrainUpdates() private void CheckForTerrainUpdates()
{ {
//SYMMETRIC SYNC //DSG SYNC
m_log.DebugFormat("CheckForTerrainUpdates() called"); m_log.DebugFormat("CheckForTerrainUpdates() called");
//Assumption: Thus function is only called when the terrain is updated by the local actor. //Assumption: Thus function is only called when the terrain is updated by the local actor.
// Updating terrain during receiving sync messages from another actor will call CheckForTerrainUpdates. // Updating terrain during receiving sync messages from another actor will call CheckForTerrainUpdates.
@ -696,7 +696,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain
//Check if the terrain has been modified and send out sync message if modified. //Check if the terrain has been modified and send out sync message if modified.
CheckForTerrainUpdates(false, currentTimeTick, localActorID); CheckForTerrainUpdates(false, currentTimeTick, localActorID);
//end of SYMMETRIC SYNC //end of DSG SYNC
//CheckForTerrainUpdates(false); //CheckForTerrainUpdates(false);
} }
@ -710,9 +710,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
/// <param name="respectEstateSettings">should height map deltas be limited to the estate settings limits</param> /// <param name="respectEstateSettings">should height map deltas be limited to the estate settings limits</param>
/// </summary> /// </summary>
//private void CheckForTerrainUpdates(bool respectEstateSettings) //private void CheckForTerrainUpdates(bool respectEstateSettings)
//SYMMETRIC SYNC: Change the interface, to input the right sync information for the most recent update //DSG SYNC: Change the interface, to input the right sync information for the most recent update
private void CheckForTerrainUpdates(bool respectEstateSettings, long lastUpdateTimeStamp, string lastUpdateActorID) private void CheckForTerrainUpdates(bool respectEstateSettings, long lastUpdateTimeStamp, string lastUpdateActorID)
//end of SYMMETRIC SYNC //end of DSG SYNC
{ {
bool shouldTaint = false; bool shouldTaint = false;
float[] serialised = m_channel.GetFloatsSerialised(); float[] serialised = m_channel.GetFloatsSerialised();
@ -741,14 +741,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain
if (shouldTaint) if (shouldTaint)
{ {
m_tainted = true; m_tainted = true;
//SYMMETRIC SYNC //DSG SYNC
//Terrain has been modified, updated the sync info //Terrain has been modified, updated the sync info
if (m_scene.RegionSyncModule != null) if (m_scene.RegionSyncModule != null)
{ {
SyncInfoUpdate(lastUpdateTimeStamp, lastUpdateActorID); SyncInfoUpdate(lastUpdateTimeStamp, lastUpdateActorID);
m_scene.RegionSyncModule.SendTerrainUpdates(lastUpdateTimeStamp, lastUpdateActorID); m_scene.RegionSyncModule.SendTerrainUpdates(lastUpdateTimeStamp, lastUpdateActorID);
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
} }
@ -862,9 +862,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
m_channel, allowMask, west, south, height, size, seconds); m_channel, allowMask, west, south, height, size, seconds);
//CheckForTerrainUpdates(!god); //revert changes outside estate limits //CheckForTerrainUpdates(!god); //revert changes outside estate limits
//SYMMETRIC SYNC //DSG SYNC
CheckForTerrainUpdates(!god, DateTime.Now.Ticks, m_scene.GetSyncActorID()); CheckForTerrainUpdates(!god, DateTime.Now.Ticks, m_scene.GetSyncActorID());
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
} }
else else
@ -906,9 +906,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain
m_channel, fillArea, size); m_channel, fillArea, size);
//CheckForTerrainUpdates(!god); //revert changes outside estate limits //CheckForTerrainUpdates(!god); //revert changes outside estate limits
//SYMMETRIC SYNC //DSG SYNC
CheckForTerrainUpdates(!god, DateTime.Now.Ticks, m_scene.GetSyncActorID()); CheckForTerrainUpdates(!god, DateTime.Now.Ticks, m_scene.GetSyncActorID());
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
} }
else else

View File

@ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces
void UndoTerrain(ITerrainChannel channel); void UndoTerrain(ITerrainChannel channel);
//SYMMETRIC SYNC //DSG SYNC
/// <summary> /// <summary>
/// Invoked by receiving a terrain sync message. First, check if the /// Invoked by receiving a terrain sync message. First, check if the
/// timestamp is more advance than the local copy. If so, update the /// timestamp is more advance than the local copy. If so, update the
@ -96,6 +96,6 @@ namespace OpenSim.Region.Framework.Interfaces
/// <param name="lastUpdateTimeStamp"></param> /// <param name="lastUpdateTimeStamp"></param>
/// <param name="lastUpdateActorID"></param> /// <param name="lastUpdateActorID"></param>
void SetSyncInfo(long lastUpdateTimeStamp, string lastUpdateActorID); void SetSyncInfo(long lastUpdateTimeStamp, string lastUpdateActorID);
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
} }

View File

@ -38,7 +38,7 @@ using GridRegion = OpenSim.Services.Interfaces.GridRegion;
namespace OpenSim.Region.Framework.Scenes namespace OpenSim.Region.Framework.Scenes
{ {
//SYMMETRIC SYNC: Rename the original EventManager as EventManagerBase, and implement a new EventManager that inherits from EventManagerBase //DSG SYNC: Rename the original EventManager as EventManagerBase, and implement a new EventManager that inherits from EventManagerBase
/// <summary> /// <summary>
/// A wrapper class to implement handle event differently depending on if they are initiated locally or remotelly (i.e. by another actor) /// A wrapper class to implement handle event differently depending on if they are initiated locally or remotelly (i.e. by another actor)
@ -1113,7 +1113,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
//SYMMETRIC SYNC: overridden at new EventManager class //DSG SYNC: overridden at new EventManager class
//public void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) //public void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
public virtual void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) public virtual void TriggerObjectGrab(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
{ {
@ -1136,7 +1136,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
//SYMMETRIC SYNC: overridden at new EventManager class //DSG SYNC: overridden at new EventManager class
//public void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) //public void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
public virtual void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) public virtual void TriggerObjectGrabbing(uint localID, uint originalID, Vector3 offsetPos, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
{ {
@ -1159,7 +1159,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
//SYMMETRIC SYNC: overridden at new EventManager class //DSG SYNC: overridden at new EventManager class
//public void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) //public void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
public virtual void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs) public virtual void TriggerObjectDeGrab(uint localID, uint originalID, IClientAPI remoteClient, SurfaceTouchEventArgs surfaceArgs)
{ {
@ -1851,7 +1851,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
//SYMMETRIC SYNC: the function is overridden in new EventManager //DSG SYNC: the function is overridden in new EventManager
//public void TriggerOnChatFromWorld(Object sender, OSChatMessage chat) //public void TriggerOnChatFromWorld(Object sender, OSChatMessage chat)
public virtual void TriggerOnChatFromWorld(Object sender, OSChatMessage chat) public virtual void TriggerOnChatFromWorld(Object sender, OSChatMessage chat)
{ {
@ -1874,7 +1874,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
//SYMMETRIC SYNC: overiding this in the inherited class //DSG SYNC: overiding this in the inherited class
//public void TriggerOnChatFromClient(Object sender, OSChatMessage chat) //public void TriggerOnChatFromClient(Object sender, OSChatMessage chat)
public virtual void TriggerOnChatFromClient(Object sender, OSChatMessage chat) public virtual void TriggerOnChatFromClient(Object sender, OSChatMessage chat)
{ {
@ -2550,7 +2550,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
#endregion #endregion
//SYMMETRIC SYNC //DSG SYNC
public event PostSceneCreation OnPostSceneCreation; public event PostSceneCreation OnPostSceneCreation;
public delegate void PostSceneCreation(Scene createdScene); public delegate void PostSceneCreation(Scene createdScene);
public void TriggerOnPostSceneCreation(Scene createdScene) public void TriggerOnPostSceneCreation(Scene createdScene)
@ -2619,6 +2619,6 @@ namespace OpenSim.Region.Framework.Scenes
} }
} }
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
} }

View File

@ -251,7 +251,7 @@ namespace OpenSim.Region.Framework.Scenes
AssetService.Store(asset); AssetService.Store(asset);
//REGION SYNC: if RegionSyncEnabled, move script related operations to be after update inventory item //REGION SYNC: if RegionSyncEnabled, move script related operations to be after update inventory item
//SYMMETRIC SYNC: commenting out old REGION SYNC code, the RemoveScriptInstance would be handled by ScriptEngineSyncModule //DSG SYNC: commenting out old REGION SYNC code, the RemoveScriptInstance would be handled by ScriptEngineSyncModule
/* /*
if (!RegionSyncEnabled) if (!RegionSyncEnabled)
{ {
@ -270,7 +270,7 @@ namespace OpenSim.Region.Framework.Scenes
part.GetProperties(remoteClient); part.GetProperties(remoteClient);
////REGION SYNC ////REGION SYNC
//SYMMETRIC SYNC: commenting out old REGION SYNC code, the RemoveScriptInstance would be handled by ScriptEngineSyncModule //DSG SYNC: commenting out old REGION SYNC code, the RemoveScriptInstance would be handled by ScriptEngineSyncModule
/* /*
if (!RegionSyncEnabled) if (!RegionSyncEnabled)
{ {
@ -309,7 +309,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
* */ * */
//SYMMETRIC SYNC: Distributed Scene Graph implementation //DSG SYNC: Distributed Scene Graph implementation
m_log.Debug("Scene.Inventory: to call EventManager.TriggerUpdateScript, agentID: " + remoteClient.AgentId); m_log.Debug("Scene.Inventory: to call EventManager.TriggerUpdateScript, agentID: " + remoteClient.AgentId);
//Trigger OnUpdateScript event. //Trigger OnUpdateScript event.
EventManager.TriggerUpdateScript(remoteClient.AgentId, itemId, primId, isScriptRunning, item.AssetID); EventManager.TriggerUpdateScript(remoteClient.AgentId, itemId, primId, isScriptRunning, item.AssetID);
@ -370,7 +370,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
#endregion #endregion
#region SYMMETRIC SYNC #region DSG SYNC
public void SymSync_OnNewScript(UUID avatarID, UUID itemID, SceneObjectPart part) public void SymSync_OnNewScript(UUID avatarID, UUID itemID, SceneObjectPart part)
{ {
TaskInventoryItem item = part.Inventory.GetInventoryItem(itemID); TaskInventoryItem item = part.Inventory.GetInventoryItem(itemID);
@ -433,7 +433,7 @@ namespace OpenSim.Region.Framework.Scenes
return errors; return errors;
} }
#endregion //SYMMETRIC SYNC #endregion //DSG SYNC
/// <summary> /// <summary>
@ -1710,7 +1710,7 @@ namespace OpenSim.Region.Framework.Scenes
part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID); part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID);
part.GetProperties(remoteClient); part.GetProperties(remoteClient);
//SYMMETRIC SYNC //DSG SYNC
/* Original OpenSim code, commented out /* Original OpenSim code, commented out
// TODO: switch to posting on_rez here when scripts // TODO: switch to posting on_rez here when scripts
// have state in inventory // have state in inventory
@ -1737,7 +1737,7 @@ namespace OpenSim.Region.Framework.Scenes
//part.GetProperties(remoteClient); //part.GetProperties(remoteClient);
part.ParentGroup.ResumeScripts(); part.ParentGroup.ResumeScripts();
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
else else
@ -1797,7 +1797,7 @@ namespace OpenSim.Region.Framework.Scenes
part.Inventory.AddInventoryItem(taskItem, false); part.Inventory.AddInventoryItem(taskItem, false);
part.GetProperties(remoteClient); part.GetProperties(remoteClient);
//SYMMETRIC SYNC //DSG SYNC
//part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0); //part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0);
//part.ParentGroup.ResumeScripts(); //part.ParentGroup.ResumeScripts();
if (RegionSyncModule != null) if (RegionSyncModule != null)
@ -1815,7 +1815,7 @@ namespace OpenSim.Region.Framework.Scenes
//part.GetProperties(remoteClient); //part.GetProperties(remoteClient);
part.ParentGroup.ResumeScripts(); part.ParentGroup.ResumeScripts();
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
} }

View File

@ -634,9 +634,9 @@ namespace OpenSim.Region.Framework.Scenes
#endregion #endregion
#region SYMMETRIC SYNC #region DSG SYNC
/////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////
//KittyL: 12/23/2010. SYMMETRIC SYNC: Implementation for the symmetric synchronization model. //KittyL: 12/23/2010. DSG SYNC: Implementation for the symmetric synchronization model.
/////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////
private IRegionSyncModule m_regionSyncModule = null; private IRegionSyncModule m_regionSyncModule = null;
@ -866,7 +866,18 @@ namespace OpenSim.Region.Framework.Scenes
return m_sceneGraph.UpdateObjectPartBucketProperties(bucketName, partUUID, updatePart, bucketSyncInfo); return m_sceneGraph.UpdateObjectPartBucketProperties(bucketName, partUUID, updatePart, bucketSyncInfo);
} }
#endregion //SYMMETRIC SYNC public bool AddNewSceneObjectByDelink(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
{
if (m_sceneGraph.AddNewSceneObjectByDelink(sceneObject, attachToBackup, sendClientUpdates))
{
EventManager.TriggerObjectAddedToScene(sceneObject);
return true;
}
return false;
}
#endregion //DSG SYNC
public ICapabilitiesModule CapsModule public ICapabilitiesModule CapsModule
{ {
@ -1010,10 +1021,10 @@ namespace OpenSim.Region.Framework.Scenes
m_physicalPrim = physicalPrim; m_physicalPrim = physicalPrim;
m_seeIntoRegionFromNeighbor = SeeIntoRegionFromNeighbor; m_seeIntoRegionFromNeighbor = SeeIntoRegionFromNeighbor;
//SYMMETRIC SYNC: pass Scene reference to EventManager //DSG SYNC: pass Scene reference to EventManager
//m_eventManager = new EventManager(); //m_eventManager = new EventManager();
m_eventManager = new EventManager(this); m_eventManager = new EventManager(this);
//end of SYMMETRIC SYNC //end of DSG SYNC
m_permissions = new ScenePermissions(this); m_permissions = new ScenePermissions(this);
m_asyncSceneObjectDeleter = new AsyncSceneObjectGroupDeleter(this); m_asyncSceneObjectDeleter = new AsyncSceneObjectGroupDeleter(this);
@ -1219,10 +1230,10 @@ namespace OpenSim.Region.Framework.Scenes
m_regInfo = regInfo; m_regInfo = regInfo;
//SYMMETRIC SYNC: pass Scene reference to EventManager //DSG SYNC: pass Scene reference to EventManager
//m_eventManager = new EventManager(); //m_eventManager = new EventManager();
m_eventManager = new EventManager(this); m_eventManager = new EventManager(this);
//end of SYMMETRIC SYNC //end of DSG SYNC
m_lastUpdate = Util.EnvironmentTickCount(); m_lastUpdate = Util.EnvironmentTickCount();
} }
@ -1557,13 +1568,13 @@ namespace OpenSim.Region.Framework.Scenes
PhysEngineToSceneConnectorModule = RequestModuleInterface<IPhysEngineToSceneConnectorModule>(); PhysEngineToSceneConnectorModule = RequestModuleInterface<IPhysEngineToSceneConnectorModule>();
SceneToPhysEngineSyncServer = RequestModuleInterface<ISceneToPhysEngineServer>(); SceneToPhysEngineSyncServer = RequestModuleInterface<ISceneToPhysEngineServer>();
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
//SYMMETRIC SYNC (KittyL: started 12/23/2010) //DSG SYNC (KittyL: started 12/23/2010)
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
m_regionSyncModule = RequestModuleInterface<IRegionSyncModule>(); m_regionSyncModule = RequestModuleInterface<IRegionSyncModule>();
m_DSGActorSyncModule = RequestModuleInterface<IDSGActorSyncModule>(); m_DSGActorSyncModule = RequestModuleInterface<IDSGActorSyncModule>();
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
//end of SYMMETRIC SYNC //end of DSG SYNC
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// Shoving this in here for now, because we have the needed // Shoving this in here for now, because we have the needed
@ -1743,7 +1754,7 @@ namespace OpenSim.Region.Framework.Scenes
m_regionSyncServerModule.SendUpdates(); m_regionSyncServerModule.SendUpdates();
} }
//SYMMETRIC SYNC //DSG SYNC
//NOTE: If it is configured as symmetric sync in opensim.ini, the above IsSyncedServer() or IsSyncedClient() should all return false //NOTE: If it is configured as symmetric sync in opensim.ini, the above IsSyncedServer() or IsSyncedClient() should all return false
if (RegionSyncModule != null) if (RegionSyncModule != null)
@ -1751,7 +1762,7 @@ namespace OpenSim.Region.Framework.Scenes
//RegionSyncModule.SendSceneUpdates(); //RegionSyncModule.SendSceneUpdates();
RegionSyncModule.SyncOutPrimUpdates(); RegionSyncModule.SyncOutPrimUpdates();
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
int tmpPhysicsMS2 = Util.EnvironmentTickCount(); int tmpPhysicsMS2 = Util.EnvironmentTickCount();
if ((Frame % m_update_physics == 0) && m_physics_enabled && (IsSyncedServer() || IsPhysEngineActor())) if ((Frame % m_update_physics == 0) && m_physics_enabled && (IsSyncedServer() || IsPhysEngineActor()))
@ -3228,7 +3239,7 @@ namespace OpenSim.Region.Framework.Scenes
client.OnUpdatePrimFlags += m_sceneGraph.UpdatePrimFlags; client.OnUpdatePrimFlags += m_sceneGraph.UpdatePrimFlags;
client.OnRequestObjectPropertiesFamily += m_sceneGraph.RequestObjectPropertiesFamily; client.OnRequestObjectPropertiesFamily += m_sceneGraph.RequestObjectPropertiesFamily;
client.OnObjectPermissions += HandleObjectPermissionsUpdate; client.OnObjectPermissions += HandleObjectPermissionsUpdate;
//SYMMETRIC SYNC: return the code back to its original OpenSim version //DSG SYNC: return the code back to its original OpenSim version
//if (IsSyncedServer()) //if (IsSyncedServer())
//{ //{
client.OnGrabObject += ProcessObjectGrab; client.OnGrabObject += ProcessObjectGrab;
@ -3728,7 +3739,7 @@ namespace OpenSim.Region.Framework.Scenes
ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, localID); }); ForEachClient(delegate(IClientAPI client) { client.SendKillObject(m_regionHandle, localID); });
//SYMMETRIC SYNC: object remove should be handled through RegionSyncModule //DSG SYNC: object remove should be handled through RegionSyncModule
// REGION SYNC // REGION SYNC
/* /*
if( IsSyncedServer() ) if( IsSyncedServer() )

View File

@ -47,9 +47,9 @@ namespace OpenSim.Region.Framework.Scenes
public delegate void ObjectDeleteDelegate(EntityBase obj); public delegate void ObjectDeleteDelegate(EntityBase obj);
//SYMMETRIC SYNC //DSG SYNC
public delegate void ObjectCreateBySyncDelegate(EntityBase obj); public delegate void ObjectCreateBySyncDelegate(EntityBase obj);
//end of SYMMETRIC SYNC //end of DSG SYNC
/// <summary> /// <summary>
@ -69,9 +69,9 @@ namespace OpenSim.Region.Framework.Scenes
public event ObjectCreateDelegate OnObjectCreate; public event ObjectCreateDelegate OnObjectCreate;
public event ObjectDeleteDelegate OnObjectRemove; public event ObjectDeleteDelegate OnObjectRemove;
//SYMMETRIC SYNC //DSG SYNC
public event ObjectCreateBySyncDelegate OnObjectCreateBySync; public event ObjectCreateBySyncDelegate OnObjectCreateBySync;
//end of SYMMETRIC SYNC //end of DSG SYNC
#endregion #endregion
@ -288,7 +288,7 @@ namespace OpenSim.Region.Framework.Scenes
sceneObject.HasGroupChanged = true; sceneObject.HasGroupChanged = true;
} }
return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates); return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates, false);
} }
/// <summary> /// <summary>
@ -310,7 +310,7 @@ namespace OpenSim.Region.Framework.Scenes
if (attachToBackup) if (attachToBackup)
sceneObject.HasGroupChanged = true; sceneObject.HasGroupChanged = true;
return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates); return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates, false);
} }
/// <summary> /// <summary>
@ -344,7 +344,7 @@ namespace OpenSim.Region.Framework.Scenes
sceneObject.Velocity = vel; sceneObject.Velocity = vel;
} }
//SYMMETRIC SYNC //DSG SYNC
//Moving AddNewSceneObject to the end of this function, so that //Moving AddNewSceneObject to the end of this function, so that
//all object properties are set when AddNewSceneObject is called. //all object properties are set when AddNewSceneObject is called.
AddNewSceneObject(sceneObject, true, false); AddNewSceneObject(sceneObject, true, false);
@ -368,7 +368,7 @@ namespace OpenSim.Region.Framework.Scenes
/// <returns> /// <returns>
/// true if the object was added, false if an object with the same uuid was already in the scene /// true if the object was added, false if an object with the same uuid was already in the scene
/// </returns> /// </returns>
protected bool AddSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates) protected bool AddSceneObject(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates, bool addedByDelink)
{ {
if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero) if (sceneObject == null || sceneObject.RootPart == null || sceneObject.RootPart.UUID == UUID.Zero)
return false; return false;
@ -429,16 +429,15 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectGroupsByLocalPartID[part.LocalId] = sceneObject; SceneObjectGroupsByLocalPartID[part.LocalId] = sceneObject;
} }
//DSG SYNC: sending NewObject event, and sending it before calling ScheduleGroupForFullUpdate
if (m_parentScene.RegionSyncModule != null)
{
//m_parentScene.RegionSyncModule.SendNewObject(sceneObject);
m_parentScene.RegionSyncModule.SyncNewObject(sceneObject);
}
if (sendClientUpdates) if (sendClientUpdates)
//sceneObject.ScheduleGroupForFullUpdate(); //sceneObject.ScheduleGroupForFullUpdate();
sceneObject.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.None }); sceneObject.ScheduleGroupForFullUpdate(null);
//DSG SYNC: sending NewObject event, and sending it before calling ScheduleGroupForFullUpdate
if (m_parentScene.RegionSyncModule != null && !addedByDelink)
{
m_parentScene.RegionSyncModule.SyncNewObject(sceneObject);
}
return true; return true;
} }
@ -1667,7 +1666,7 @@ namespace OpenSim.Region.Framework.Scenes
List<SceneObjectPart> rootParts = new List<SceneObjectPart>(); List<SceneObjectPart> rootParts = new List<SceneObjectPart>();
List<SceneObjectGroup> affectedGroups = new List<SceneObjectGroup>(); List<SceneObjectGroup> affectedGroups = new List<SceneObjectGroup>();
//SYMMETRIC SYNC, record the new object groups after the delink operation //DSG SYNC, record the new object groups after the delink operation
List<SceneObjectGroup> beforeDelinkGroups = new List<SceneObjectGroup>(); List<SceneObjectGroup> beforeDelinkGroups = new List<SceneObjectGroup>();
List<SceneObjectGroup> afterDelinkGroups = new List<SceneObjectGroup>(); List<SceneObjectGroup> afterDelinkGroups = new List<SceneObjectGroup>();
@ -1688,7 +1687,7 @@ namespace OpenSim.Region.Framework.Scenes
if (!affectedGroups.Contains(group)) if (!affectedGroups.Contains(group))
{ {
affectedGroups.Add(group); affectedGroups.Add(group);
//SYMMETRIC SYNC //DSG SYNC
beforeDelinkGroups.Add(group); beforeDelinkGroups.Add(group);
} }
} }
@ -1705,7 +1704,7 @@ namespace OpenSim.Region.Framework.Scenes
// handled further. Do the honors here. // handled further. Do the honors here.
child.ParentGroup.HasGroupChanged = true; child.ParentGroup.HasGroupChanged = true;
//SYMMETRIC SYNC, delay ScheduleGroupForFullUpdate till the end of the delink operations. //DSG SYNC, delay ScheduleGroupForFullUpdate till the end of the delink operations.
//child.ParentGroup.ScheduleGroupForFullUpdate(); //child.ParentGroup.ScheduleGroupForFullUpdate();
afterDelinkGroups.Add(child.ParentGroup); afterDelinkGroups.Add(child.ParentGroup);
} }
@ -1777,7 +1776,7 @@ namespace OpenSim.Region.Framework.Scenes
g.TriggerScriptChangedEvent(Changed.LINK); g.TriggerScriptChangedEvent(Changed.LINK);
g.HasGroupChanged = true; // Persist g.HasGroupChanged = true; // Persist
//SYMMETRIC SYNC, delay ScheduleGroupForFullUpdate till the end of the delink operations. //DSG SYNC, delay ScheduleGroupForFullUpdate till the end of the delink operations.
//g.ScheduleGroupForFullUpdate(); //g.ScheduleGroupForFullUpdate();
afterDelinkGroups.Add(g); afterDelinkGroups.Add(g);
} }
@ -2053,7 +2052,7 @@ namespace OpenSim.Region.Framework.Scenes
#endregion // REGION SYNC #endregion // REGION SYNC
#region SYMMETRIC SYNC #region DSG SYNC
public Scene.ObjectUpdateResult UpdateObjectBySynchronization(SceneObjectGroup updatedSog) public Scene.ObjectUpdateResult UpdateObjectBySynchronization(SceneObjectGroup updatedSog)
{ {
@ -2246,7 +2245,7 @@ namespace OpenSim.Region.Framework.Scenes
// Make sure no child prim is set for sale // Make sure no child prim is set for sale
// So that, on delink, no prims are unwittingly // So that, on delink, no prims are unwittingly
// left for sale and sold off // left for sale and sold off
//SYMMETRIC SYNC: need to copy value w/o trigger UpdateBucketSyncInfo //DSG SYNC: need to copy value w/o trigger UpdateBucketSyncInfo
//child.RootPart.ObjectSaleType = 0; //child.RootPart.ObjectSaleType = 0;
//child.RootPart.SalePrice = 10; //child.RootPart.SalePrice = 10;
//child.RootPart.SetObjectSaleType(0); //child.RootPart.SetObjectSaleType(0);
@ -2407,6 +2406,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
else else
{ {
//No longer calling update prim's properties here, caller will do that
//localAfterGroup.UpdateObjectGroupBySync(incomingAfterDelinkGroupsDictionary[localAfterGroup.UUID]); //localAfterGroup.UpdateObjectGroupBySync(incomingAfterDelinkGroupsDictionary[localAfterGroup.UUID]);
} }
} }
@ -2556,6 +2556,17 @@ namespace OpenSim.Region.Framework.Scenes
return localPart.UpdateBucketProperties(bucketName, updatedPart, bucketSyncInfo); return localPart.UpdateBucketProperties(bucketName, updatedPart, bucketSyncInfo);
} }
#endregion //SYMMETRIC SYNC protected internal bool AddNewSceneObjectByDelink(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
{
// Ensure that we persist this new scene object if it's not an
// attachment
if (attachToBackup)
sceneObject.HasGroupChanged = true;
bool addedByDelink = true;
return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates, addedByDelink);
}
#endregion //DSG SYNC
} }
} }

View File

@ -498,7 +498,7 @@ namespace OpenSim.Region.Framework.Scenes
#region Constructors #region Constructors
//SYMMETRIC SYNC //DSG SYNC
public SceneObjectGroup(SceneObjectPart part, bool newGroupBySync) public SceneObjectGroup(SceneObjectPart part, bool newGroupBySync)
{ {
if (!newGroupBySync) if (!newGroupBySync)
@ -627,7 +627,7 @@ namespace OpenSim.Region.Framework.Scenes
// for the same object with very different properties. The caller must schedule the update. // for the same object with very different properties. The caller must schedule the update.
//ScheduleGroupForFullUpdate(); //ScheduleGroupForFullUpdate();
//SYMMETRIC SYNC //DSG SYNC
if (m_scene.RegionSyncModule != null) if (m_scene.RegionSyncModule != null)
{ {
foreach (SceneObjectPart part in Parts) foreach (SceneObjectPart part in Parts)
@ -1212,7 +1212,7 @@ namespace OpenSim.Region.Framework.Scenes
{ {
SceneObjectPart part = parts[i]; SceneObjectPart part = parts[i];
//SYMMETRIC SYNC: object remove should be handled through RegionSyncModule //DSG SYNC: object remove should be handled through RegionSyncModule
/* /*
// REGION SYNC // REGION SYNC
if (Scene.IsSyncedServer()) if (Scene.IsSyncedServer())
@ -1221,7 +1221,7 @@ namespace OpenSim.Region.Framework.Scenes
//return; //return;
} }
* */ * */
//end of SYMMETRIC SYNC //end of DSG SYNC
Scene.ForEachScenePresence(delegate(ScenePresence avatar) Scene.ForEachScenePresence(delegate(ScenePresence avatar)
{ {
@ -1366,13 +1366,13 @@ namespace OpenSim.Region.Framework.Scenes
return; return;
} }
//SYMMETRIC SYNC //DSG SYNC
//if we are doing sync across different sync nodes, and are not told to persist the state, don't do anything (only persistence actor will do it) //if we are doing sync across different sync nodes, and are not told to persist the state, don't do anything (only persistence actor will do it)
if (m_scene.RegionSyncModule != null && !ToPersistObjectState) if (m_scene.RegionSyncModule != null && !ToPersistObjectState)
{ {
return; return;
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
// Since this is the top of the section of call stack for backing up a particular scene object, don't let // Since this is the top of the section of call stack for backing up a particular scene object, don't let
// any exception propogate upwards. // any exception propogate upwards.
@ -2200,11 +2200,11 @@ namespace OpenSim.Region.Framework.Scenes
//HasGroupChanged = true; //HasGroupChanged = true;
//ScheduleGroupForFullUpdate(); //ScheduleGroupForFullUpdate();
//SYMMETRIC SYNC //DSG SYNC
//The DeleteObject message will be enqueued to be sent out by another thread, and the call will return quickly. //The DeleteObject message will be enqueued to be sent out by another thread, and the call will return quickly.
//if (m_scene.RegionSyncModule != null) //if (m_scene.RegionSyncModule != null)
// m_scene.RegionSyncModule.SendDeleteObject(objectGroup, true); // m_scene.RegionSyncModule.SendDeleteObject(objectGroup, true);
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
@ -2307,7 +2307,11 @@ namespace OpenSim.Region.Framework.Scenes
SceneObjectGroup objectGroup = new SceneObjectGroup(linkPart); SceneObjectGroup objectGroup = new SceneObjectGroup(linkPart);
m_scene.AddNewSceneObject(objectGroup, true); //m_scene.AddNewSceneObject(objectGroup, true);
//DSG SYNC: calling AddNewSceneObjectByDelink, so that later on we know
//the "new" object is added by delink operation, no need to send sync
//message of NewObject
m_scene.AddNewSceneObjectByDelink(objectGroup, true, true);
if (sendEvents) if (sendEvents)
linkPart.TriggerScriptChangedEvent(Changed.LINK); linkPart.TriggerScriptChangedEvent(Changed.LINK);
@ -3556,7 +3560,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
#endregion #endregion
#region SYMMETRIC SYNC #region DSG SYNC
private bool m_toPersistObjectState = false; private bool m_toPersistObjectState = false;
public bool ToPersistObjectState public bool ToPersistObjectState
@ -3779,14 +3783,11 @@ namespace OpenSim.Region.Framework.Scenes
} }
//Similar actions with DelinkFromGroup, except that m_scene.AddNewSceneObjectBySync is called //Similar actions with DelinkFromGroup, except that m_scene.AddNewSceneObjectBySync is called
//!!!!!!!!!!!!!!!!!!NOTE!!!!!!!!!!!!!!!
//All SOP properties below is set through calling SetXXX(value) instead of by "XXX=value", as such a value is being changed due to sync (
//i.e. triggered by remote operation instead of by local operation
public SceneObjectGroup DelinkFromGroupBySync(SceneObjectPart delinkPart, bool sendEvents) public SceneObjectGroup DelinkFromGroupBySync(SceneObjectPart delinkPart, bool sendEvents)
{ {
// m_log.DebugFormat( m_log.DebugFormat(
// "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}", "[SCENE OBJECT GROUP]: Delinking part {0}, {1}, {4} from group with root part {2}, {3}",
// linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID); delinkPart.Name, delinkPart.UUID, RootPart.Name, RootPart.UUID, delinkPart.LocalId);
SceneObjectPartBase linkPart = (SceneObjectPartBase)delinkPart; SceneObjectPartBase linkPart = (SceneObjectPartBase)delinkPart;
linkPart.ClearUndoState(); linkPart.ClearUndoState();
@ -3803,9 +3804,7 @@ namespace OpenSim.Region.Framework.Scenes
if (parts.Length == 1 && RootPart != null) if (parts.Length == 1 && RootPart != null)
{ {
// Single prim left // Single prim left
//RootPart.LinkNum = 0; RootPart.LinkNum = 0;
//RootPart.SetProperty("LinkNum", 0);
((SceneObjectPartBase)RootPart).LinkNum = 0;
} }
else else
{ {
@ -3815,16 +3814,13 @@ namespace OpenSim.Region.Framework.Scenes
if (part.LinkNum > linkPart.LinkNum) if (part.LinkNum > linkPart.LinkNum)
{ {
part.LinkNum--; part.LinkNum--;
//int linkNum = part.LinkNum - 1;
//part.SetProperty("LinkNum", linkNum);
} }
} }
} }
} }
linkPart.ParentID = 0; //ParentID is a value set only locally and ignored in synchronization, so no need to call SetProperty to set its value linkPart.ParentID = 0; //ParentID is a value set only locally and ignored in synchronization, so no need to set its value
linkPart.LinkNum = 0; linkPart.LinkNum = 0;
//linkPart.SetParentID(0);
if (linkPart.PhysActor != null) if (linkPart.PhysActor != null)
{ {
@ -3843,15 +3839,6 @@ namespace OpenSim.Region.Framework.Scenes
linkPart.OffsetPosition = new Vector3(0, 0, 0); linkPart.OffsetPosition = new Vector3(0, 0, 0);
linkPart.RotationOffset = worldRot; linkPart.RotationOffset = worldRot;
//linkPart.SetOffsetPosition(new Vector3(axPos.X, axPos.Y, axPos.Z));
//linkPart.SetGroupPosition(AbsolutePosition + linkPart.OffsetPosition);
//linkPart.SetOffsetPosition(new Vector3(0, 0, 0));
//linkPart.SetRotationOffset(worldRot);
//linkPart.SetProperty("OffsetPosition", new Vector3(axPos.X, axPos.Y, axPos.Z));
//linkPart.SetProperty("GroupPosition", AbsolutePosition + linkPart.OffsetPosition);
//linkPart.SetProperty("OffsetPosition", new Vector3(0, 0, 0));
//linkPart.SetProperty("RotationOffset", worldRot);
//SceneObjectGroup objectGroup = new SceneObjectGroup(linkPart); //SceneObjectGroup objectGroup = new SceneObjectGroup(linkPart);
bool newGroupBySync = true; bool newGroupBySync = true;
SceneObjectGroup objectGroup = new SceneObjectGroup(delinkPart, newGroupBySync); SceneObjectGroup objectGroup = new SceneObjectGroup(delinkPart, newGroupBySync);

View File

@ -129,7 +129,7 @@ namespace OpenSim.Region.Framework.Scenes
#region Fields #region Fields
//SYMMETRIC SYNC //DSG SYNC
//public bool AllowedDrop; //public bool AllowedDrop;
private bool m_allowedDrop; private bool m_allowedDrop;
public bool AllowedDrop public bool AllowedDrop
@ -2933,7 +2933,7 @@ namespace OpenSim.Region.Framework.Scenes
/// <summary> /// <summary>
/// Schedules this prim for a full update /// Schedules this prim for a full update
/// </summary> /// </summary>
//public void ScheduleFullUpdate() :: SYMMETRIC SYNC: changed the interface so that we can identify which property triggers calling this function //public void ScheduleFullUpdate() :: DSG SYNC: changed the interface so that we can identify which property triggers calling this function
public virtual void ScheduleFullUpdate(List<SceneObjectPartSyncProperties> updatedProperties) public virtual void ScheduleFullUpdate(List<SceneObjectPartSyncProperties> updatedProperties)
{ {
// m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId); // m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId);
@ -3202,7 +3202,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
ClearUpdateSchedule(); ClearUpdateSchedule();
//SYMMETRIC SYNC //DSG SYNC
//KittyL: 04/06/2011, No longer calling QueueSceneObjectPartForUpdate //KittyL: 04/06/2011, No longer calling QueueSceneObjectPartForUpdate
//from here. Local updates are now recorded by calling IRegionSyncModule.ProcessAndEnqueuePrimUpdatesByLocal(). //from here. Local updates are now recorded by calling IRegionSyncModule.ProcessAndEnqueuePrimUpdatesByLocal().
/* /*
@ -3211,7 +3211,7 @@ namespace OpenSim.Region.Framework.Scenes
m_parentGroup.Scene.RegionSyncModule.QueueSceneObjectPartForUpdate((SceneObjectPart)this); m_parentGroup.Scene.RegionSyncModule.QueueSceneObjectPartForUpdate((SceneObjectPart)this);
} }
* */ * */
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
/// <summary> /// <summary>
@ -4983,7 +4983,7 @@ namespace OpenSim.Region.Framework.Scenes
#endregion #endregion
#region SYMMETRIC SYNC #region DSG SYNC
//Time stamp for the most recent update on this prim. We only have one time-stamp per prim for now. //Time stamp for the most recent update on this prim. We only have one time-stamp per prim for now.
//The goal is to evetually have time-stamp per property bucket for each prim. //The goal is to evetually have time-stamp per property bucket for each prim.
@ -4998,7 +4998,7 @@ namespace OpenSim.Region.Framework.Scenes
} }
//SYMMETRIC SYNC //DSG SYNC
//Information for concurrency control of one bucket of prim proproperties. //Information for concurrency control of one bucket of prim proproperties.
public class BucketSyncInfo public class BucketSyncInfo
@ -6142,5 +6142,5 @@ namespace OpenSim.Region.Framework.Scenes
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
} }

View File

@ -545,7 +545,7 @@ namespace OpenSim.Region.Framework.Scenes
HasInventoryChanged = true; HasInventoryChanged = true;
m_part.ParentGroup.HasGroupChanged = true; m_part.ParentGroup.HasGroupChanged = true;
//SYMMETRIC SYNC: add ScheduleFullUpdate to enable synchronization across actors //DSG SYNC: add ScheduleFullUpdate to enable synchronization across actors
m_part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.TaskInventory, SceneObjectPartSyncProperties.InventorySerial}); m_part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.TaskInventory, SceneObjectPartSyncProperties.InventorySerial});
} }
@ -1180,7 +1180,7 @@ namespace OpenSim.Region.Framework.Scenes
#endregion REGION SYNC #endregion REGION SYNC
} }
#region SYMMETRIC SYNC #region DSG SYNC
public class SceneObjectPartInventory : SceneObjectPartInventoryBase public class SceneObjectPartInventory : SceneObjectPartInventoryBase
{ {
private SceneObjectPart m_part; private SceneObjectPart m_part;

View File

@ -215,7 +215,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
sceneObject.AddPart(part); sceneObject.AddPart(part);
//SYMMETRIC SYNC //DSG SYNC
//KittyL: 12/27/2010, added ActorID for symmetric synch model //KittyL: 12/27/2010, added ActorID for symmetric synch model
//part.SetLastUpdateActorID(); //part.SetLastUpdateActorID();
@ -329,7 +329,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
m_SOPXmlProcessors.Add("TextureAnimation", ProcessTextureAnimation); m_SOPXmlProcessors.Add("TextureAnimation", ProcessTextureAnimation);
m_SOPXmlProcessors.Add("ParticleSystem", ProcessParticleSystem); m_SOPXmlProcessors.Add("ParticleSystem", ProcessParticleSystem);
//SYMMETRIC SYNC //DSG SYNC
m_SOPXmlProcessors.Add("LocalFlags", ProcessLocalFlags); m_SOPXmlProcessors.Add("LocalFlags", ProcessLocalFlags);
//m_SOPXmlProcessors.Add("LastUpdateTimeStamp", ProcessUpdateTimeStamp); //m_SOPXmlProcessors.Add("LastUpdateTimeStamp", ProcessUpdateTimeStamp);
//m_SOPXmlProcessors.Add("LastUpdateActorID", ProcessLastUpdateActorID); //m_SOPXmlProcessors.Add("LastUpdateActorID", ProcessLastUpdateActorID);
@ -340,7 +340,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
m_SOPXmlProcessors.Add("AggregateScriptEvents", ProcessAggregateScriptEvents); m_SOPXmlProcessors.Add("AggregateScriptEvents", ProcessAggregateScriptEvents);
m_SOPXmlProcessors.Add("BucketSyncInfoList", ProcessBucketSyncInfo); m_SOPXmlProcessors.Add("BucketSyncInfoList", ProcessBucketSyncInfo);
//end of SYMMETRIC SYNC //end of DSG SYNC
#endregion #endregion
@ -425,7 +425,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
} }
#region SOPXmlProcessors #region SOPXmlProcessors
//SYMMETRIC SYNC NOTE: -- assignments in de-serialization should directly set the values w/o triggering SceneObjectPart.UpdateBucketSyncInfo; //DSG SYNC NOTE: -- assignments in de-serialization should directly set the values w/o triggering SceneObjectPart.UpdateBucketSyncInfo;
private static void ProcessAllowedDrop(SceneObjectPart obj, XmlTextReader reader) private static void ProcessAllowedDrop(SceneObjectPart obj, XmlTextReader reader)
{ {
obj.AllowedDrop = Util.ReadBoolean(reader); obj.AllowedDrop = Util.ReadBoolean(reader);
@ -706,7 +706,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
obj.ParticleSystem = Convert.FromBase64String(reader.ReadElementContentAsString("ParticleSystem", String.Empty)); obj.ParticleSystem = Convert.FromBase64String(reader.ReadElementContentAsString("ParticleSystem", String.Empty));
} }
//SYMMETRIC SYNC //DSG SYNC
/* /*
private static void ProcessUpdateTimeStamp(SceneObjectPart obj, XmlTextReader reader) private static void ProcessUpdateTimeStamp(SceneObjectPart obj, XmlTextReader reader)
{ {
@ -799,7 +799,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
reader.ReadEndElement(); // BucketSyncInfoList reader.ReadEndElement(); // BucketSyncInfoList
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
#endregion #endregion
@ -1271,10 +1271,10 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
writer.WriteElementString("GroupMask", sop.GroupMask.ToString()); writer.WriteElementString("GroupMask", sop.GroupMask.ToString());
writer.WriteElementString("EveryoneMask", sop.EveryoneMask.ToString()); writer.WriteElementString("EveryoneMask", sop.EveryoneMask.ToString());
writer.WriteElementString("NextOwnerMask", sop.NextOwnerMask.ToString()); writer.WriteElementString("NextOwnerMask", sop.NextOwnerMask.ToString());
//SYMMETRIC SYNC: also serialize SceneObjectPart:LocalFlags, so that it can be propogated across actors //DSG SYNC: also serialize SceneObjectPart:LocalFlags, so that it can be propogated across actors
WriteFlags(writer, "Flags", sop.Flags.ToString(), options); WriteFlags(writer, "Flags", sop.Flags.ToString(), options);
WriteFlags(writer, "LocalFlags", sop.LocalFlags.ToString(), options); WriteFlags(writer, "LocalFlags", sop.LocalFlags.ToString(), options);
//end SYMMETRIC SYNC //end DSG SYNC
WriteUUID(writer, "CollisionSound", sop.CollisionSound, options); WriteUUID(writer, "CollisionSound", sop.CollisionSound, options);
writer.WriteElementString("CollisionSoundVolume", sop.CollisionSoundVolume.ToString()); writer.WriteElementString("CollisionSoundVolume", sop.CollisionSoundVolume.ToString());
if (sop.MediaUrl != null) if (sop.MediaUrl != null)
@ -1282,7 +1282,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
WriteBytes(writer, "TextureAnimation", sop.TextureAnimation); WriteBytes(writer, "TextureAnimation", sop.TextureAnimation);
WriteBytes(writer, "ParticleSystem", sop.ParticleSystem); WriteBytes(writer, "ParticleSystem", sop.ParticleSystem);
//SYMMETRIC SYNC //DSG SYNC
//These properties are only meaningful for synchronization purpose. For saving oar files, they are not necessary. //These properties are only meaningful for synchronization purpose. For saving oar files, they are not necessary.
//We may remove these if later we use a different method to encode object properties for synchronization. //We may remove these if later we use a different method to encode object properties for synchronization.
WriteUUID(writer, "AttachedAvatar", sop.AttachedAvatar, options); WriteUUID(writer, "AttachedAvatar", sop.AttachedAvatar, options);
@ -1291,12 +1291,12 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
//writer.WriteElementString("IsAttachment", sop.IsAttachment.ToString().ToLower()); //IsAttachment is written last, so that on deserialization, it will be deserialized later than other Attachment properties //writer.WriteElementString("IsAttachment", sop.IsAttachment.ToString().ToLower()); //IsAttachment is written last, so that on deserialization, it will be deserialized later than other Attachment properties
WriteFlags(writer, "AggregateScriptEvents", sop.AggregateScriptEvents.ToString(), options); WriteFlags(writer, "AggregateScriptEvents", sop.AggregateScriptEvents.ToString(), options);
WriteBucketSyncInfo(writer, sop.BucketSyncInfoList); WriteBucketSyncInfo(writer, sop.BucketSyncInfoList);
//end of SYMMETRIC SYNC //end of DSG SYNC
writer.WriteEndElement(); writer.WriteEndElement();
} }
//SYMMETRIC SYNC //DSG SYNC
public static void WriteBucketSyncInfo(XmlTextWriter writer, Dictionary<string, BucketSyncInfo> bucketSyncInfoList) public static void WriteBucketSyncInfo(XmlTextWriter writer, Dictionary<string, BucketSyncInfo> bucketSyncInfoList)
{ {
if (bucketSyncInfoList!=null || bucketSyncInfoList.Count > 0) // otherwise skip this if (bucketSyncInfoList!=null || bucketSyncInfoList.Count > 0) // otherwise skip this
@ -1318,7 +1318,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
} }
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
static void WriteUUID(XmlTextWriter writer, string name, UUID id, Dictionary<string, object> options) static void WriteUUID(XmlTextWriter writer, string name, UUID id, Dictionary<string, object> options)
{ {

View File

@ -94,7 +94,7 @@ namespace OpenSim.Region.Framework.Scenes
if (Scale != Vector3.Zero) if (Scale != Vector3.Zero)
part.Resize(Scale); part.Resize(Scale);
//part.ParentGroup.ScheduleGroupForTerseUpdate(); //part.ParentGroup.ScheduleGroupForTerseUpdate();
//SYMMETRIC SYNC //DSG SYNC
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>(); List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>();
updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset); updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset);
if (Position != Vector3.Zero) if (Position != Vector3.Zero)
@ -110,7 +110,7 @@ namespace OpenSim.Region.Framework.Scenes
part.UpdateRotation(Rotation); part.UpdateRotation(Rotation);
if (Scale != Vector3.Zero) if (Scale != Vector3.Zero)
part.Resize(Scale); //part.ScheduleTerseUpdate(); part.Resize(Scale); //part.ScheduleTerseUpdate();
//SYMMETRIC SYNC //DSG SYNC
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>(); List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>();
updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset); updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset);
if (Position != Vector3.Zero) if (Position != Vector3.Zero)
@ -138,7 +138,7 @@ namespace OpenSim.Region.Framework.Scenes
if (Scale != Vector3.Zero) if (Scale != Vector3.Zero)
part.Resize(Scale); part.Resize(Scale);
//part.ParentGroup.ScheduleGroupForTerseUpdate(); //part.ParentGroup.ScheduleGroupForTerseUpdate();
//SYMMETRIC SYNC //DSG SYNC
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>(); List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>();
if (Rotation != Quaternion.Identity) if (Rotation != Quaternion.Identity)
updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset); updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset);
@ -157,7 +157,7 @@ namespace OpenSim.Region.Framework.Scenes
if (Scale != Vector3.Zero) if (Scale != Vector3.Zero)
part.Resize(Scale); part.Resize(Scale);
//part.ScheduleTerseUpdate(); //part.ScheduleTerseUpdate();
//SYMMETRIC SYNC //DSG SYNC
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>(); List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>();
if (Rotation != Quaternion.Identity) if (Rotation != Quaternion.Identity)
updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset); updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset);

View File

@ -3615,7 +3615,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
parentPrim.RootPart.CreateSelected = true; parentPrim.RootPart.CreateSelected = true;
parentPrim.HasGroupChanged = true; parentPrim.HasGroupChanged = true;
//parentPrim.ScheduleGroupForFullUpdate(); //parentPrim.ScheduleGroupForFullUpdate();
//SYMMETRIC SYNC //DSG SYNC
//Schedule a LinkObject message for synchronization purpose. This will lead to enqueue a LinkObject message in SyncConnector's outgoingQueue, //Schedule a LinkObject message for synchronization purpose. This will lead to enqueue a LinkObject message in SyncConnector's outgoingQueue,
//so should return quickly. //so should return quickly.
if (World.RegionSyncModule != null) if (World.RegionSyncModule != null)
@ -3625,7 +3625,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
World.RegionSyncModule.SendLinkObject(parentPrim, parentPrim.RootPart, children); World.RegionSyncModule.SendLinkObject(parentPrim, parentPrim.RootPart, children);
} }
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); //SendLinkObject above will synchronize the link operation, no need to taint updates here m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); //SendLinkObject above will synchronize the link operation, no need to taint updates here
//end of SYMMETRIC SYNC //end of DSG SYNC
if (client != null) if (client != null)
parentPrim.GetProperties(client); parentPrim.GetProperties(client);
@ -3683,11 +3683,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (linknum == ScriptBaseClass.LINK_ROOT) if (linknum == ScriptBaseClass.LINK_ROOT)
{ {
//SYMMETRIC SYNC //DSG SYNC
List<SceneObjectGroup> beforeDelinkGroups = new List<SceneObjectGroup>(); List<SceneObjectGroup> beforeDelinkGroups = new List<SceneObjectGroup>();
beforeDelinkGroups.Add(parentPrim); beforeDelinkGroups.Add(parentPrim);
List<SceneObjectGroup> afterDelinkGroups = new List<SceneObjectGroup>(); List<SceneObjectGroup> afterDelinkGroups = new List<SceneObjectGroup>();
//end of SYMMETRIC SYNC //end of DSG SYNC
// Restructuring Multiple Prims. // Restructuring Multiple Prims.
List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Parts); List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Parts);
@ -3695,19 +3695,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
foreach (SceneObjectPart part in parts) foreach (SceneObjectPart part in parts)
{ {
parentPrim.DelinkFromGroup(part.LocalId, true); parentPrim.DelinkFromGroup(part.LocalId, true);
//SYMMETRIC SYNC //DSG SYNC
afterDelinkGroups.Add(part.ParentGroup); afterDelinkGroups.Add(part.ParentGroup);
} }
parentPrim.HasGroupChanged = true; parentPrim.HasGroupChanged = true;
//parentPrim.ScheduleGroupForFullUpdate(); //parentPrim.ScheduleGroupForFullUpdate();
//SYMMETRIC SYNC //DSG SYNC
//Send out DelinkObject message to other actors to sychronize their object list //Send out DelinkObject message to other actors to sychronize their object list
if (World.RegionSyncModule != null) if (World.RegionSyncModule != null)
{ {
World.RegionSyncModule.SendDeLinkObject(parts, beforeDelinkGroups, afterDelinkGroups); World.RegionSyncModule.SendDeLinkObject(parts, beforeDelinkGroups, afterDelinkGroups);
} }
parentPrim.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); parentPrim.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None});
//end of SYMMETRIC SYNC //end of DSG SYNC
parentPrim.TriggerScriptChangedEvent(Changed.LINK); parentPrim.TriggerScriptChangedEvent(Changed.LINK);
if (parts.Count > 0) if (parts.Count > 0)
@ -3721,13 +3721,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
} }
newRoot.ParentGroup.HasGroupChanged = true; newRoot.ParentGroup.HasGroupChanged = true;
//newRoot.ParentGroup.ScheduleGroupForFullUpdate(); //newRoot.ParentGroup.ScheduleGroupForFullUpdate();
//SYMMETRIC SYNC //DSG SYNC
if (World.RegionSyncModule != null) if (World.RegionSyncModule != null)
{ {
World.RegionSyncModule.SendLinkObject(newRoot.ParentGroup, newRoot, new List<SceneObjectPart>(newRoot.ParentGroup.Parts)); World.RegionSyncModule.SendLinkObject(newRoot.ParentGroup, newRoot, new List<SceneObjectPart>(newRoot.ParentGroup.Parts));
} }
newRoot.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); newRoot.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None});
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
} }
@ -3739,7 +3739,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
parentPrim.DelinkFromGroup(childPrim.LocalId, true); parentPrim.DelinkFromGroup(childPrim.LocalId, true);
parentPrim.HasGroupChanged = true; parentPrim.HasGroupChanged = true;
//parentPrim.ScheduleGroupForFullUpdate(); //parentPrim.ScheduleGroupForFullUpdate();
//SYMMETRIC SYNC //DSG SYNC
//Send out DelinkObject message to other actors to sychronize their object list //Send out DelinkObject message to other actors to sychronize their object list
if (World.RegionSyncModule != null) if (World.RegionSyncModule != null)
{ {
@ -3749,7 +3749,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
afterDelinkGroups.Add(childPrim.ParentGroup); afterDelinkGroups.Add(childPrim.ParentGroup);
World.RegionSyncModule.SendDeLinkObject(new List<SceneObjectPart>(parentPrim.Parts), beforeDelinkGroups, afterDelinkGroups); World.RegionSyncModule.SendDeLinkObject(new List<SceneObjectPart>(parentPrim.Parts), beforeDelinkGroups, afterDelinkGroups);
} }
//end of SYMMETRIC SYNC //end of DSG SYNC
parentPrim.TriggerScriptChangedEvent(Changed.LINK); parentPrim.TriggerScriptChangedEvent(Changed.LINK);
} }
@ -3762,12 +3762,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
if (parentPrim.RootPart.AttachmentPoint != 0) if (parentPrim.RootPart.AttachmentPoint != 0)
return; // Fail silently if attached return; // Fail silently if attached
//SYMMETRIC SYNC //DSG SYNC
List<SceneObjectGroup> beforeDelinkGroups = new List<SceneObjectGroup>(); List<SceneObjectGroup> beforeDelinkGroups = new List<SceneObjectGroup>();
beforeDelinkGroups.Add(parentPrim); beforeDelinkGroups.Add(parentPrim);
List<SceneObjectGroup> afterDelinkGroups = new List<SceneObjectGroup>(); List<SceneObjectGroup> afterDelinkGroups = new List<SceneObjectGroup>();
SceneObjectPart rootPart = parentPrim.RootPart; SceneObjectPart rootPart = parentPrim.RootPart;
//end of SYMMETRIC SYNC //end of DSG SYNC
List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Parts); List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Parts);
parts.Remove(parentPrim.RootPart); parts.Remove(parentPrim.RootPart);
@ -3776,7 +3776,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
{ {
parentPrim.DelinkFromGroup(part.LocalId, true); parentPrim.DelinkFromGroup(part.LocalId, true);
parentPrim.TriggerScriptChangedEvent(Changed.LINK); parentPrim.TriggerScriptChangedEvent(Changed.LINK);
//SYMMETRIC SYNC //DSG SYNC
afterDelinkGroups.Add(part.ParentGroup); afterDelinkGroups.Add(part.ParentGroup);
} }
parentPrim.HasGroupChanged = true; parentPrim.HasGroupChanged = true;
@ -3789,7 +3789,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
World.RegionSyncModule.SendDeLinkObject(parts, beforeDelinkGroups, afterDelinkGroups); World.RegionSyncModule.SendDeLinkObject(parts, beforeDelinkGroups, afterDelinkGroups);
} }
parentPrim.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); parentPrim.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None});
//end of SYMMETRIC SYNC //end of DSG SYNC
} }
public LSL_String llGetLinkKey(int linknum) public LSL_String llGetLinkKey(int linknum)