Merge branch 'dev_perPropertyTS' into dev
Conflicts: OpenSim/Region/CoreModules/Framework/InventoryAccess/InventoryAccessModule.csdsg
commit
cd70c3ff56
|
@ -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.
|
||||||
|
|
||||||
|
@ -694,7 +694,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; }
|
||||||
|
@ -731,7 +731,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)
|
||||||
{
|
{
|
||||||
|
@ -886,7 +886,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
|
||||||
|
@ -911,7 +911,7 @@ namespace OpenSim.Framework
|
||||||
m_quarkLocY = Convert.ToUInt32(quarkLocElements[1]);
|
m_quarkLocY = Convert.ToUInt32(quarkLocElements[1]);
|
||||||
|
|
||||||
|
|
||||||
// end of SYMMETRIC SYNC
|
// end of DSG SYNC
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -612,7 +612,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Attachments
|
||||||
|
|
||||||
so.IsSelected = false; // fudge....
|
so.IsSelected = false; // fudge....
|
||||||
//so.ScheduleGroupForFullUpdate();
|
//so.ScheduleGroupForFullUpdate();
|
||||||
so.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.FullUpdate}); //just force it to sychronize all properties
|
so.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate}); //just force it to sychronize all properties
|
||||||
}
|
}
|
||||||
|
|
||||||
// In case it is later dropped again, don't let
|
// In case it is later dropped again, don't let
|
||||||
|
|
|
@ -355,7 +355,7 @@ namespace OpenSim.Region.CoreModules.Avatar.ObjectCaps
|
||||||
}
|
}
|
||||||
|
|
||||||
//rootGroup.ScheduleGroupForFullUpdate();
|
//rootGroup.ScheduleGroupForFullUpdate();
|
||||||
rootGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.FullUpdate}); //seems like new object
|
rootGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate}); //seems like new object
|
||||||
pos = m_scene.GetNewRezLocation(Vector3.Zero, rootpos, UUID.Zero, rot, (byte)1, 1, true, allparts[0].GroupScale(), false);
|
pos = m_scene.GetNewRezLocation(Vector3.Zero, rootpos, UUID.Zero, rot, (byte)1, 1, true, allparts[0].GroupScale(), false);
|
||||||
|
|
||||||
responsedata["int_response_code"] = 200; //501; //410; //404;
|
responsedata["int_response_code"] = 200; //501; //410; //404;
|
||||||
|
|
|
@ -1603,7 +1603,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer
|
||||||
{
|
{
|
||||||
grp.OffsetForNewRegion(oldGroupPosition);
|
grp.OffsetForNewRegion(oldGroupPosition);
|
||||||
//grp.ScheduleGroupForFullUpdate();
|
//grp.ScheduleGroupForFullUpdate();
|
||||||
grp.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Position});
|
grp.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Position});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -770,7 +770,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
// can reflect that, if not, we set it's position in world.
|
// can reflect that, if not, we set it's position in world.
|
||||||
if (!attachment)
|
if (!attachment)
|
||||||
{
|
{
|
||||||
group.ScheduleGroupForFullUpdate(null);
|
group.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate});
|
||||||
|
|
||||||
group.AbsolutePosition = pos + veclist[i];
|
group.AbsolutePosition = pos + veclist[i];
|
||||||
}
|
}
|
||||||
|
@ -857,8 +857,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
// Fire on_rez
|
// Fire on_rez
|
||||||
group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 1);
|
group.CreateScriptInstances(0, true, m_Scene.DefaultScriptEngine, 1);
|
||||||
rootPart.ParentGroup.ResumeScripts();
|
rootPart.ParentGroup.ResumeScripts();
|
||||||
|
rootPart.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.FullUpdate });
|
||||||
rootPart.ScheduleFullUpdate(null);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -884,6 +883,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
protected void AddUserData(SceneObjectGroup sog)
|
protected void AddUserData(SceneObjectGroup sog)
|
||||||
{
|
{
|
||||||
UserManagementModule.AddUser(sog.RootPart.CreatorID, sog.RootPart.CreatorData);
|
UserManagementModule.AddUser(sog.RootPart.CreatorID, sog.RootPart.CreatorData);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -574,7 +574,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
primToUpdate.OffsetPosition = pos;
|
primToUpdate.OffsetPosition = pos;
|
||||||
parent.HasGroupChanged = true;
|
parent.HasGroupChanged = true;
|
||||||
//parent.ScheduleGroupForTerseUpdate();
|
//parent.ScheduleGroupForTerseUpdate();
|
||||||
parent.ScheduleGroupForTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.OffsetPosition});
|
parent.ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.OffsetPosition});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -47,6 +47,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
// SIM <-> CM
|
// SIM <-> CM
|
||||||
Terrain,
|
Terrain,
|
||||||
NewObject, // objects
|
NewObject, // objects
|
||||||
|
UpdatedPrimProperties, //per property sync
|
||||||
UpdatedObject, // objects
|
UpdatedObject, // objects
|
||||||
UpdatedBucketProperties, //object properties in one bucket
|
UpdatedBucketProperties, //object properties in one bucket
|
||||||
RemovedObject, // objects
|
RemovedObject, // objects
|
||||||
|
|
|
@ -32,6 +32,12 @@ using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
{
|
{
|
||||||
|
public enum SyncConnectorState
|
||||||
|
{
|
||||||
|
Idle, //not connected
|
||||||
|
Initialization, //initializing local copy of Scene
|
||||||
|
Syncing, //done initialization, in normal process of syncing terrain, objects, etc
|
||||||
|
}
|
||||||
// For implementations, a lot was copied from RegionSyncClientView, especially the SendLoop/ReceiveLoop.
|
// For implementations, a lot was copied from RegionSyncClientView, especially the SendLoop/ReceiveLoop.
|
||||||
public class SyncConnector : ISyncStatistics
|
public class SyncConnector : ISyncStatistics
|
||||||
{
|
{
|
||||||
|
@ -53,11 +59,15 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
|
||||||
private long bytesIn=0;
|
private long bytesIn=0;
|
||||||
private long bytesOut=0;
|
private long bytesOut=0;
|
||||||
private DateTime lastStatTime;
|
private DateTime lastStatTime;
|
||||||
|
|
||||||
// A queue for outgoing traffic.
|
// A queue for outgoing traffic.
|
||||||
private BlockingUpdateQueue m_outQ = new BlockingUpdateQueue();
|
private BlockingUpdateQueue m_outQ = new BlockingUpdateQueue();
|
||||||
|
|
||||||
private RegionSyncModule m_regionSyncModule = null;
|
private RegionSyncModule m_regionSyncModule = null;
|
||||||
|
|
||||||
|
//members for keeping track of state of this connector
|
||||||
|
private SyncConnectorState m_syncState = SyncConnectorState.Idle;
|
||||||
|
|
||||||
// unique connector number across all regions
|
// unique connector number across all regions
|
||||||
private static int m_connectorNum = 0;
|
private static int m_connectorNum = 0;
|
||||||
public int ConnectorNum
|
public int ConnectorNum
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -252,7 +252,7 @@ namespace OpenSim.Region.CoreModules.World.Media.Moap
|
||||||
|
|
||||||
SetPartMediaFlags(part, face, me != null);
|
SetPartMediaFlags(part, face, me != null);
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
part.ScheduleFullUpdate(new List<SceneObjectPartProperties>() { SceneObjectPartProperties.MediaUrl, SceneObjectPartProperties.Shape});
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.MediaUrl, SceneObjectPartSyncProperties.Shape});
|
||||||
|
|
||||||
part.TriggerScriptChangedEvent(Changed.MEDIA);
|
part.TriggerScriptChangedEvent(Changed.MEDIA);
|
||||||
}
|
}
|
||||||
|
@ -459,7 +459,7 @@ namespace OpenSim.Region.CoreModules.World.Media.Moap
|
||||||
|
|
||||||
// Arguably, we could avoid sending a full update to the avatar that just changed the texture.
|
// Arguably, we could avoid sending a full update to the avatar that just changed the texture.
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
part.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Shape, SceneObjectPartProperties.MediaUrl});
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Shape, SceneObjectPartSyncProperties.MediaUrl});
|
||||||
|
|
||||||
part.TriggerScriptChangedEvent(Changed.MEDIA);
|
part.TriggerScriptChangedEvent(Changed.MEDIA);
|
||||||
|
|
||||||
|
@ -538,7 +538,7 @@ namespace OpenSim.Region.CoreModules.World.Media.Moap
|
||||||
UpdateMediaUrl(part, agentId);
|
UpdateMediaUrl(part, agentId);
|
||||||
|
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
part.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.MediaUrl});
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.MediaUrl});
|
||||||
|
|
||||||
part.TriggerScriptChangedEvent(Changed.MEDIA);
|
part.TriggerScriptChangedEvent(Changed.MEDIA);
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
|
||||||
part.TriggerScriptChangedEvent(Changed.OWNER);
|
part.TriggerScriptChangedEvent(Changed.OWNER);
|
||||||
group.ResumeScripts();
|
group.ResumeScripts();
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
part.ScheduleFullUpdate(new List<SceneObjectPartProperties>() { SceneObjectPartProperties.FullUpdate }); //quite some properties changed, let's just force all to be synchronized
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.FullUpdate }); //quite some properties changed, let's just force all to be synchronized
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
|
@ -584,14 +584,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);
|
||||||
|
@ -633,7 +633,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
|
||||||
{
|
{
|
||||||
|
@ -708,7 +708,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
|
||||||
|
@ -717,7 +717,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.
|
||||||
|
@ -729,7 +729,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);
|
||||||
}
|
}
|
||||||
|
@ -743,9 +743,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();
|
||||||
|
@ -774,14 +774,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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,9 +895,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
|
||||||
|
@ -939,9 +939,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
|
||||||
|
|
|
@ -52,31 +52,43 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
public interface IRegionSyncModule
|
public interface IRegionSyncModule
|
||||||
{
|
{
|
||||||
bool Active { get; } //if true, this RegionSyncModule is connected into the synchronization overlay
|
bool Active { get; } //if true, this RegionSyncModule is connected into the synchronization overlay
|
||||||
string ActorID { get; }
|
string ActorID { get; } //might be phased out soon
|
||||||
DSGActorTypes DSGActorType { get; set; }
|
string SyncID { get; }
|
||||||
|
//DSGActorTypes DSGActorType { get; set; }
|
||||||
bool IsSyncRelay { get; }
|
bool IsSyncRelay { get; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The mapping of a property (identified by its name) to the index of a bucket.
|
/// The mapping of a property (identified by its name) to the index of a bucket.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Dictionary<SceneObjectPartProperties, string> PrimPropertyBucketMap { get; }
|
Dictionary<SceneObjectPartSyncProperties, string> PrimPropertyBucketMap { get; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The text description of the properties in each bucket, e.g. "General", "Physics"
|
/// The text description of the properties in each bucket, e.g. "General", "Physics"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
List<string> PropertyBucketDescription { get; }
|
List<string> PropertyBucketDescription { get; }
|
||||||
|
|
||||||
//Enqueue updates for scene-objects and scene-presences
|
//Enqueue updates for scene-objects and scene-presences
|
||||||
void QueueSceneObjectPartForUpdate(SceneObjectPart part);
|
//Legacy interface, used in Bucket-sync
|
||||||
|
//void QueueSceneObjectPartForUpdate(SceneObjectPart part);
|
||||||
void QueueScenePresenceForTerseUpdate(ScenePresence presence);
|
void QueueScenePresenceForTerseUpdate(ScenePresence presence);
|
||||||
//void QueueSceneObjectGroupForUpdate(SceneObjectGroup sog);
|
|
||||||
|
|
||||||
|
//void ProcessAndEnqueuePrimUpdatesBySync(SceneObjectPart part, List<SceneObjectPartSyncProperties> updatedProperties);
|
||||||
|
void ProcessAndEnqueuePrimUpdatesByLocal(SceneObjectPart part, List<SceneObjectPartSyncProperties> updatedProperties);
|
||||||
|
void SyncOutPrimUpdates();
|
||||||
|
|
||||||
|
//Legacy calls in Bucket sync'ing
|
||||||
//The folloiwng calls deal with object updates, and will insert each update into an outgoing queue of each SyncConnector
|
//The folloiwng calls deal with object updates, and will insert each update into an outgoing queue of each SyncConnector
|
||||||
void SendSceneUpdates();
|
//void SendSceneUpdates();
|
||||||
void SendNewObject(SceneObjectGroup sog);
|
void SendNewObject(SceneObjectGroup sog);
|
||||||
void SendDeleteObject(SceneObjectGroup sog, bool softDelete);
|
void SendDeleteObject(SceneObjectGroup sog, bool softDelete);
|
||||||
void SendLinkObject(SceneObjectGroup linkedGroup, SceneObjectPart root, List<SceneObjectPart> children);
|
void SendLinkObject(SceneObjectGroup linkedGroup, SceneObjectPart root, List<SceneObjectPart> children);
|
||||||
void SendDeLinkObject(List<SceneObjectPart> prims, List<SceneObjectGroup> beforeDelinkGroups, List<SceneObjectGroup> afterDelinkGroups);
|
void SendDeLinkObject(List<SceneObjectPart> prims, List<SceneObjectGroup> beforeDelinkGroups, List<SceneObjectGroup> afterDelinkGroups);
|
||||||
|
|
||||||
|
//New functions for per property sync'ing
|
||||||
|
void SyncNewObject(SceneObjectGroup sog);
|
||||||
|
void SyncDeleteObject(SceneObjectGroup sog, bool softDelete);
|
||||||
|
void SyncLinkObject(SceneObjectGroup linkedGroup, SceneObjectPart root, List<SceneObjectPart> children);
|
||||||
|
void SyncDeLinkObject(List<SceneObjectPart> prims, List<SceneObjectGroup> beforeDelinkGroups, List<SceneObjectGroup> afterDelinkGroups);
|
||||||
|
|
||||||
//In RegionSyncModule's implementation,
|
//In RegionSyncModule's implementation,
|
||||||
//The following calls send out a message immediately, w/o putting it in the SyncConnector's outgoing queue.
|
//The following calls send out a message immediately, w/o putting it in the SyncConnector's outgoing queue.
|
||||||
//May need some optimization there on the priorities.
|
//May need some optimization there on the priorities.
|
||||||
|
@ -89,6 +101,8 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
//void QueuePresenceForTerseUpdate(ScenePresence presence)
|
//void QueuePresenceForTerseUpdate(ScenePresence presence)
|
||||||
//void SendAvatarUpdates();
|
//void SendAvatarUpdates();
|
||||||
|
|
||||||
|
//Debug purpose, mainly for LSL scripts
|
||||||
|
void Debug(String debugMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
@ -1714,7 +1714,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
|
||||||
|
@ -1741,7 +1741,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
|
||||||
|
@ -1801,7 +1801,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)
|
||||||
|
@ -1819,7 +1819,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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2256,7 +2256,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
group.CreateScriptInstances(param, true, DefaultScriptEngine, 3);
|
group.CreateScriptInstances(param, true, DefaultScriptEngine, 3);
|
||||||
|
|
||||||
//group.ScheduleGroupForFullUpdate();
|
//group.ScheduleGroupForFullUpdate();
|
||||||
group.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.FullUpdate}); //new object, all properties have new value
|
group.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate}); //new object, all properties have new value
|
||||||
|
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
|
@ -2322,7 +2322,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
sog.SetOwnerId(ownerID);
|
sog.SetOwnerId(ownerID);
|
||||||
sog.SetGroup(groupID, remoteClient);
|
sog.SetGroup(groupID, remoteClient);
|
||||||
//sog.ScheduleGroupForFullUpdate();
|
//sog.ScheduleGroupForFullUpdate();
|
||||||
sog.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.OwnerID, SceneObjectPartProperties.GroupID});
|
sog.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.OwnerID, SceneObjectPartSyncProperties.GroupID});
|
||||||
|
|
||||||
SceneObjectPart[] partList = sog.Parts;
|
SceneObjectPart[] partList = sog.Parts;
|
||||||
|
|
||||||
|
@ -2386,6 +2386,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
List<SceneObjectPart> children = new List<SceneObjectPart>();
|
List<SceneObjectPart> children = new List<SceneObjectPart>();
|
||||||
SceneObjectPart root = GetSceneObjectPart(parentPrimId);
|
SceneObjectPart root = GetSceneObjectPart(parentPrimId);
|
||||||
|
|
||||||
|
//DSG DEBUG
|
||||||
|
m_log.Debug("Scene.LinkObjects -- ROOT: " + root.DebugObjectPartProperties());
|
||||||
|
|
||||||
if (root == null)
|
if (root == null)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[LINK]: Can't find linkset root prim {0}", parentPrimId);
|
m_log.DebugFormat("[LINK]: Can't find linkset root prim {0}", parentPrimId);
|
||||||
|
@ -2405,6 +2408,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (part == null)
|
if (part == null)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
//DSG DEBUG
|
||||||
|
m_log.Debug("Scene.LinkObjects -- child to link: " + part.DebugObjectPartProperties());
|
||||||
|
|
||||||
if (!owners.Contains(part.OwnerID))
|
if (!owners.Contains(part.OwnerID))
|
||||||
owners.Add(part.OwnerID);
|
owners.Add(part.OwnerID);
|
||||||
|
|
||||||
|
|
|
@ -213,7 +213,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
isAttachment = true;
|
isAttachment = true;
|
||||||
else
|
else
|
||||||
//part.ParentGroup.ScheduleGroupForFullUpdate();
|
//part.ParentGroup.ScheduleGroupForFullUpdate();
|
||||||
part.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.IsSelected});
|
part.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate});
|
||||||
|
|
||||||
// If it's not an attachment, and we are allowed to move it,
|
// If it's not an attachment, and we are allowed to move it,
|
||||||
// then we might have done so. If we moved across a parcel
|
// then we might have done so. If we moved across a parcel
|
||||||
|
|
|
@ -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;
|
||||||
|
@ -709,9 +709,6 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//Similar to DeleteSceneObject, except that this does not change LastUpdateActorID and LastUpdateTimeStamp
|
//Similar to DeleteSceneObject, except that this does not change LastUpdateActorID and LastUpdateTimeStamp
|
||||||
public void DeleteSceneObjectBySynchronization(SceneObjectGroup group)
|
public void DeleteSceneObjectBySynchronization(SceneObjectGroup group)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SCENE]: Deleting scene object {0} {1}", group.Name, group.UUID);
|
|
||||||
|
|
||||||
//SceneObjectPart rootPart = group.GetChildPart(group.UUID);
|
|
||||||
|
|
||||||
// Serialise calls to RemoveScriptInstances to avoid
|
// Serialise calls to RemoveScriptInstances to avoid
|
||||||
// deadlocking on m_parts inside SceneObjectGroup
|
// deadlocking on m_parts inside SceneObjectGroup
|
||||||
|
@ -794,7 +791,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="childrenIDs"></param>
|
/// <param name="childrenIDs"></param>
|
||||||
public void LinkObjectBySync(SceneObjectGroup linkedGroup, UUID rootID, List<UUID> childrenIDs)
|
public void LinkObjectBySync(SceneObjectGroup linkedGroup, UUID rootID, List<UUID> childrenIDs)
|
||||||
{
|
{
|
||||||
//m_log.Debug("Start to LinkObjectBySync");
|
m_log.Debug("Start to LinkObjectBySync");
|
||||||
//DebugSceneObjectGroups();
|
//DebugSceneObjectGroups();
|
||||||
|
|
||||||
List<SceneObjectPart> children = new List<SceneObjectPart>();
|
List<SceneObjectPart> children = new List<SceneObjectPart>();
|
||||||
|
@ -816,13 +813,17 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
//m_log.Debug("to link part " + part.DebugObjectPartProperties());
|
//TEMP DEBUG
|
||||||
|
/*
|
||||||
|
m_log.Debug("to link part " + part.DebugObjectPartProperties());
|
||||||
|
|
||||||
string partNames = "";
|
string partNames = "";
|
||||||
foreach (SceneObjectPart child in part.ParentGroup.Parts)
|
foreach (SceneObjectPart child in part.ParentGroup.Parts)
|
||||||
{
|
{
|
||||||
partNames += "(" + child.Name + "," + child.UUID + ")";
|
partNames += "(" + child.Name + "," + child.UUID + ")";
|
||||||
}
|
}
|
||||||
//m_log.Debug("LinkObjectBySync: " + part.Name + "," + part.UUID + " with root "+root.Name+","+root.UUID+"; its SOG has " + part.ParentGroup.Parts.Length + " parts : "+partNames);
|
//m_log.Debug("LinkObjectBySync: " + part.Name + "," + part.UUID + " with root "+root.Name+","+root.UUID+"; its SOG has " + part.ParentGroup.Parts.Length + " parts : "+partNames);
|
||||||
|
* */
|
||||||
|
|
||||||
children.Add(part);
|
children.Add(part);
|
||||||
}
|
}
|
||||||
|
@ -833,14 +834,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_sceneGraph.LinkObjectsBySync(root, children);
|
m_sceneGraph.LinkObjectsBySync(root, children);
|
||||||
|
|
||||||
|
|
||||||
//The properties of the newly linked object should be updated later with another UpdatedObject message.
|
//KittyL 04/19/2011: no longer update properties here, caller will do it
|
||||||
|
|
||||||
//Set the property values as in the incoming copy of the object group
|
//Set the property values as in the incoming copy of the object group
|
||||||
|
//SceneObjectGroup localGroup = root.ParentGroup;
|
||||||
|
//localGroup.UpdateObjectGroupBySync(linkedGroup);
|
||||||
|
|
||||||
SceneObjectGroup localGroup = root.ParentGroup;
|
//DSG DEBUG
|
||||||
localGroup.UpdateObjectGroupBySync(linkedGroup);
|
|
||||||
|
|
||||||
//debug
|
|
||||||
/*
|
/*
|
||||||
m_log.Debug("after SceneGraph.LinkObjectsBySync, the newly linked group is \n" + root.ParentGroup.DebugObjectUpdateResult());
|
m_log.Debug("after SceneGraph.LinkObjectsBySync, the newly linked group is \n" + root.ParentGroup.DebugObjectUpdateResult());
|
||||||
m_log.Debug("parts before linking now have properties: ");
|
m_log.Debug("parts before linking now have properties: ");
|
||||||
|
@ -849,8 +848,17 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_log.Debug(part.DebugObjectPartProperties());
|
m_log.Debug(part.DebugObjectPartProperties());
|
||||||
}
|
}
|
||||||
* */
|
* */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Delink objects after receiving DelinkObject sync message.
|
||||||
|
/// Assumption: the actor whichever initiates the DelinkObject
|
||||||
|
/// operation has already done premission checking.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="delinkPrimIDs"></param>
|
||||||
|
/// <param name="beforeDelinkGroupIDs"></param>
|
||||||
|
/// <param name="incomingAfterDelinkGroups"></param>
|
||||||
public void DelinkObjectsBySync(List<UUID> delinkPrimIDs, List<UUID> beforeDelinkGroupIDs, List<SceneObjectGroup> incomingAfterDelinkGroups)
|
public void DelinkObjectsBySync(List<UUID> delinkPrimIDs, List<UUID> beforeDelinkGroupIDs, List<SceneObjectGroup> incomingAfterDelinkGroups)
|
||||||
{
|
{
|
||||||
m_sceneGraph.DelinkObjectsBySync(delinkPrimIDs, beforeDelinkGroupIDs, incomingAfterDelinkGroups);
|
m_sceneGraph.DelinkObjectsBySync(delinkPrimIDs, beforeDelinkGroupIDs, incomingAfterDelinkGroups);
|
||||||
|
@ -863,7 +871,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
|
||||||
{
|
{
|
||||||
|
@ -1006,10 +1025,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);
|
||||||
|
@ -1215,10 +1234,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();
|
||||||
}
|
}
|
||||||
|
@ -1553,13 +1572,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
|
||||||
|
@ -1739,14 +1758,15 @@ 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)
|
||||||
{
|
{
|
||||||
RegionSyncModule.SendSceneUpdates();
|
//RegionSyncModule.SendSceneUpdates();
|
||||||
|
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()))
|
||||||
|
@ -2403,7 +2423,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
//sceneObject.ScheduleGroupForFullUpdate();
|
//sceneObject.ScheduleGroupForFullUpdate();
|
||||||
sceneObject.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.FullUpdate}); //new object, all properties have new value
|
sceneObject.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate}); //new object, all properties have new value
|
||||||
|
|
||||||
return sceneObject;
|
return sceneObject;
|
||||||
}
|
}
|
||||||
|
@ -2580,16 +2600,18 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
EventManager.TriggerParcelPrimCountTainted();
|
EventManager.TriggerParcelPrimCountTainted();
|
||||||
}
|
}
|
||||||
|
|
||||||
group.DeleteGroupFromScene(silent);
|
//DSG SYNC
|
||||||
|
|
||||||
// m_log.DebugFormat("[SCENE]: Exit DeleteSceneObject() for {0} {1}", group.Name, group.UUID);
|
|
||||||
|
|
||||||
//Propagate the RemovedObject message
|
//Propagate the RemovedObject message
|
||||||
if (RegionSyncModule != null)
|
if (RegionSyncModule != null)
|
||||||
{
|
{
|
||||||
RegionSyncModule.SendDeleteObject(group, false);
|
//RegionSyncModule.SendDeleteObject(group, false);
|
||||||
|
RegionSyncModule.SyncDeleteObject(group, false);
|
||||||
}
|
}
|
||||||
//end of SYMMETRIC SYNC
|
//end of DSG SYNC
|
||||||
|
|
||||||
|
group.DeleteGroupFromScene(silent);
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[SCENE]: Exit DeleteSceneObject() for {0} {1}", group.Name, group.UUID);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3210,7 +3232,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;
|
||||||
|
@ -3710,7 +3732,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() )
|
||||||
|
@ -4532,7 +4554,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (ent is SceneObjectGroup)
|
if (ent is SceneObjectGroup)
|
||||||
{
|
{
|
||||||
//((SceneObjectGroup)ent).ScheduleGroupForFullUpdate();
|
//((SceneObjectGroup)ent).ScheduleGroupForFullUpdate();
|
||||||
((SceneObjectGroup)ent).ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.None}); //This is not due to property being updated, hence passing "None" property.
|
((SceneObjectGroup)ent).ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); //This is not due to property being updated, hence passing "None" property.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,15 +429,15 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SceneObjectGroupsByLocalPartID[part.LocalId] = sceneObject;
|
SceneObjectGroupsByLocalPartID[part.LocalId] = sceneObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
//SYMMETRIC SYNC: sending NewObject event, and sending it before calling ScheduleGroupForFullUpdate
|
|
||||||
if (m_parentScene.RegionSyncModule != null)
|
|
||||||
{
|
|
||||||
m_parentScene.RegionSyncModule.SendNewObject(sceneObject);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sendClientUpdates)
|
if (sendClientUpdates)
|
||||||
//sceneObject.ScheduleGroupForFullUpdate();
|
//sceneObject.ScheduleGroupForFullUpdate();
|
||||||
sceneObject.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>() { SceneObjectPartProperties.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;
|
||||||
}
|
}
|
||||||
|
@ -1637,21 +1637,21 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
parentGroup.TriggerScriptChangedEvent(Changed.LINK);
|
parentGroup.TriggerScriptChangedEvent(Changed.LINK);
|
||||||
parentGroup.HasGroupChanged = true;
|
parentGroup.HasGroupChanged = true;
|
||||||
|
|
||||||
//SYMMETRIC SYNC
|
//DSG SYNC
|
||||||
//Schedule a LinkObject message for synchronization purpose. This will lead to enqueue a LinkObject message in SyncConnector's outgoingQueue,
|
//Send out LinkObject sync messages.
|
||||||
//so should return quickly.
|
|
||||||
if (m_parentScene.RegionSyncModule != null)
|
if (m_parentScene.RegionSyncModule != null)
|
||||||
{
|
{
|
||||||
//Tell other actors to link the SceneObjectParts together as a new group.
|
//Tell other actors to link the SceneObjectParts together as a new group.
|
||||||
m_parentScene.RegionSyncModule.SendLinkObject(parentGroup, root, children);
|
//m_parentScene.RegionSyncModule.SendLinkObject(parentGroup, root, children);
|
||||||
|
m_parentScene.RegionSyncModule.SyncLinkObject(parentGroup, root, children);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Schedule updates as in legacy OpenSim code, to send updates to viewers connected to this actor (at least needed for client managers).
|
//Schedule updates as in legacy OpenSim code, to send updates to viewers connected to this actor (at least needed for client managers).
|
||||||
//But timestamp won't be changed, so that when other actors get the update, they's simple ignore the updates since they already get them
|
//But timestamp won't be changed, so that when other actors get the update, they's simple ignore the updates since they already get them
|
||||||
//via the LinkObject message sent above.
|
//via the LinkObject message sent above.
|
||||||
parentGroup.ScheduleGroupForFullUpdate_SyncInfoUnchanged();
|
parentGroup.ScheduleGroupForFullUpdate(null);
|
||||||
|
|
||||||
//end of SYMMETRIC SYNC
|
//end of DSG SYNC
|
||||||
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -1673,7 +1673,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>();
|
||||||
|
|
||||||
|
@ -1694,7 +1694,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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1711,7 +1711,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);
|
||||||
}
|
}
|
||||||
|
@ -1783,24 +1783,24 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
//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 (m_parentScene.RegionSyncModule != null)
|
if (m_parentScene.RegionSyncModule != null)
|
||||||
{
|
{
|
||||||
m_parentScene.RegionSyncModule.SendDeLinkObject(prims, beforeDelinkGroups, afterDelinkGroups);
|
m_parentScene.RegionSyncModule.SyncDeLinkObject(prims, beforeDelinkGroups, afterDelinkGroups);
|
||||||
}
|
}
|
||||||
//Schedule updates as in legacy OpenSim code, to send updates to viewers connected to this actor (at least needed for client managers).
|
//Schedule updates as in legacy OpenSim code, to send updates
|
||||||
//But timestamp won't be changed, so that when other actors get the update, they's simple ignore the updates since they already get them
|
//to viewers connected to this actor (at least needed for client managers).
|
||||||
foreach (SceneObjectGroup sog in afterDelinkGroups)
|
foreach (SceneObjectGroup sog in afterDelinkGroups)
|
||||||
{
|
{
|
||||||
sog.ScheduleGroupForFullUpdate_SyncInfoUnchanged();
|
sog.ScheduleGroupForFullUpdate(null);
|
||||||
}
|
}
|
||||||
//end of SYMMETRIC SYNC
|
//end of DSG SYNC
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -1961,7 +1961,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 1);
|
copy.CreateScriptInstances(0, false, m_parentScene.DefaultScriptEngine, 1);
|
||||||
copy.HasGroupChanged = true;
|
copy.HasGroupChanged = true;
|
||||||
//copy.ScheduleGroupForFullUpdate();
|
//copy.ScheduleGroupForFullUpdate();
|
||||||
copy.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.FullUpdate}); //new object, all property values are new
|
copy.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate}); //new object, all property values are new
|
||||||
copy.ResumeScripts();
|
copy.ResumeScripts();
|
||||||
|
|
||||||
// required for physics to update it's position
|
// required for physics to update it's position
|
||||||
|
@ -2059,7 +2059,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)
|
||||||
{
|
{
|
||||||
|
@ -2175,9 +2175,13 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
sceneObject.RootPart.SetParentLocalId(avatar.LocalId);
|
sceneObject.RootPart.SetParentLocalId(avatar.LocalId);
|
||||||
}
|
}
|
||||||
|
|
||||||
//SYMMETRIC SYNC,
|
//DSG SYNC,
|
||||||
sceneObject.ScheduleGroupForFullUpdate_SyncInfoUnchanged();
|
sceneObject.HasGroupChanged = true;
|
||||||
//end of SYMMETRIC SYNC,
|
//NewObject is sent via a specific sync message, not through updates;
|
||||||
|
//hence not passing any property list here in calling
|
||||||
|
//ScheduleGroupForFullUpdate().
|
||||||
|
sceneObject.ScheduleGroupForFullUpdate(null);
|
||||||
|
//end of DSG SYNC,
|
||||||
|
|
||||||
Entities.Add(sceneObject);
|
Entities.Add(sceneObject);
|
||||||
|
|
||||||
|
@ -2248,7 +2252,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);
|
||||||
|
@ -2285,7 +2289,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
parentGroup.TriggerScriptChangedEvent(Changed.LINK);
|
parentGroup.TriggerScriptChangedEvent(Changed.LINK);
|
||||||
parentGroup.HasGroupChanged = true;
|
parentGroup.HasGroupChanged = true;
|
||||||
//Do not change the timestamp and actorID values
|
//Do not change the timestamp and actorID values
|
||||||
parentGroup.ScheduleGroupForFullUpdate_SyncInfoUnchanged();
|
parentGroup.ScheduleGroupForFullUpdate(null);
|
||||||
|
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
|
@ -2304,6 +2308,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public void DelinkObjectsBySync(List<UUID> delinkPrimIDs, List<UUID> beforeDelinkGroupIDs, List<SceneObjectGroup> incomingAfterDelinkGroups)
|
public void DelinkObjectsBySync(List<UUID> delinkPrimIDs, List<UUID> beforeDelinkGroupIDs, List<SceneObjectGroup> incomingAfterDelinkGroups)
|
||||||
{
|
{
|
||||||
Dictionary<UUID, SceneObjectGroup> localBeforeDelinkGroups = new Dictionary<UUID, SceneObjectGroup>();
|
Dictionary<UUID, SceneObjectGroup> localBeforeDelinkGroups = new Dictionary<UUID, SceneObjectGroup>();
|
||||||
|
List<SceneObjectGroup> localAfterDelinkGroups = new List<SceneObjectGroup>();
|
||||||
Dictionary<UUID, SceneObjectPart> delinkPrims = new Dictionary<UUID, SceneObjectPart>();
|
Dictionary<UUID, SceneObjectPart> delinkPrims = new Dictionary<UUID, SceneObjectPart>();
|
||||||
bool beforeStateConsistent = true;
|
bool beforeStateConsistent = true;
|
||||||
bool afterStateConsistent = true;
|
bool afterStateConsistent = true;
|
||||||
|
@ -2385,8 +2390,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_log.Warn("DelinkObjectsBySync: before-delink state not consistent in local copy and the incoming copy. Return without further operations.");
|
m_log.Warn("DelinkObjectsBySync: before-delink state not consistent in local copy and the incoming copy. Return without further operations.");
|
||||||
}else{
|
}else{
|
||||||
//Next, apply the delink operation locally.
|
//Next, apply the delink operation locally.
|
||||||
List<SceneObjectGroup> localAfterDelinkGroups = DelinkObjectsBySync(new List<SceneObjectPart>(delinkPrims.Values));
|
localAfterDelinkGroups = DelinkObjectsBySync(new List<SceneObjectPart>(delinkPrims.Values));
|
||||||
|
|
||||||
|
|
||||||
//Check if local after-state agrees with that in the remote copy, and update the groups' properties
|
//Check if local after-state agrees with that in the remote copy, and update the groups' properties
|
||||||
if (localAfterDelinkGroups.Count != incomingAfterDelinkGroups.Count)
|
if (localAfterDelinkGroups.Count != incomingAfterDelinkGroups.Count)
|
||||||
|
@ -2409,11 +2413,17 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
localAfterGroup.UpdateObjectGroupBySync(incomingAfterDelinkGroupsDictionary[localAfterGroup.UUID]);
|
//No longer calling update prim's properties here, caller will do that
|
||||||
|
//localAfterGroup.UpdateObjectGroupBySync(incomingAfterDelinkGroupsDictionary[localAfterGroup.UUID]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (SceneObjectGroup sog in localAfterDelinkGroups)
|
||||||
|
{
|
||||||
|
sog.ScheduleGroupForFullUpdate(null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
|
@ -2425,7 +2435,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Similar to DelinkObjects(), w/o triggering any ScheduleFullUpdate(),
|
//Similar to DelinkObjects(), but calling DelinkFromGroupBySync instead
|
||||||
private List<SceneObjectGroup> DelinkObjectsBySync(List<SceneObjectPart> prims)
|
private List<SceneObjectGroup> DelinkObjectsBySync(List<SceneObjectPart> prims)
|
||||||
{
|
{
|
||||||
//!!!Caller of this function should already lock on m_updateLock, so no locking here !!!
|
//!!!Caller of this function should already lock on m_updateLock, so no locking here !!!
|
||||||
|
@ -2553,6 +2563,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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -509,7 +509,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)
|
||||||
|
@ -638,7 +638,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)
|
||||||
|
@ -1028,7 +1028,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
AttachToBackup();
|
AttachToBackup();
|
||||||
m_scene.EventManager.TriggerParcelPrimCountTainted();
|
m_scene.EventManager.TriggerParcelPrimCountTainted();
|
||||||
//m_rootPart.ScheduleFullUpdate();
|
//m_rootPart.ScheduleFullUpdate();
|
||||||
m_rootPart.ScheduleFullUpdate(new List<SceneObjectPartProperties>() { SceneObjectPartProperties.GroupPosition, SceneObjectPartProperties.AttachmentPoint}); //Physics properties, such as Position, OffsetPosition, etc, should be tainted in ApplyPhysics()
|
m_rootPart.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.GroupPosition, SceneObjectPartSyncProperties.AttachmentPoint}); //Physics properties, such as Position, OffsetPosition, etc, should be tainted in ApplyPhysics()
|
||||||
m_rootPart.ClearUndoState();
|
m_rootPart.ClearUndoState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1223,7 +1223,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())
|
||||||
|
@ -1232,7 +1232,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)
|
||||||
{
|
{
|
||||||
|
@ -1302,7 +1302,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
//ScheduleGroupForFullUpdate();
|
//ScheduleGroupForFullUpdate();
|
||||||
ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){ SceneObjectPartProperties.Flags}); //do we also need to synchronize SOG properties such as m_scriptListens_atRotTarget? (does any acotr other than script engine care about it?)
|
ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){ SceneObjectPartSyncProperties.Flags, SceneObjectPartSyncProperties.AggregateScriptEvents}); //do we also need to synchronize SOG properties such as m_scriptListens_atRotTarget? (does any acotr other than script engine care about it?)
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetText(string text, Vector3 color, double alpha)
|
public void SetText(string text, Vector3 color, double alpha)
|
||||||
|
@ -1315,7 +1315,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
//m_rootPart.ScheduleFullUpdate();
|
//m_rootPart.ScheduleFullUpdate();
|
||||||
m_rootPart.ScheduleFullUpdate(new List<SceneObjectPartProperties>() {SceneObjectPartProperties.Text, SceneObjectPartProperties.Color});
|
m_rootPart.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() {SceneObjectPartSyncProperties.Text, SceneObjectPartSyncProperties.Color});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1377,13 +1377,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.
|
||||||
|
@ -1560,7 +1560,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
dupe.AttachToBackup();
|
dupe.AttachToBackup();
|
||||||
|
|
||||||
//ScheduleGroupForFullUpdate();
|
//ScheduleGroupForFullUpdate();
|
||||||
ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.FullUpdate});
|
ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate});
|
||||||
}
|
}
|
||||||
|
|
||||||
return dupe;
|
return dupe;
|
||||||
|
@ -1814,7 +1814,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
part.ScheduleFullUpdate(new List<SceneObjectPartProperties>() {SceneObjectPartProperties.OwnerID, SceneObjectPartProperties.GroupID, SceneObjectPartProperties.LastOwnerID});
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() {SceneObjectPartSyncProperties.OwnerID, SceneObjectPartSyncProperties.GroupID, SceneObjectPartSyncProperties.LastOwnerID});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1942,7 +1942,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Schedule a full update for this scene object
|
/// Schedule a full update for this scene object
|
||||||
/// </summary>
|
/// </summary>
|
||||||
//public void ScheduleGroupForFullUpdate()
|
//public void ScheduleGroupForFullUpdate()
|
||||||
public void ScheduleGroupForFullUpdate(List<SceneObjectPartProperties> updatedProperties)
|
public void ScheduleGroupForFullUpdate(List<SceneObjectPartSyncProperties> updatedProperties)
|
||||||
{
|
{
|
||||||
// if (IsAttachment)
|
// if (IsAttachment)
|
||||||
// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, LocalId);
|
// m_log.DebugFormat("[SOG]: Scheduling full update for {0} {1}", Name, LocalId);
|
||||||
|
@ -1951,13 +1951,29 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//RootPart.ScheduleFullUpdate();
|
//RootPart.ScheduleFullUpdate();
|
||||||
RootPart.ScheduleFullUpdate(updatedProperties);
|
RootPart.ScheduleFullUpdate(updatedProperties);
|
||||||
|
|
||||||
|
//For group properties, we only need to send it once per SOG,
|
||||||
|
//hence remove them from the updatedProperties for other parts
|
||||||
|
List<SceneObjectPartSyncProperties> otherPartsUpdatedProperties = updatedProperties;
|
||||||
|
if (updatedProperties!=null)
|
||||||
|
{
|
||||||
|
HashSet<SceneObjectPartSyncProperties> hashedList = new HashSet<SceneObjectPartSyncProperties>(updatedProperties);
|
||||||
|
foreach (SceneObjectPartSyncProperties groupProperty in SceneObjectPart.GetGroupProperties())
|
||||||
|
{
|
||||||
|
if (updatedProperties.Contains(groupProperty))
|
||||||
|
{
|
||||||
|
hashedList.Remove(groupProperty);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
otherPartsUpdatedProperties = new List<SceneObjectPartSyncProperties>(hashedList);
|
||||||
|
}
|
||||||
|
|
||||||
SceneObjectPart[] parts = m_parts.GetArray();
|
SceneObjectPart[] parts = m_parts.GetArray();
|
||||||
for (int i = 0; i < parts.Length; i++)
|
for (int i = 0; i < parts.Length; i++)
|
||||||
{
|
{
|
||||||
SceneObjectPart part = parts[i];
|
SceneObjectPart part = parts[i];
|
||||||
if (part != RootPart)
|
if (part != RootPart)
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
part.ScheduleFullUpdate(updatedProperties);
|
part.ScheduleFullUpdate(otherPartsUpdatedProperties);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1965,7 +1981,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Schedule a terse update for this scene object
|
/// Schedule a terse update for this scene object
|
||||||
/// </summary>
|
/// </summary>
|
||||||
//public void ScheduleGroupForTerseUpdate()
|
//public void ScheduleGroupForTerseUpdate()
|
||||||
public void ScheduleGroupForTerseUpdate(List<SceneObjectPartProperties> updatedProperties)
|
public void ScheduleGroupForTerseUpdate(List<SceneObjectPartSyncProperties> updatedProperties)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("[SOG]: Scheduling terse update for {0} {1}", Name, UUID);
|
// m_log.DebugFormat("[SOG]: Scheduling terse update for {0} {1}", Name, UUID);
|
||||||
|
|
||||||
|
@ -2215,11 +2231,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
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2322,7 +2338,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);
|
||||||
|
@ -2731,7 +2751,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
part.TriggerScriptChangedEvent(Changed.SCALE);
|
part.TriggerScriptChangedEvent(Changed.SCALE);
|
||||||
//ScheduleGroupForFullUpdate();
|
//ScheduleGroupForFullUpdate();
|
||||||
ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.None}); //above actions only update Scale for the given part, and part.Resize() will taint Scale as updated
|
ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); //above actions only update Scale for the given part, and part.Resize() will taint Scale as updated
|
||||||
|
|
||||||
//if (part.UUID == m_rootPart.UUID)
|
//if (part.UUID == m_rootPart.UUID)
|
||||||
//{
|
//{
|
||||||
|
@ -2884,7 +2904,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
m_rootPart.TriggerScriptChangedEvent(Changed.SCALE);
|
m_rootPart.TriggerScriptChangedEvent(Changed.SCALE);
|
||||||
//ScheduleGroupForTerseUpdate();
|
//ScheduleGroupForTerseUpdate();
|
||||||
ScheduleGroupForTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Scale});
|
ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Scale});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2926,10 +2946,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//we need to do a terse update even if the move wasn't allowed
|
//we need to do a terse update even if the move wasn't allowed
|
||||||
// so that the position is reset in the client (the object snaps back)
|
// so that the position is reset in the client (the object snaps back)
|
||||||
//ScheduleGroupForTerseUpdate();
|
//ScheduleGroupForTerseUpdate();
|
||||||
List<SceneObjectPartProperties> updatedProperties = new List<SceneObjectPartProperties>() { SceneObjectPartProperties.GroupPosition };
|
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.GroupPosition };
|
||||||
if (IsAttachment)
|
if (IsAttachment)
|
||||||
{
|
{
|
||||||
updatedProperties.Add(SceneObjectPartProperties.AttachedPos);
|
updatedProperties.Add(SceneObjectPartSyncProperties.AttachedPos);
|
||||||
}
|
}
|
||||||
ScheduleGroupForTerseUpdate(updatedProperties);
|
ScheduleGroupForTerseUpdate(updatedProperties);
|
||||||
}
|
}
|
||||||
|
@ -2995,7 +3015,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
//ScheduleGroupForTerseUpdate();
|
//ScheduleGroupForTerseUpdate();
|
||||||
ScheduleGroupForTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Position, SceneObjectPartProperties.OffsetPosition});
|
ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Position, SceneObjectPartSyncProperties.OffsetPosition});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OffsetForNewRegion(Vector3 offset)
|
public void OffsetForNewRegion(Vector3 offset)
|
||||||
|
@ -3028,7 +3048,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
//ScheduleGroupForTerseUpdate();
|
//ScheduleGroupForTerseUpdate();
|
||||||
ScheduleGroupForTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Orientation}); //Above actions only update m_rootPart's RotationOffset, and m_rootPart.UpdateRotation will taint RotationOffset as updated
|
ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Orientation}); //Above actions only update m_rootPart's RotationOffset, and m_rootPart.UpdateRotation will taint RotationOffset as updated
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -3055,7 +3075,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
HasGroupChanged = true;
|
HasGroupChanged = true;
|
||||||
//ScheduleGroupForTerseUpdate();
|
//ScheduleGroupForTerseUpdate();
|
||||||
ScheduleGroupForTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Position, SceneObjectPartProperties.Orientation}); //RotationOffset is only updated for m_rootPart, and m_rootPart.UpdateRotation should already taint RotationOffset as updated
|
ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Position, SceneObjectPartSyncProperties.Orientation}); //RotationOffset is only updated for m_rootPart, and m_rootPart.UpdateRotation should already taint RotationOffset as updated
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -3143,7 +3163,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
newRot *= Quaternion.Inverse(axRot);
|
newRot *= Quaternion.Inverse(axRot);
|
||||||
prim.RotationOffset = newRot;
|
prim.RotationOffset = newRot;
|
||||||
//prim.ScheduleTerseUpdate();
|
//prim.ScheduleTerseUpdate();
|
||||||
prim.ScheduleTerseUpdate(new List<SceneObjectPartProperties>(){ SceneObjectPartProperties.RotationOffset, SceneObjectPartProperties.OffsetPosition});
|
prim.ScheduleTerseUpdate(new List<SceneObjectPartSyncProperties>(){ SceneObjectPartSyncProperties.RotationOffset, SceneObjectPartSyncProperties.OffsetPosition});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3158,7 +3178,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
//m_rootPart.ScheduleTerseUpdate();
|
//m_rootPart.ScheduleTerseUpdate();
|
||||||
m_rootPart.ScheduleTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.RotationOffset});
|
m_rootPart.ScheduleTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.RotationOffset});
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -3571,7 +3591,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
|
||||||
|
@ -3794,14 +3814,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();
|
||||||
|
@ -3818,9 +3835,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
|
||||||
{
|
{
|
||||||
|
@ -3830,16 +3845,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)
|
||||||
{
|
{
|
||||||
|
@ -3858,15 +3870,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);
|
||||||
|
@ -4152,6 +4155,91 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
// Per SOP property based sync
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Update the existing copy of the object with updated properties in 'updatedSog'.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="updatedSog"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public Scene.ObjectUpdateResult UpdateSOGBySync(SceneObjectGroup updatedSog)
|
||||||
|
{
|
||||||
|
//This GroupID check should be done by the actor who initiates the object update
|
||||||
|
//if (!this.GroupID.Equals(updatedSog.GroupID))
|
||||||
|
// return Scene.ObjectUpdateResult.Error;
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
//NOTE!!!
|
||||||
|
//We do not want to simply call SceneObjectGroup.Copy here to clone the object:
|
||||||
|
//the prims (SceneObjectParts) in updatedSog are different instances than those in the local copy,
|
||||||
|
//and we want to preserve the references to the prims in this local copy, especially for scripts
|
||||||
|
//of each prim, where the scripts have references to the local copy. If the local copy is replaced,
|
||||||
|
//the prims (parts) will be replaces and we need to update all the references that were pointing to
|
||||||
|
//the previous prims.
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
Scene.ObjectUpdateResult groupUpdateResult = Scene.ObjectUpdateResult.Unchanged;
|
||||||
|
Dictionary<UUID, SceneObjectPart> updatedParts = new Dictionary<UUID, SceneObjectPart>();
|
||||||
|
|
||||||
|
lock (m_parts.SyncRoot)
|
||||||
|
{
|
||||||
|
//This function is called by LinkObjectBySync and DelinkObjectBySinc(),
|
||||||
|
//which should have updated the parts in this SOG, hence should be no need to
|
||||||
|
//add or remove parts to sync
|
||||||
|
|
||||||
|
if (this.PrimCount != updatedSog.PrimCount)
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("UpdateSOGBySync: For SOP {0}, local copy has {1} parts, while incoming updated copy has {2} parts. Inconsistent.", this.UUID,
|
||||||
|
this.PrimCount, updatedSog.PrimCount);
|
||||||
|
}
|
||||||
|
|
||||||
|
//now update properties of the parts
|
||||||
|
foreach (SceneObjectPart part in this.Parts)
|
||||||
|
{
|
||||||
|
Scene.ObjectUpdateResult partUpdateResult = Scene.ObjectUpdateResult.Unchanged;
|
||||||
|
SceneObjectPart updatedPart = updatedSog.GetChildPart(part.UUID);
|
||||||
|
|
||||||
|
if (updatedPart == null)
|
||||||
|
{
|
||||||
|
m_log.WarnFormat("UpdateSOGBySync: part {0},{1} exists in local copy, not in incoming updated copy", part.Name, part.UUID);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
partUpdateResult = part.UpdateAllProperties(updatedPart);
|
||||||
|
|
||||||
|
if (partUpdateResult != Scene.ObjectUpdateResult.Unchanged)
|
||||||
|
{
|
||||||
|
groupUpdateResult = partUpdateResult;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//Just to make sure the parts each has the right localID of the rootpart
|
||||||
|
UpdateParentIDs();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Schedule updates to be sent out, if the local copy has just been updated
|
||||||
|
//(1) if we are debugging the actor with a viewer attaching to it,
|
||||||
|
//we need to schedule updates to be sent to the viewer.
|
||||||
|
//(2) or if we are a relaying node to relay updates, we need to forward the updates.
|
||||||
|
//NOTE: LastUpdateTimeStamp and LastUpdateActorID should be kept the same as in the received copy of the object.
|
||||||
|
if (groupUpdateResult == Scene.ObjectUpdateResult.Updated)
|
||||||
|
{
|
||||||
|
ScheduleGroupForFullUpdate_SyncInfoUnchanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
//debug the update result
|
||||||
|
if (groupUpdateResult == Scene.ObjectUpdateResult.Updated)
|
||||||
|
{
|
||||||
|
DebugObjectUpdateResult();
|
||||||
|
}
|
||||||
|
|
||||||
|
return groupUpdateResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -42,6 +42,7 @@ using OpenSim.Region.Framework.Interfaces;
|
||||||
using OpenSim.Region.Framework.Scenes.Scripting;
|
using OpenSim.Region.Framework.Scenes.Scripting;
|
||||||
using OpenSim.Region.Framework.Scenes.Serialization;
|
using OpenSim.Region.Framework.Scenes.Serialization;
|
||||||
using OpenSim.Region.Physics.Manager;
|
using OpenSim.Region.Physics.Manager;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace OpenSim.Region.Framework.Scenes
|
namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
|
@ -129,7 +130,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
|
||||||
|
@ -2799,7 +2800,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//m_parentGroup.RootPart.m_groupPosition = newpos;
|
//m_parentGroup.RootPart.m_groupPosition = newpos;
|
||||||
}
|
}
|
||||||
//ScheduleTerseUpdate();
|
//ScheduleTerseUpdate();
|
||||||
ScheduleTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Position});
|
ScheduleTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Position});
|
||||||
|
|
||||||
//SendTerseUpdateToAllClients();
|
//SendTerseUpdateToAllClients();
|
||||||
}
|
}
|
||||||
|
@ -2890,7 +2891,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
ParentGroup.HasGroupChanged = true;
|
ParentGroup.HasGroupChanged = true;
|
||||||
//ScheduleFullUpdate();
|
//ScheduleFullUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Scale});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Scale});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RotLookAt(Quaternion target, float strength, float damping)
|
public void RotLookAt(Quaternion target, float strength, float damping)
|
||||||
|
@ -2932,8 +2933,8 @@ 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<SceneObjectPartProperties> 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);
|
||||||
|
|
||||||
|
@ -2968,7 +2969,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// rotation, velocity, rotational velocity and shape information.
|
/// rotation, velocity, rotational velocity and shape information.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
//public void ScheduleTerseUpdate()
|
//public void ScheduleTerseUpdate()
|
||||||
public virtual void ScheduleTerseUpdate(List<SceneObjectPartProperties> updatedProperties)
|
public virtual void ScheduleTerseUpdate(List<SceneObjectPartSyncProperties> updatedProperties)
|
||||||
{
|
{
|
||||||
if (m_updateFlag < 1)
|
if (m_updateFlag < 1)
|
||||||
{
|
{
|
||||||
|
@ -3201,12 +3202,16 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
ClearUpdateSchedule();
|
ClearUpdateSchedule();
|
||||||
|
|
||||||
//SYMMETRIC SYNC
|
//DSG SYNC
|
||||||
|
//KittyL: 04/06/2011, No longer calling QueueSceneObjectPartForUpdate
|
||||||
|
//from here. Local updates are now recorded by calling IRegionSyncModule.ProcessAndEnqueuePrimUpdatesByLocal().
|
||||||
|
/*
|
||||||
if (m_parentGroup.Scene.RegionSyncModule != null)
|
if (m_parentGroup.Scene.RegionSyncModule != null)
|
||||||
{
|
{
|
||||||
m_parentGroup.Scene.RegionSyncModule.QueueSceneObjectPartForUpdate((SceneObjectPart)this);
|
m_parentGroup.Scene.RegionSyncModule.QueueSceneObjectPartForUpdate((SceneObjectPart)this);
|
||||||
}
|
}
|
||||||
//end of SYMMETRIC SYNC
|
* */
|
||||||
|
//end of DSG SYNC
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -3670,7 +3675,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
ParentGroup.HasGroupChanged = true;
|
ParentGroup.HasGroupChanged = true;
|
||||||
//ScheduleFullUpdate();
|
//ScheduleFullUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Text});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Text});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void StopLookAt()
|
public void StopLookAt()
|
||||||
|
@ -3678,7 +3683,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_parentGroup.stopLookAt();
|
m_parentGroup.stopLookAt();
|
||||||
|
|
||||||
//m_parentGroup.ScheduleGroupForTerseUpdate();
|
//m_parentGroup.ScheduleGroupForTerseUpdate();
|
||||||
m_parentGroup.ScheduleGroupForTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.None});//in stopLookAt(), PhysicsActor shall already take care of tainting which properties have been updated
|
m_parentGroup.ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None});//in stopLookAt(), PhysicsActor shall already take care of tainting which properties have been updated
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -3701,7 +3706,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_parentGroup.stopMoveToTarget();
|
m_parentGroup.stopMoveToTarget();
|
||||||
|
|
||||||
//m_parentGroup.ScheduleGroupForTerseUpdate();
|
//m_parentGroup.ScheduleGroupForTerseUpdate();
|
||||||
m_parentGroup.ScheduleGroupForTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.None}); //in stopMoveToTarget(), PhysicsActor shall already take care of tainting which properties have been updated
|
m_parentGroup.ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); //in stopMoveToTarget(), PhysicsActor shall already take care of tainting which properties have been updated
|
||||||
//m_parentGroup.ScheduleGroupForFullUpdate();
|
//m_parentGroup.ScheduleGroupForFullUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4250,7 +4255,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
ParentGroup.HasGroupChanged = true;
|
ParentGroup.HasGroupChanged = true;
|
||||||
//ScheduleFullUpdate();
|
//ScheduleFullUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Shape});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Shape});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateGroupPosition(Vector3 pos)
|
public void UpdateGroupPosition(Vector3 pos)
|
||||||
|
@ -4262,7 +4267,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
|
Vector3 newPos = new Vector3(pos.X, pos.Y, pos.Z);
|
||||||
GroupPosition = newPos;
|
GroupPosition = newPos;
|
||||||
//ScheduleTerseUpdate();
|
//ScheduleTerseUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.GroupPosition});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.GroupPosition});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4295,7 +4300,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
OffsetPosition = newPos;
|
OffsetPosition = newPos;
|
||||||
//ScheduleTerseUpdate();
|
//ScheduleTerseUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.OffsetPosition});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.OffsetPosition});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4585,7 +4590,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
|
|
||||||
ParentGroup.HasGroupChanged = true;
|
ParentGroup.HasGroupChanged = true;
|
||||||
//ScheduleFullUpdate();
|
//ScheduleFullUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>() { SceneObjectPartProperties.Flags});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.Flags});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateRotation(Quaternion rot)
|
public void UpdateRotation(Quaternion rot)
|
||||||
|
@ -4598,7 +4603,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
RotationOffset = rot;
|
RotationOffset = rot;
|
||||||
ParentGroup.HasGroupChanged = true;
|
ParentGroup.HasGroupChanged = true;
|
||||||
//ScheduleTerseUpdate();
|
//ScheduleTerseUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>() {SceneObjectPartProperties.RotationOffset});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() {SceneObjectPartSyncProperties.RotationOffset});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4644,7 +4649,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
ParentGroup.HasGroupChanged = true;
|
ParentGroup.HasGroupChanged = true;
|
||||||
TriggerScriptChangedEvent(Changed.SHAPE);
|
TriggerScriptChangedEvent(Changed.SHAPE);
|
||||||
//ScheduleFullUpdate();
|
//ScheduleFullUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>() {SceneObjectPartProperties.Shape});
|
|
||||||
|
//DSG DEBUG
|
||||||
|
//m_log.DebugFormat("{0}, {1}: shaped updated to {2}, calling ScheduleFullUpdate.", Name, UUID, Shape.ProfileShape);
|
||||||
|
|
||||||
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() {SceneObjectPartSyncProperties.Shape});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -4692,7 +4701,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//ParentGroup.ScheduleGroupForFullUpdate();
|
//ParentGroup.ScheduleGroupForFullUpdate();
|
||||||
//This is sparta
|
//This is sparta
|
||||||
//ScheduleFullUpdate();
|
//ScheduleFullUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>() {SceneObjectPartProperties.Shape});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() {SceneObjectPartSyncProperties.Shape});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void aggregateScriptEvents()
|
public void aggregateScriptEvents()
|
||||||
|
@ -4761,7 +4770,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents() since m_parentGroup == null", Name, LocalId);
|
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents() since m_parentGroup == null", Name, LocalId);
|
||||||
//ScheduleFullUpdate();
|
//ScheduleFullUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>() { SceneObjectPartProperties.Flags, SceneObjectPartProperties.AggregateScriptEvents});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.Flags, SceneObjectPartSyncProperties.AggregateScriptEvents});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4785,7 +4794,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId);
|
// "[SCENE OBJECT PART]: Scheduling part {0} {1} for full update in aggregateScriptEvents()", Name, LocalId);
|
||||||
//ScheduleFullUpdate();
|
//ScheduleFullUpdate();
|
||||||
ScheduleFullUpdate(new List<SceneObjectPartProperties>() { SceneObjectPartProperties.Flags, SceneObjectPartProperties.AggregateScriptEvents});
|
ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.Flags, SceneObjectPartSyncProperties.LocalFlags,
|
||||||
|
SceneObjectPartSyncProperties.AggregateScriptEvents});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4978,7 +4988,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.
|
||||||
|
@ -4993,7 +5003,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
|
||||||
|
@ -5150,7 +5160,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public enum SceneObjectPartProperties
|
public enum SceneObjectPartSyncProperties
|
||||||
{
|
{
|
||||||
None,
|
None,
|
||||||
//Following properties copied from SceneObjectSerializer(),
|
//Following properties copied from SceneObjectSerializer(),
|
||||||
|
@ -5160,12 +5170,12 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
FolderID ,
|
FolderID ,
|
||||||
InventorySerial,
|
InventorySerial,
|
||||||
TaskInventory,
|
TaskInventory,
|
||||||
//UUID",
|
//UUID", //UUID not supposed to be changed after SOP is created, not included in SyncProperties
|
||||||
//LocalId",
|
//LocalId",
|
||||||
Name,
|
Name,
|
||||||
Material,
|
Material,
|
||||||
PassTouches,
|
PassTouches,
|
||||||
RegionHandle,
|
//RegionHandle,
|
||||||
ScriptAccessPin,
|
ScriptAccessPin,
|
||||||
GroupPosition,
|
GroupPosition,
|
||||||
OffsetPosition,
|
OffsetPosition,
|
||||||
|
@ -5188,7 +5198,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
SitTargetPosition,
|
SitTargetPosition,
|
||||||
SitTargetPositionLL,
|
SitTargetPositionLL,
|
||||||
SitTargetOrientationLL,
|
SitTargetOrientationLL,
|
||||||
ParentID,
|
//ParentID,
|
||||||
CreationDate,
|
CreationDate,
|
||||||
Category,
|
Category,
|
||||||
SalePrice,
|
SalePrice,
|
||||||
|
@ -5208,7 +5218,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
MediaUrl,
|
MediaUrl,
|
||||||
TextureAnimation,
|
TextureAnimation,
|
||||||
ParticleSystem,
|
ParticleSystem,
|
||||||
//Property names below copied from PhysicsActor, they are necessary in synchronization, but not covered the above properties
|
//Property names below copied from PhysicsActor, they are necessary in
|
||||||
|
//synchronization, but not covered by xml serialization
|
||||||
//Physics properties "Velocity" is covered above
|
//Physics properties "Velocity" is covered above
|
||||||
Position,
|
Position,
|
||||||
Size,
|
Size,
|
||||||
|
@ -5221,19 +5232,22 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
Flying,
|
Flying,
|
||||||
Buoyancy,
|
Buoyancy,
|
||||||
Kinematic,
|
Kinematic,
|
||||||
IsCollidingGround,
|
CollidingGround,
|
||||||
IsColliding,
|
IsColliding,
|
||||||
//TODO!!!! To be handled in serialization/deserizaltion for synchronization
|
|
||||||
|
//Properties need to be synced, but not in xml serializations
|
||||||
AggregateScriptEvents,
|
AggregateScriptEvents,
|
||||||
IsAttachment,
|
|
||||||
AttachedAvatar,
|
AttachedAvatar,
|
||||||
AttachedPos,
|
AttachedPos,
|
||||||
AttachmentPoint,
|
AttachmentPoint,
|
||||||
|
IsAttachment,
|
||||||
|
LocalFlags,
|
||||||
//TODO!!!! To be handled in serialization/deserizaltion for synchronization
|
//TODO!!!! To be handled in serialization/deserizaltion for synchronization
|
||||||
IsSelected,
|
|
||||||
Sound, //This indicates any Sound related property has changed: Sound, SoundGain, SoundFlags,SoundRadius,
|
Sound, //This indicates any Sound related property has changed: Sound, SoundGain, SoundFlags,SoundRadius,
|
||||||
//Addition properties to be added here
|
//Addition properties to be added here
|
||||||
|
|
||||||
|
//Group properties
|
||||||
|
IsSelected,
|
||||||
//Client Manager may want to add some property here that viewers care about and should be synchronized across actors
|
//Client Manager may want to add some property here that viewers care about and should be synchronized across actors
|
||||||
|
|
||||||
FullUpdate,
|
FullUpdate,
|
||||||
|
@ -5266,7 +5280,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//TODO: serialization and deserialization processors to be added in SceneObjectSerializer
|
//TODO: serialization and deserialization processors to be added in SceneObjectSerializer
|
||||||
|
|
||||||
//The following variables are initialized when RegionSyncModule reads the config file for mapping of properties and buckets
|
//The following variables are initialized when RegionSyncModule reads the config file for mapping of properties and buckets
|
||||||
private static Dictionary<SceneObjectPartProperties, string> m_primPropertyBucketMap = null;
|
private static Dictionary<SceneObjectPartSyncProperties, string> m_primPropertyBucketMap = null;
|
||||||
private static List<string> m_propertyBucketNames = null;
|
private static List<string> m_propertyBucketNames = null;
|
||||||
|
|
||||||
private static string m_localActorID = "";
|
private static string m_localActorID = "";
|
||||||
|
@ -5359,8 +5373,111 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
};
|
};
|
||||||
* */
|
* */
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Return the list of all prim (SOP) properties, in enum type.
|
||||||
|
/// Excluding None, FullUpdate.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static HashSet<SceneObjectPartSyncProperties> GetAllPrimProperties()
|
||||||
|
{
|
||||||
|
HashSet<SceneObjectPartSyncProperties> allProperties = new HashSet<SceneObjectPartSyncProperties>();
|
||||||
|
foreach (SceneObjectPartSyncProperties property in Enum.GetValues(typeof(SceneObjectPartSyncProperties)))
|
||||||
|
{
|
||||||
|
switch (property)
|
||||||
|
{
|
||||||
|
case SceneObjectPartSyncProperties.None:
|
||||||
|
case SceneObjectPartSyncProperties.FullUpdate:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
allProperties.Add(property);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return allProperties;
|
||||||
|
}
|
||||||
|
|
||||||
public static void InitializePropertyBucketInfo(Dictionary<SceneObjectPartProperties, string> propertyBucketMap, List<string> bucketNames, string actorID)
|
public static HashSet<SceneObjectPartSyncProperties> GetAllPrimNonPhysActorProperties()
|
||||||
|
{
|
||||||
|
HashSet<SceneObjectPartSyncProperties> allProperties = new HashSet<SceneObjectPartSyncProperties>();
|
||||||
|
foreach (SceneObjectPartSyncProperties property in Enum.GetValues(typeof(SceneObjectPartSyncProperties)))
|
||||||
|
{
|
||||||
|
switch (property)
|
||||||
|
{
|
||||||
|
//Enum value that is not real properties
|
||||||
|
case SceneObjectPartSyncProperties.None:
|
||||||
|
case SceneObjectPartSyncProperties.FullUpdate:
|
||||||
|
//PhysActor properties
|
||||||
|
case SceneObjectPartSyncProperties.Buoyancy:
|
||||||
|
case SceneObjectPartSyncProperties.Flying:
|
||||||
|
case SceneObjectPartSyncProperties.Force:
|
||||||
|
case SceneObjectPartSyncProperties.IsColliding:
|
||||||
|
case SceneObjectPartSyncProperties.CollidingGround:
|
||||||
|
case SceneObjectPartSyncProperties.IsPhysical:
|
||||||
|
case SceneObjectPartSyncProperties.Kinematic:
|
||||||
|
case SceneObjectPartSyncProperties.Orientation:
|
||||||
|
case SceneObjectPartSyncProperties.PA_Acceleration:
|
||||||
|
case SceneObjectPartSyncProperties.Position:
|
||||||
|
case SceneObjectPartSyncProperties.RotationalVelocity:
|
||||||
|
case SceneObjectPartSyncProperties.Size:
|
||||||
|
case SceneObjectPartSyncProperties.Torque:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
allProperties.Add(property);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return allProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HashSet<SceneObjectPartSyncProperties> GetAllPhysActorProperties()
|
||||||
|
{
|
||||||
|
HashSet<SceneObjectPartSyncProperties> allProperties = new HashSet<SceneObjectPartSyncProperties>();
|
||||||
|
foreach (SceneObjectPartSyncProperties property in Enum.GetValues(typeof(SceneObjectPartSyncProperties)))
|
||||||
|
{
|
||||||
|
switch (property)
|
||||||
|
{
|
||||||
|
//PhysActor properties
|
||||||
|
case SceneObjectPartSyncProperties.Buoyancy:
|
||||||
|
case SceneObjectPartSyncProperties.Flying:
|
||||||
|
case SceneObjectPartSyncProperties.Force:
|
||||||
|
case SceneObjectPartSyncProperties.IsColliding:
|
||||||
|
case SceneObjectPartSyncProperties.CollidingGround:
|
||||||
|
case SceneObjectPartSyncProperties.IsPhysical:
|
||||||
|
case SceneObjectPartSyncProperties.Kinematic:
|
||||||
|
case SceneObjectPartSyncProperties.Orientation:
|
||||||
|
case SceneObjectPartSyncProperties.PA_Acceleration:
|
||||||
|
case SceneObjectPartSyncProperties.Position:
|
||||||
|
case SceneObjectPartSyncProperties.RotationalVelocity:
|
||||||
|
case SceneObjectPartSyncProperties.Size:
|
||||||
|
case SceneObjectPartSyncProperties.Torque:
|
||||||
|
allProperties.Add(property);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return allProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HashSet<SceneObjectPartSyncProperties> GetAllNonPhysActorProperties()
|
||||||
|
{
|
||||||
|
HashSet<SceneObjectPartSyncProperties> allProperties = GetAllPrimProperties();
|
||||||
|
HashSet<SceneObjectPartSyncProperties> physActorProperties = GetAllPhysActorProperties();
|
||||||
|
|
||||||
|
foreach (SceneObjectPartSyncProperties pProperty in physActorProperties)
|
||||||
|
{
|
||||||
|
allProperties.Remove(pProperty);
|
||||||
|
}
|
||||||
|
return allProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HashSet<SceneObjectPartSyncProperties> GetGroupProperties()
|
||||||
|
{
|
||||||
|
HashSet<SceneObjectPartSyncProperties> allProperties = new HashSet<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.IsSelected};
|
||||||
|
return allProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void InitializePropertyBucketInfo(Dictionary<SceneObjectPartSyncProperties, string> propertyBucketMap, List<string> bucketNames, string actorID)
|
||||||
{
|
{
|
||||||
m_primPropertyBucketMap = propertyBucketMap;
|
m_primPropertyBucketMap = propertyBucketMap;
|
||||||
m_propertyBucketNames = bucketNames;
|
m_propertyBucketNames = bucketNames;
|
||||||
|
@ -5373,11 +5490,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public string DebugObjectPartProperties()
|
public string DebugObjectPartProperties()
|
||||||
{
|
{
|
||||||
string debugMsg = "UUID " + UUID + ", Name " + Name + ", localID " + LocalId;
|
string debugMsg = "UUID " + UUID + ", Name " + Name + ", localID " + LocalId;
|
||||||
debugMsg += ", parentID " + ParentID + ", parentUUID " + ParentUUID;
|
//debugMsg += ", parentID " + ParentID + ", parentUUID " + ParentUUID;
|
||||||
foreach (KeyValuePair<string, BucketSyncInfo> pair in m_bucketSyncInfoList)
|
//foreach (KeyValuePair<string, BucketSyncInfo> pair in m_bucketSyncInfoList)
|
||||||
{
|
//{
|
||||||
debugMsg += ", Bucket " + pair.Key + ": TimeStamp - " + pair.Value.LastUpdateTimeStamp + ", ActorID - " + pair.Value.LastUpdateActorID;
|
// debugMsg += ", Bucket " + pair.Key + ": TimeStamp - " + pair.Value.LastUpdateTimeStamp + ", ActorID - " + pair.Value.LastUpdateActorID;
|
||||||
}
|
//}
|
||||||
|
debugMsg += ", AggregateScriptEvents = " + AggregateScriptEvents.ToString()+", OffsetPosition: "+OffsetPosition;
|
||||||
|
String hashedShape = Util.Md5Hash(SerializeShape());
|
||||||
|
debugMsg += ", hashed Shape = " + hashedShape;
|
||||||
return debugMsg;
|
return debugMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5705,14 +5825,14 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
}
|
}
|
||||||
|
|
||||||
//For tainitng and clearing taints, do i need to lock on m_bucketSyncTaint?
|
//For tainitng and clearing taints, do i need to lock on m_bucketSyncTaint?
|
||||||
public void TaintBucketSyncInfo(SceneObjectPartProperties property)
|
public void TaintBucketSyncInfo(SceneObjectPartSyncProperties property)
|
||||||
{
|
{
|
||||||
if (m_syncEnabled)
|
if (m_syncEnabled)
|
||||||
{
|
{
|
||||||
if (property == SceneObjectPartProperties.None)
|
if (property == SceneObjectPartSyncProperties.None)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (property == SceneObjectPartProperties.FullUpdate)
|
if (property == SceneObjectPartSyncProperties.FullUpdate)
|
||||||
{
|
{
|
||||||
foreach (BucketSyncInfo bucketSynInfo in m_bucketSyncInfoList.Values)
|
foreach (BucketSyncInfo bucketSynInfo in m_bucketSyncInfoList.Values)
|
||||||
{
|
{
|
||||||
|
@ -5800,7 +5920,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// Update the timestamp and actorID information of the bucket the given property belongs to.
|
/// Update the timestamp and actorID information of the bucket the given property belongs to.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="propertyName">Name of the property. Make sure the spelling is consistent with what are defined in PropertyList</param>
|
/// <param name="propertyName">Name of the property. Make sure the spelling is consistent with what are defined in PropertyList</param>
|
||||||
public void UpdateBucketSyncInfo(SceneObjectPartProperties property)
|
public void UpdateBucketSyncInfo(SceneObjectPartSyncProperties property)
|
||||||
{
|
{
|
||||||
if (m_syncEnabled && m_bucketSyncInfoList != null && m_bucketSyncInfoList.Count > 0)
|
if (m_syncEnabled && m_bucketSyncInfoList != null && m_bucketSyncInfoList.Count > 0)
|
||||||
{
|
{
|
||||||
|
@ -5936,6 +6056,9 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
return partUpdateResult;
|
return partUpdateResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Implementation of ScheduleFullUpdate and ScheduleTerseUpdate for Bucket
|
||||||
|
//based synchronization
|
||||||
|
/*
|
||||||
public override void ScheduleFullUpdate(List<SceneObjectPartProperties> updatedProperties)
|
public override void ScheduleFullUpdate(List<SceneObjectPartProperties> updatedProperties)
|
||||||
{
|
{
|
||||||
if (updatedProperties != null && updatedProperties.Count > 0)
|
if (updatedProperties != null && updatedProperties.Count > 0)
|
||||||
|
@ -5963,6 +6086,49 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
base.ScheduleTerseUpdate(updatedProperties);
|
base.ScheduleTerseUpdate(updatedProperties);
|
||||||
//TaintBucketSyncInfo(property);
|
//TaintBucketSyncInfo(property);
|
||||||
}
|
}
|
||||||
|
* */
|
||||||
|
|
||||||
|
//Implementation of ScheduleFullUpdate and ScheduleTerseUpdate for Bucket
|
||||||
|
//based synchronization
|
||||||
|
public override void ScheduleFullUpdate(List<SceneObjectPartSyncProperties> updatedProperties)
|
||||||
|
{
|
||||||
|
if (updatedProperties != null && updatedProperties.Count > 0)
|
||||||
|
{
|
||||||
|
if (m_parentGroup != null && m_parentGroup.Scene != null && m_parentGroup.Scene.RegionSyncModule != null)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
if (updatedProperties.Contains(SceneObjectPartSyncProperties.Shape))
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("{0}, {1} -- calling ProcessAndEnqueuePrimUpdatesByLocal to update to Shape {2}", Name, UUID, Shape.ProfileShape);
|
||||||
|
}
|
||||||
|
* */
|
||||||
|
m_parentGroup.Scene.RegionSyncModule.ProcessAndEnqueuePrimUpdatesByLocal(this, updatedProperties);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (updatedProperties.Contains(SceneObjectPartSyncProperties.Shape))
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("{0}, {1} Shape changed to {2}, but this SOP not attached to Scene yet", Name, UUID, Shape.ProfileShape);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
base.ScheduleFullUpdate(updatedProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ScheduleTerseUpdate(List<SceneObjectPartSyncProperties> updatedProperties)
|
||||||
|
{
|
||||||
|
if (updatedProperties != null && updatedProperties.Count > 0)
|
||||||
|
{
|
||||||
|
if (m_parentGroup != null && m_parentGroup.Scene != null && m_parentGroup.Scene.RegionSyncModule != null)
|
||||||
|
{
|
||||||
|
m_parentGroup.Scene.RegionSyncModule.ProcessAndEnqueuePrimUpdatesByLocal(this, updatedProperties);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
base.ScheduleTerseUpdate(updatedProperties);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Schedules this prim for a full update, without changing the timestamp or actorID (info on when and who modified any property).
|
/// Schedules this prim for a full update, without changing the timestamp or actorID (info on when and who modified any property).
|
||||||
|
@ -5970,36 +6136,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void ScheduleFullUpdate_SyncInfoUnchanged()
|
public void ScheduleFullUpdate_SyncInfoUnchanged()
|
||||||
{
|
{
|
||||||
//m_log.DebugFormat("[SCENE OBJECT PART]: ScheduleFullUpdate_SyncInfoUnchanged for {0} {1}", Name, LocalId);
|
base.ScheduleFullUpdate(null);
|
||||||
|
|
||||||
if (m_parentGroup != null)
|
|
||||||
{
|
|
||||||
m_parentGroup.QueueForUpdateCheck();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int timeNow = Util.UnixTimeSinceEpoch();
|
public bool UpdateCollisionSound(UUID updatedCollisionSound)
|
||||||
|
|
||||||
// If multiple updates are scheduled on the same second, we still need to perform all of them
|
|
||||||
// So we'll force the issue by bumping up the timestamp so that later processing sees these need
|
|
||||||
// to be performed.
|
|
||||||
if (timeNow <= TimeStampFull)
|
|
||||||
{
|
|
||||||
TimeStampFull += 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TimeStampFull = (uint)timeNow;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_updateFlag = 2;
|
|
||||||
|
|
||||||
// m_log.DebugFormat(
|
|
||||||
// "[SCENE OBJECT PART]: Scheduling full update for {0}, {1} at {2}",
|
|
||||||
// UUID, Name, TimeStampFull);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool UpdateCollisionSound(UUID updatedCollisionSound)
|
|
||||||
{
|
{
|
||||||
if (this.CollisionSound != updatedCollisionSound)
|
if (this.CollisionSound != updatedCollisionSound)
|
||||||
{
|
{
|
||||||
|
@ -6032,7 +6172,27 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
base.PhysicsCollision(e);
|
base.PhysicsCollision(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
//Per property sync functions
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
|
||||||
|
//For debugging, same implemenation with PropertySerializer.SerializeShape
|
||||||
|
private string SerializeShape()
|
||||||
|
{
|
||||||
|
string serializedShape;
|
||||||
|
using (StringWriter sw = new StringWriter())
|
||||||
|
{
|
||||||
|
using (XmlTextWriter writer = new XmlTextWriter(sw))
|
||||||
|
{
|
||||||
|
SceneObjectSerializer.WriteShape(writer, Shape, new Dictionary<string, object>());
|
||||||
|
}
|
||||||
|
serializedShape = sw.ToString();
|
||||||
|
}
|
||||||
|
return serializedShape;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//end of SYMMETRIC SYNC
|
//end of DSG SYNC
|
||||||
}
|
}
|
||||||
|
|
|
@ -294,7 +294,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
|
m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
|
||||||
m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource);
|
m_part.LocalId, item.ItemID, String.Empty, startParam, postOnRez, engine, stateSource);
|
||||||
m_part.ParentGroup.AddActiveScriptCount(1);
|
m_part.ParentGroup.AddActiveScriptCount(1);
|
||||||
m_part.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Flags, SceneObjectPartProperties.TaskInventory});
|
m_part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Flags, SceneObjectPartSyncProperties.TaskInventory});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
|
m_part.ParentGroup.Scene.EventManager.TriggerRezScript(
|
||||||
m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource);
|
m_part.LocalId, item.ItemID, script, startParam, postOnRez, engine, stateSource);
|
||||||
m_part.ParentGroup.AddActiveScriptCount(1);
|
m_part.ParentGroup.AddActiveScriptCount(1);
|
||||||
m_part.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Flags, SceneObjectPartProperties.TaskInventory});
|
m_part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Flags, SceneObjectPartSyncProperties.TaskInventory});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -545,8 +545,8 @@ 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<SceneObjectPartProperties>(){SceneObjectPartProperties.TaskInventory, SceneObjectPartProperties.InventorySerial});
|
m_part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.TaskInventory, SceneObjectPartSyncProperties.InventorySerial});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -769,7 +769,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
if (!ContainsScripts())
|
if (!ContainsScripts())
|
||||||
m_part.RemFlag(PrimFlags.Scripted);
|
m_part.RemFlag(PrimFlags.Scripted);
|
||||||
|
|
||||||
m_part.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.TaskInventory});
|
m_part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.TaskInventory});
|
||||||
|
|
||||||
return type;
|
return type;
|
||||||
|
|
||||||
|
@ -1183,7 +1183,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;
|
||||||
|
|
|
@ -232,7 +232,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();
|
||||||
|
|
||||||
|
@ -346,7 +346,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);
|
||||||
|
@ -357,7 +357,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
|
||||||
|
|
||||||
|
@ -442,7 +442,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);
|
||||||
|
@ -595,7 +595,6 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
private static void ProcessScale(SceneObjectPart obj, XmlTextReader reader)
|
private static void ProcessScale(SceneObjectPart obj, XmlTextReader reader)
|
||||||
{
|
{
|
||||||
obj.Scale = Util.ReadVector(reader, "Scale");
|
obj.Scale = Util.ReadVector(reader, "Scale");
|
||||||
//obj.SetScale(Util.ReadVector(reader, "Scale"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void ProcessUpdateFlag(SceneObjectPart obj, XmlTextReader reader)
|
private static void ProcessUpdateFlag(SceneObjectPart obj, XmlTextReader reader)
|
||||||
|
@ -724,7 +723,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)
|
||||||
{
|
{
|
||||||
|
@ -817,7 +816,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
reader.ReadEndElement(); // BucketSyncInfoList
|
reader.ReadEndElement(); // BucketSyncInfoList
|
||||||
}
|
}
|
||||||
|
|
||||||
//end of SYMMETRIC SYNC
|
//end of DSG SYNC
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -1289,10 +1288,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)
|
||||||
|
@ -1300,7 +1299,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);
|
||||||
|
@ -1309,12 +1308,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
|
||||||
|
@ -1336,7 +1335,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)
|
||||||
{
|
{
|
||||||
|
@ -1386,7 +1385,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
writer.WriteElementString(name, flagsStr.Replace(",", ""));
|
writer.WriteElementString(name, flagsStr.Replace(",", ""));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WriteTaskInventory(XmlTextWriter writer, TaskInventoryDictionary tinv, Dictionary<string, object> options, Scene scene)
|
//DSG SYNC: make it a public function, so that we can call serialization of TaskInventory from other places
|
||||||
|
//static void WriteTaskInventory(XmlTextWriter writer, TaskInventoryDictionary tinv, Dictionary<string, object> options, Scene scene)
|
||||||
|
public static void WriteTaskInventory(XmlTextWriter writer, TaskInventoryDictionary tinv, Dictionary<string, object> options, Scene scene)
|
||||||
{
|
{
|
||||||
if (tinv.Count > 0) // otherwise skip this
|
if (tinv.Count > 0) // otherwise skip this
|
||||||
{
|
{
|
||||||
|
@ -1440,7 +1441,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WriteShape(XmlTextWriter writer, PrimitiveBaseShape shp, Dictionary<string, object> options)
|
//DSG SYNC: make it a public function, so that we can call serialization of Shape from other places
|
||||||
|
//static void WriteShape(XmlTextWriter writer, PrimitiveBaseShape shp, Dictionary<string, object> options)
|
||||||
|
public static void WriteShape(XmlTextWriter writer, PrimitiveBaseShape shp, Dictionary<string, object> options)
|
||||||
{
|
{
|
||||||
if (shp != null)
|
if (shp != null)
|
||||||
{
|
{
|
||||||
|
@ -1484,6 +1487,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
writer.WriteElementString("ProfileBegin", shp.ProfileBegin.ToString());
|
writer.WriteElementString("ProfileBegin", shp.ProfileBegin.ToString());
|
||||||
writer.WriteElementString("ProfileEnd", shp.ProfileEnd.ToString());
|
writer.WriteElementString("ProfileEnd", shp.ProfileEnd.ToString());
|
||||||
writer.WriteElementString("ProfileHollow", shp.ProfileHollow.ToString());
|
writer.WriteElementString("ProfileHollow", shp.ProfileHollow.ToString());
|
||||||
|
//DSG SYNC: added serialization of Shape
|
||||||
|
WriteVector(writer, "Scale", shp.Scale);
|
||||||
|
//end of DSG SYNC
|
||||||
writer.WriteElementString("State", shp.State.ToString());
|
writer.WriteElementString("State", shp.State.ToString());
|
||||||
|
|
||||||
WriteFlags(writer, "ProfileShape", shp.ProfileShape.ToString(), options);
|
WriteFlags(writer, "ProfileShape", shp.ProfileShape.ToString(), options);
|
||||||
|
@ -1613,7 +1619,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static TaskInventoryDictionary ReadTaskInventory(XmlTextReader reader, string name)
|
//DSG SYNC: make it public to be called outside
|
||||||
|
//static TaskInventoryDictionary ReadTaskInventory(XmlTextReader reader, string name)
|
||||||
|
public static TaskInventoryDictionary ReadTaskInventory(XmlTextReader reader, string name)
|
||||||
{
|
{
|
||||||
TaskInventoryDictionary tinv = new TaskInventoryDictionary();
|
TaskInventoryDictionary tinv = new TaskInventoryDictionary();
|
||||||
|
|
||||||
|
@ -1652,7 +1660,9 @@ namespace OpenSim.Region.Framework.Scenes.Serialization
|
||||||
return tinv;
|
return tinv;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PrimitiveBaseShape ReadShape(XmlTextReader reader, string name)
|
//DSG SYNC: make it public to be called outside
|
||||||
|
//static PrimitiveBaseShape ReadShape(XmlTextReader reader, string name)
|
||||||
|
public static PrimitiveBaseShape ReadShape(XmlTextReader reader, string name)
|
||||||
{
|
{
|
||||||
PrimitiveBaseShape shape = new PrimitiveBaseShape();
|
PrimitiveBaseShape shape = new PrimitiveBaseShape();
|
||||||
|
|
||||||
|
|
|
@ -94,13 +94,13 @@ 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<SceneObjectPartProperties> updatedProperties = new List<SceneObjectPartProperties>();
|
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>();
|
||||||
updatedProperties.Add(SceneObjectPartProperties.RotationOffset);
|
updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset);
|
||||||
if (Position != Vector3.Zero)
|
if (Position != Vector3.Zero)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.Position);
|
updatedProperties.Add(SceneObjectPartSyncProperties.Position);
|
||||||
if (Scale != Vector3.Zero)
|
if (Scale != Vector3.Zero)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.Scale);
|
updatedProperties.Add(SceneObjectPartSyncProperties.Scale);
|
||||||
part.ParentGroup.ScheduleGroupForTerseUpdate(updatedProperties);
|
part.ParentGroup.ScheduleGroupForTerseUpdate(updatedProperties);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -110,13 +110,13 @@ 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<SceneObjectPartProperties> updatedProperties = new List<SceneObjectPartProperties>();
|
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>();
|
||||||
updatedProperties.Add(SceneObjectPartProperties.RotationOffset);
|
updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset);
|
||||||
if (Position != Vector3.Zero)
|
if (Position != Vector3.Zero)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.OffsetPosition);
|
updatedProperties.Add(SceneObjectPartSyncProperties.OffsetPosition);
|
||||||
if (Scale != Vector3.Zero)
|
if (Scale != Vector3.Zero)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.Scale);
|
updatedProperties.Add(SceneObjectPartSyncProperties.Scale);
|
||||||
part.ScheduleTerseUpdate(updatedProperties);
|
part.ScheduleTerseUpdate(updatedProperties);
|
||||||
}
|
}
|
||||||
part.Undoing = false;
|
part.Undoing = false;
|
||||||
|
@ -138,14 +138,14 @@ 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<SceneObjectPartProperties> updatedProperties = new List<SceneObjectPartProperties>();
|
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>();
|
||||||
if (Rotation != Quaternion.Identity)
|
if (Rotation != Quaternion.Identity)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.RotationOffset);
|
updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset);
|
||||||
if (Position != Vector3.Zero)
|
if (Position != Vector3.Zero)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.Position);
|
updatedProperties.Add(SceneObjectPartSyncProperties.Position);
|
||||||
if (Scale != Vector3.Zero)
|
if (Scale != Vector3.Zero)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.Scale);
|
updatedProperties.Add(SceneObjectPartSyncProperties.Scale);
|
||||||
part.ParentGroup.ScheduleGroupForTerseUpdate(updatedProperties);
|
part.ParentGroup.ScheduleGroupForTerseUpdate(updatedProperties);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -157,14 +157,14 @@ 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<SceneObjectPartProperties> updatedProperties = new List<SceneObjectPartProperties>();
|
List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>();
|
||||||
if (Rotation != Quaternion.Identity)
|
if (Rotation != Quaternion.Identity)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.RotationOffset);
|
updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset);
|
||||||
if (Position != Vector3.Zero)
|
if (Position != Vector3.Zero)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.Position);
|
updatedProperties.Add(SceneObjectPartSyncProperties.Position);
|
||||||
if (Scale != Vector3.Zero)
|
if (Scale != Vector3.Zero)
|
||||||
updatedProperties.Add(SceneObjectPartProperties.Scale);
|
updatedProperties.Add(SceneObjectPartSyncProperties.Scale);
|
||||||
part.ScheduleTerseUpdate(updatedProperties);
|
part.ScheduleTerseUpdate(updatedProperties);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -291,7 +291,7 @@ namespace OpenSim.Region.OptionalModules.ContentManagement
|
||||||
((SceneObjectGroup)ent).AttachToBackup();
|
((SceneObjectGroup)ent).AttachToBackup();
|
||||||
((SceneObjectGroup)ent).HasGroupChanged = true; // If not true, then attaching to backup does nothing because no change is detected.
|
((SceneObjectGroup)ent).HasGroupChanged = true; // If not true, then attaching to backup does nothing because no change is detected.
|
||||||
//((SceneObjectGroup)ent).ScheduleGroupForFullUpdate();
|
//((SceneObjectGroup)ent).ScheduleGroupForFullUpdate();
|
||||||
((SceneObjectGroup)ent).ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.FullUpdate}); //don't know what properties to taint, so just taint all
|
((SceneObjectGroup)ent).ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.FullUpdate}); //don't know what properties to taint, so just taint all
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(Exception e)
|
||||||
{
|
{
|
||||||
|
|
|
@ -641,7 +641,7 @@ namespace OpenSim.Region.OptionalModules.World.TreePopulator
|
||||||
s_tree.Scale += copse.m_rate;
|
s_tree.Scale += copse.m_rate;
|
||||||
s_tree.ParentGroup.HasGroupChanged = true;
|
s_tree.ParentGroup.HasGroupChanged = true;
|
||||||
//s_tree.ScheduleFullUpdate();
|
//s_tree.ScheduleFullUpdate();
|
||||||
s_tree.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Scale});
|
s_tree.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Scale});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -1388,6 +1388,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
tmp.Z = (float)scale.z;
|
tmp.Z = (float)scale.z;
|
||||||
part.Scale = tmp;
|
part.Scale = tmp;
|
||||||
part.SendFullUpdateToAllClients();
|
part.SendFullUpdateToAllClients();
|
||||||
|
|
||||||
|
//DSG SYNC
|
||||||
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.Scale });
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Vector llGetScale()
|
public LSL_Vector llGetScale()
|
||||||
|
@ -1402,7 +1405,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.ClickAction = (byte)action;
|
m_host.ClickAction = (byte)action;
|
||||||
if (m_host.ParentGroup != null) m_host.ParentGroup.HasGroupChanged = true;
|
if (m_host.ParentGroup != null) m_host.ParentGroup.HasGroupChanged = true;
|
||||||
//m_host.ScheduleFullUpdate();
|
//m_host.ScheduleFullUpdate();
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.ClickAction});
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.ClickAction});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1655,7 +1658,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
part.ParentGroup.HasGroupChanged = true;
|
part.ParentGroup.HasGroupChanged = true;
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
part.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Shape});
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Shape});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -1691,7 +1694,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
part.ParentGroup.HasGroupChanged = true;
|
part.ParentGroup.HasGroupChanged = true;
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
part.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Shape});
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Shape});
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Vector llGetColor(int face)
|
public LSL_Vector llGetColor(int face)
|
||||||
|
@ -1967,7 +1970,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
SceneObjectGroup parent = part.ParentGroup;
|
SceneObjectGroup parent = part.ParentGroup;
|
||||||
parent.HasGroupChanged = true;
|
parent.HasGroupChanged = true;
|
||||||
//parent.ScheduleGroupForTerseUpdate();
|
//parent.ScheduleGroupForTerseUpdate();
|
||||||
parent.ScheduleGroupForTerseUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.OffsetPosition});
|
parent.ScheduleGroupForTerseUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.OffsetPosition});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2314,7 +2317,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
||||||
|
|
||||||
//m_host.ScheduleFullUpdate();
|
//m_host.ScheduleFullUpdate();
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Sound});
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Sound});
|
||||||
m_host.SendFullUpdateToAllClients();
|
m_host.SendFullUpdateToAllClients();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2335,7 +2338,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
prim.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
prim.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
||||||
|
|
||||||
//prim.ScheduleFullUpdate();
|
//prim.ScheduleFullUpdate();
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Sound});
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Sound});
|
||||||
prim.SendFullUpdateToAllClients();
|
prim.SendFullUpdateToAllClients();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2348,7 +2351,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
m_host.SoundRadius = 20; // Magic number, 20 seems reasonable. Make configurable?
|
||||||
|
|
||||||
//m_host.ScheduleFullUpdate();
|
//m_host.ScheduleFullUpdate();
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Sound});
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Sound});
|
||||||
m_host.SendFullUpdateToAllClients();
|
m_host.SendFullUpdateToAllClients();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2391,7 +2394,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
part.SoundFlags = 0;
|
part.SoundFlags = 0;
|
||||||
part.SoundRadius = 0;
|
part.SoundRadius = 0;
|
||||||
//part.ScheduleFullUpdate();
|
//part.ScheduleFullUpdate();
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Sound});
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Sound});
|
||||||
part.SendFullUpdateToAllClients();
|
part.SendFullUpdateToAllClients();
|
||||||
}
|
}
|
||||||
m_host.ParentGroup.LoopSoundMasterPrim = null;
|
m_host.ParentGroup.LoopSoundMasterPrim = null;
|
||||||
|
@ -2404,7 +2407,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.SoundFlags = 0;
|
m_host.SoundFlags = 0;
|
||||||
m_host.SoundRadius = 0;
|
m_host.SoundRadius = 0;
|
||||||
//m_host.ScheduleFullUpdate();
|
//m_host.ScheduleFullUpdate();
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Sound});
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Sound});
|
||||||
m_host.SendFullUpdateToAllClients();
|
m_host.SendFullUpdateToAllClients();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2415,7 +2418,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.SoundFlags = 0;
|
m_host.SoundFlags = 0;
|
||||||
m_host.SoundRadius = 0;
|
m_host.SoundRadius = 0;
|
||||||
//m_host.ScheduleFullUpdate();
|
//m_host.ScheduleFullUpdate();
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Sound});
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Sound});
|
||||||
m_host.SendFullUpdateToAllClients();
|
m_host.SendFullUpdateToAllClients();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3326,7 +3329,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.AddScriptLPS(1);
|
m_host.AddScriptLPS(1);
|
||||||
m_host.AngularVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
|
m_host.AngularVelocity = new Vector3((float)(axis.x * spinrate), (float)(axis.y * spinrate), (float)(axis.z * spinrate));
|
||||||
//m_host.ScheduleTerseUpdate();
|
//m_host.ScheduleTerseUpdate();
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.AngularVelocity});
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.AngularVelocity});
|
||||||
m_host.SendTerseUpdateToAllClients();
|
m_host.SendTerseUpdateToAllClients();
|
||||||
m_host.ParentGroup.HasGroupChanged = true;
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
}
|
}
|
||||||
|
@ -3612,17 +3615,18 @@ 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)
|
||||||
{
|
{
|
||||||
//Tell other actors to link the SceneObjectParts together as a new group.
|
//Tell other actors to link the SceneObjectParts together as a new group.
|
||||||
//parentGroup.SyncInfoUpdate();
|
//parentGroup.SyncInfoUpdate();
|
||||||
World.RegionSyncModule.SendLinkObject(parentPrim, parentPrim.RootPart, children);
|
//World.RegionSyncModule.SendLinkObject(parentPrim, parentPrim.RootPart, children);
|
||||||
|
World.RegionSyncModule.SyncLinkObject(parentPrim, parentPrim.RootPart, children);
|
||||||
}
|
}
|
||||||
m_host.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.None}); //SendLinkObject above will synchronize the link operation, no need to taint updates here
|
m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.None }); //SyncLinkObject 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);
|
||||||
|
@ -3680,11 +3684,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);
|
||||||
|
@ -3692,19 +3696,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<SceneObjectPartProperties>(){SceneObjectPartProperties.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)
|
||||||
|
@ -3718,13 +3722,14 @@ 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));
|
||||||
|
World.RegionSyncModule.SyncLinkObject(newRoot.ParentGroup, newRoot, new List<SceneObjectPart>(newRoot.ParentGroup.Parts));
|
||||||
}
|
}
|
||||||
newRoot.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.None});
|
newRoot.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None});
|
||||||
//end of SYMMETRIC SYNC
|
//end of DSG SYNC
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3736,7 +3741,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)
|
||||||
{
|
{
|
||||||
|
@ -3746,7 +3751,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);
|
||||||
}
|
}
|
||||||
|
@ -3759,12 +3764,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);
|
||||||
|
@ -3773,7 +3778,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;
|
||||||
|
@ -3785,8 +3790,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
afterDelinkGroups.Add(rootPart.ParentGroup);
|
afterDelinkGroups.Add(rootPart.ParentGroup);
|
||||||
World.RegionSyncModule.SendDeLinkObject(parts, beforeDelinkGroups, afterDelinkGroups);
|
World.RegionSyncModule.SendDeLinkObject(parts, beforeDelinkGroups, afterDelinkGroups);
|
||||||
}
|
}
|
||||||
parentPrim.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.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)
|
||||||
|
@ -4025,7 +4030,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f));
|
m_host.SetText(text, av3, Util.Clip((float)alpha, 0.0f, 1.0f));
|
||||||
m_host.ParentGroup.HasGroupChanged = true;
|
m_host.ParentGroup.HasGroupChanged = true;
|
||||||
//m_host.ParentGroup.ScheduleGroupForFullUpdate();
|
//m_host.ParentGroup.ScheduleGroupForFullUpdate();
|
||||||
m_host.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Text});
|
m_host.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Text});
|
||||||
}
|
}
|
||||||
|
|
||||||
public LSL_Float llWater(LSL_Vector offset)
|
public LSL_Float llWater(LSL_Vector offset)
|
||||||
|
@ -5677,6 +5682,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
part.AddTextureAnimation(pTexAnim);
|
part.AddTextureAnimation(pTexAnim);
|
||||||
part.SendFullUpdateToAllClients();
|
part.SendFullUpdateToAllClients();
|
||||||
part.ParentGroup.HasGroupChanged = true;
|
part.ParentGroup.HasGroupChanged = true;
|
||||||
|
|
||||||
|
//DSG SYNC
|
||||||
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.TextureAnimation });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llTriggerSoundLimited(string sound, double volume, LSL_Vector top_north_east,
|
public void llTriggerSoundLimited(string sound, double volume, LSL_Vector top_north_east,
|
||||||
|
@ -6189,6 +6197,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
part.ParentGroup.HasGroupChanged = true;
|
part.ParentGroup.HasGroupChanged = true;
|
||||||
}
|
}
|
||||||
part.SendFullUpdateToAllClients();
|
part.SendFullUpdateToAllClients();
|
||||||
|
|
||||||
|
//DSG SYNC
|
||||||
|
part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.ParticleSystem });
|
||||||
}
|
}
|
||||||
|
|
||||||
public void llGroundRepel(double height, int water, double tau)
|
public void llGroundRepel(double height, int water, double tau)
|
||||||
|
|
|
@ -2346,7 +2346,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||||
|
|
||||||
obj.ParentGroup.HasGroupChanged = true;
|
obj.ParentGroup.HasGroupChanged = true;
|
||||||
//obj.ScheduleFullUpdate();
|
//obj.ScheduleFullUpdate();
|
||||||
obj.ScheduleFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.Shape});
|
obj.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.Shape});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue