DelinkFromGroup now calls AddNewSceneObjectByDelink, to avoid calling SyncNewObject later.
Also, replace all "SYMMETRIC SYNC" with "DSG SYNC" in comments.dsg
							parent
							
								
									a5ebd04d9d
								
							
						
					
					
						commit
						1c1d3893fc
					
				|  | @ -386,7 +386,7 @@ namespace OpenSim.Framework | |||
|         public string RemotingAddress; | ||||
|         public UUID ScopeID = UUID.Zero; | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         //IP:port for the symmetric sync listener this actor is configured to connect to | ||||
|         private string m_syncServerAddr = String.Empty; | ||||
|         private int m_syncServerPort; | ||||
|  | @ -398,7 +398,7 @@ namespace OpenSim.Framework | |||
|         private int m_physicsSyncServerPort; | ||||
|         private uint m_quarkLocX; | ||||
|         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. | ||||
| 
 | ||||
|  | @ -689,7 +689,7 @@ namespace OpenSim.Framework | |||
|             get { return Util.UIntsToLong((RegionLocX * (uint) Constants.RegionSize), (RegionLocY * (uint) Constants.RegionSize)); } | ||||
|         } | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         public string SyncServerAddress | ||||
|         { | ||||
|             get { return m_syncServerAddr; } | ||||
|  | @ -726,7 +726,7 @@ namespace OpenSim.Framework | |||
|             get { return m_quarkLocY; } | ||||
|             set { m_quarkLocY = value; } | ||||
|         } | ||||
|         //end of SYMMETRIC SYNC | ||||
|         //end of DSG SYNC | ||||
| 
 | ||||
|         public void SetEndPoint(string ipaddr, int port) | ||||
|         { | ||||
|  | @ -883,7 +883,7 @@ namespace OpenSim.Framework | |||
|             // | ||||
|             ScopeID = new UUID(config.GetString("ScopeID", UUID.Zero.ToString())); | ||||
| 
 | ||||
|             // SYMMETRIC SYNC | ||||
|             // DSG SYNC | ||||
|             m_syncServerAddr = config.GetString("SyncServerAddress", String.Empty); | ||||
|             m_syncServerPort = config.GetInt("SyncServerPort", -1); | ||||
|             //if either IP or port is not configured, we set IP to empty to raise warning later | ||||
|  | @ -908,7 +908,7 @@ namespace OpenSim.Framework | |||
|             m_quarkLocY = Convert.ToUInt32(quarkLocElements[1]); | ||||
| 
 | ||||
| 
 | ||||
|             // end of SYMMETRIC SYNC | ||||
|             // end of DSG SYNC | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -411,11 +411,11 @@ namespace OpenSim | |||
| 
 | ||||
|             scene.StartTimer(); | ||||
| 
 | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             //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. | ||||
|             scene.EventManager.TriggerOnPostSceneCreation(scene); | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|             return clientServer; | ||||
|         } | ||||
|  |  | |||
|  | @ -674,7 +674,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess | |||
| 
 | ||||
|                     rootPart.TrimPermissions(); | ||||
| 
 | ||||
|                     //SYMMETRIC SYNC: move this part to the bottom of this function,  | ||||
|                     //DSG SYNC: move this part to the bottom of this function,  | ||||
|                     //so that all properties of the object would have been set once | ||||
|                     //AddNewSceneObject is called. | ||||
|                     if (attachment) | ||||
|  |  | |||
|  | @ -318,7 +318,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                         RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Syncing to region \"{0}\"", m_regionName)); | ||||
|                         return; | ||||
|                     } | ||||
|                 //SYMMETRIC SYNC: do not handle terrian and object updates | ||||
|                 //DSG SYNC: do not handle terrian and object updates | ||||
|                 case RegionSyncMessage.MsgType.Terrain: | ||||
|                     { | ||||
|                         if(!m_symSync) | ||||
|  | @ -378,7 +378,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                         } | ||||
|                         return; | ||||
|                     } | ||||
|                     //end of SYMMETRIC SYNC | ||||
|                     //end of DSG SYNC | ||||
|                 case RegionSyncMessage.MsgType.NewAvatar: | ||||
|                     { | ||||
|                         // 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)); | ||||
|             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) | ||||
|             { | ||||
|                 Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetTerrain)); | ||||
|                 Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetObjects)); | ||||
|             } | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
|             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetAvatars)); | ||||
| 
 | ||||
|             // 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 | ||||
|             // These are the raw packet data blocks from the client, intercepted and sent up to the sim | ||||
|             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.OnAgentRequestSit += HandleAgentRequestSit; | ||||
|             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.OnGrabUpdate += HandleGrabUpdate; | ||||
|             //client.OnDeGrabObject += HandleDeGrabObject; | ||||
|  |  | |||
|  | @ -202,10 +202,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|         // *** This is the main receive loop thread for each connected client | ||||
|         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.OnChatFromWorld += new EventManager.ChatFromWorldEvent(EventManager_OnChatFromClient); | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|              | ||||
|             // 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)); | ||||
|                         return; | ||||
|                     } | ||||
|                 //SYMMETRIC SYNC: do not handle terrian and object updates | ||||
|                 //DSG SYNC: do not handle terrian and object updates | ||||
|                 case RegionSyncMessage.MsgType.GetTerrain: | ||||
|                     { | ||||
|                         /* | ||||
|  | @ -358,7 +358,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                          * */  | ||||
|                         return; | ||||
|                     } | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
|                 case RegionSyncMessage.MsgType.GetAvatars: | ||||
|                     { | ||||
|                         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.OnRemovePresence += new EventManager.OnRemovePresenceDelegate(EventManager_OnRemovePresence); | ||||
|              | ||||
|             //SYMMETRIC SYNC: do not handle object updates | ||||
|             //DSG SYNC: do not handle object updates | ||||
|             /* | ||||
|             if (!m_symsync) | ||||
|             { | ||||
|  | @ -162,7 +162,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                 m_scene.EventManager.OnOarFileLoaded += new EventManager.OarFileLoaded(EventManager_OnOarFileLoaded); | ||||
|             } | ||||
|              * */ | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
|             // Start the server and listen for RegionSyncClients | ||||
|             m_serveraddr = m_scene.RegionInfo.AvatarSyncServerAddress; | ||||
|             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 | ||||
|                 // 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) | ||||
|                 { | ||||
|  | @ -317,7 +317,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                     } | ||||
|                 } | ||||
|                  * */  | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
|                 foreach (ScenePresence presence in presenceUpdates) | ||||
|                 { | ||||
|                     try | ||||
|  |  | |||
|  | @ -1944,6 +1944,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|             foreach (SceneObjectGroup sog in sogList) | ||||
|             { | ||||
|                 m_log.WarnFormat("SyncStateReport -- SOG: name {0}, UUID {1}, position {2}", sog.Name, sog.UUID, sog.AbsolutePosition); | ||||
|                 foreach (SceneObjectPart part in sog.Parts) | ||||
|                 { | ||||
|                     m_log.WarnFormat("               -- part {0}, UUID {1}, LocalID {2}, offset-position {3}", part.Name, part.UUID, part.LocalId, part.OffsetPosition); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (m_isSyncRelay) | ||||
|  | @ -2541,6 +2545,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                     } | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -127,11 +127,11 @@ namespace OpenSim.Region.CoreModules.Scripting.WorldComm | |||
|             m_listenerManager = new ListenerManager(maxlisteners, maxhandles); | ||||
|             m_scene.EventManager.OnChatFromClient += DeliverClientMessage; | ||||
|             m_scene.EventManager.OnChatBroadcast += DeliverClientMessage; | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             //m_scene.EventManager.OnChatFromWorld += DeliverClientMessage; | ||||
|             //Kitty: temp debug | ||||
|             //m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||||
|             //end SYMMETRIC SYNC | ||||
|             //end DSG SYNC | ||||
|             m_pendingQ = new Queue(); | ||||
|             m_pending = Queue.Synchronized(m_pendingQ); | ||||
|         } | ||||
|  |  | |||
|  | @ -551,14 +551,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|                 m_scene.PhysicsScene.SetTerrain(m_channel.GetFloatsSerialised()); | ||||
|                 m_scene.SaveTerrain(); | ||||
| 
 | ||||
|                 //SYMMETRIC SYNC | ||||
|                 //DSG SYNC | ||||
|                 //Terrain has been modified, send out sync message if needed | ||||
|                 //if (m_scene.RegionSyncModule != null) | ||||
|                 //{ | ||||
|                     //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); | ||||
|                 //} | ||||
|                 //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. | ||||
|                 //m_scene.CreateTerrainTexture(true); | ||||
|  | @ -600,7 +600,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|             client.OnUnackedTerrain += client_OnUnackedTerrain; | ||||
|         } | ||||
|          | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         private long m_lastUpdateTimeStamp = DateTime.Now.Ticks; | ||||
|         public long LastUpdateTimeStamp | ||||
|         { | ||||
|  | @ -675,7 +675,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|             m_lastUpdateActorID = lastUpdateActorID; | ||||
|         } | ||||
| 
 | ||||
|         //end of SYMMETRIC SYNC | ||||
|         //end of DSG SYNC | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Checks to see if the terrain has been modified since last check | ||||
|  | @ -684,7 +684,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|         /// </summary> | ||||
|         private void CheckForTerrainUpdates() | ||||
|         { | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             m_log.DebugFormat("CheckForTerrainUpdates() called"); | ||||
|             //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. | ||||
|  | @ -696,7 +696,7 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|             //Check if the terrain has been modified and send out sync message if modified. | ||||
|             CheckForTerrainUpdates(false, currentTimeTick, localActorID); | ||||
| 
 | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|             //CheckForTerrainUpdates(false); | ||||
|         } | ||||
|  | @ -710,9 +710,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|         /// <param name="respectEstateSettings">should height map deltas be limited to the estate settings limits</param> | ||||
|         /// </summary> | ||||
|         //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) | ||||
|         //end of SYMMETRIC SYNC | ||||
|         //end of DSG SYNC | ||||
|         { | ||||
|             bool shouldTaint = false; | ||||
|             float[] serialised = m_channel.GetFloatsSerialised(); | ||||
|  | @ -741,14 +741,14 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|             if (shouldTaint) | ||||
|             { | ||||
|                 m_tainted = true; | ||||
|                 //SYMMETRIC SYNC | ||||
|                 //DSG SYNC | ||||
|                 //Terrain has been modified, updated the sync info | ||||
|                 if (m_scene.RegionSyncModule != null) | ||||
|                 { | ||||
|                     SyncInfoUpdate(lastUpdateTimeStamp, lastUpdateActorID); | ||||
|                     m_scene.RegionSyncModule.SendTerrainUpdates(lastUpdateTimeStamp, lastUpdateActorID); | ||||
|                 } | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  | @ -862,9 +862,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|                             m_channel, allowMask, west, south, height, size, seconds); | ||||
| 
 | ||||
|                         //CheckForTerrainUpdates(!god); //revert changes outside estate limits | ||||
|                         //SYMMETRIC SYNC | ||||
|                         //DSG SYNC | ||||
|                         CheckForTerrainUpdates(!god, DateTime.Now.Ticks, m_scene.GetSyncActorID()); | ||||
|                         //end of SYMMETRIC SYNC | ||||
|                         //end of DSG SYNC | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|  | @ -906,9 +906,9 @@ namespace OpenSim.Region.CoreModules.World.Terrain | |||
|                             m_channel, fillArea, size); | ||||
| 
 | ||||
|                         //CheckForTerrainUpdates(!god); //revert changes outside estate limits | ||||
|                         //SYMMETRIC SYNC | ||||
|                         //DSG SYNC | ||||
|                         CheckForTerrainUpdates(!god, DateTime.Now.Ticks, m_scene.GetSyncActorID()); | ||||
|                         //end of SYMMETRIC SYNC | ||||
|                         //end of DSG SYNC | ||||
|                     } | ||||
|                 } | ||||
|                 else | ||||
|  |  | |||
|  | @ -65,7 +65,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
| 
 | ||||
|         void UndoTerrain(ITerrainChannel channel); | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         /// <summary> | ||||
|         /// Invoked by receiving a terrain sync message. First, check if 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="lastUpdateActorID"></param> | ||||
|         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 | ||||
| { | ||||
|     //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> | ||||
|     /// 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 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 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 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 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 virtual void TriggerOnChatFromClient(Object sender, OSChatMessage chat) | ||||
|         { | ||||
|  | @ -2550,7 +2550,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         } | ||||
|         #endregion | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         public event PostSceneCreation OnPostSceneCreation; | ||||
|         public delegate void PostSceneCreation(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); | ||||
| 
 | ||||
|             //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) | ||||
|             { | ||||
|  | @ -270,7 +270,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             part.GetProperties(remoteClient); | ||||
| 
 | ||||
|             ////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) | ||||
|             { | ||||
|  | @ -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); | ||||
|             //Trigger OnUpdateScript event. | ||||
|             EventManager.TriggerUpdateScript(remoteClient.AgentId, itemId, primId, isScriptRunning, item.AssetID); | ||||
|  | @ -370,7 +370,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         } | ||||
|         #endregion  | ||||
| 
 | ||||
|         #region SYMMETRIC SYNC | ||||
|         #region DSG SYNC | ||||
|         public void SymSync_OnNewScript(UUID avatarID, UUID itemID, SceneObjectPart part) | ||||
|         { | ||||
|             TaskInventoryItem item = part.Inventory.GetInventoryItem(itemID); | ||||
|  | @ -433,7 +433,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|             return errors; | ||||
|         } | ||||
|         #endregion //SYMMETRIC SYNC | ||||
|         #endregion //DSG SYNC | ||||
| 
 | ||||
| 
 | ||||
|          /// <summary> | ||||
|  | @ -1710,7 +1710,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                         part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID); | ||||
|                         part.GetProperties(remoteClient); | ||||
| 
 | ||||
|                         //SYMMETRIC SYNC | ||||
|                         //DSG SYNC | ||||
|                         /* Original OpenSim code, commented out  | ||||
|                         // TODO: switch to posting on_rez here when scripts | ||||
|                         // have state in inventory | ||||
|  | @ -1737,7 +1737,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                             //part.GetProperties(remoteClient); | ||||
|                             part.ParentGroup.ResumeScripts(); | ||||
|                         } | ||||
|                         //end of SYMMETRIC SYNC | ||||
|                         //end of DSG SYNC | ||||
| 
 | ||||
|                     } | ||||
|                     else | ||||
|  | @ -1797,7 +1797,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 part.Inventory.AddInventoryItem(taskItem, false); | ||||
|                 part.GetProperties(remoteClient); | ||||
| 
 | ||||
|                 //SYMMETRIC SYNC | ||||
|                 //DSG SYNC | ||||
|                 //part.Inventory.CreateScriptInstance(taskItem, 0, false, DefaultScriptEngine, 0); | ||||
|                 //part.ParentGroup.ResumeScripts(); | ||||
|                 if (RegionSyncModule != null) | ||||
|  | @ -1815,7 +1815,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     //part.GetProperties(remoteClient); | ||||
|                     part.ParentGroup.ResumeScripts(); | ||||
|                 } | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -634,9 +634,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         #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; | ||||
|  | @ -866,7 +866,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             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 | ||||
|         { | ||||
|  | @ -1010,10 +1021,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             m_physicalPrim = physicalPrim; | ||||
|             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(this); | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
|             m_permissions = new ScenePermissions(this); | ||||
| 
 | ||||
|             m_asyncSceneObjectDeleter = new AsyncSceneObjectGroupDeleter(this); | ||||
|  | @ -1219,10 +1230,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|             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(this); | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|             m_lastUpdate = Util.EnvironmentTickCount(); | ||||
|         } | ||||
|  | @ -1557,13 +1568,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             PhysEngineToSceneConnectorModule = RequestModuleInterface<IPhysEngineToSceneConnectorModule>(); | ||||
|             SceneToPhysEngineSyncServer = RequestModuleInterface<ISceneToPhysEngineServer>(); | ||||
|             ////////////////////////////////////////////////////////////////////// | ||||
|             //SYMMETRIC SYNC (KittyL: started 12/23/2010) | ||||
|             //DSG SYNC (KittyL: started 12/23/2010) | ||||
|             ////////////////////////////////////////////////////////////////////// | ||||
|             m_regionSyncModule = RequestModuleInterface<IRegionSyncModule>(); | ||||
|             m_DSGActorSyncModule = RequestModuleInterface<IDSGActorSyncModule>(); | ||||
| 
 | ||||
|             ////////////////////////////////////////////////////////////////////// | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
|             ////////////////////////////////////////////////////////////////////// | ||||
|              | ||||
|             // Shoving this in here for now, because we have the needed | ||||
|  | @ -1743,7 +1754,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     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 | ||||
|                 if (RegionSyncModule != null) | ||||
|  | @ -1751,7 +1762,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     //RegionSyncModule.SendSceneUpdates(); | ||||
|                     RegionSyncModule.SyncOutPrimUpdates(); | ||||
|                 } | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
| 
 | ||||
|                 int tmpPhysicsMS2 = Util.EnvironmentTickCount(); | ||||
|                 if ((Frame % m_update_physics == 0) && m_physics_enabled && (IsSyncedServer() || IsPhysEngineActor())) | ||||
|  | @ -3228,7 +3239,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             client.OnUpdatePrimFlags += m_sceneGraph.UpdatePrimFlags; | ||||
|             client.OnRequestObjectPropertiesFamily += m_sceneGraph.RequestObjectPropertiesFamily; | ||||
|             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()) | ||||
|             //{ | ||||
|                 client.OnGrabObject += ProcessObjectGrab; | ||||
|  | @ -3728,7 +3739,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|             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 | ||||
|             /* | ||||
|             if( IsSyncedServer() ) | ||||
|  |  | |||
|  | @ -47,9 +47,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|     public delegate void ObjectDeleteDelegate(EntityBase obj); | ||||
| 
 | ||||
|     //SYMMETRIC SYNC | ||||
|     //DSG SYNC | ||||
|     public delegate void ObjectCreateBySyncDelegate(EntityBase obj); | ||||
|     //end of SYMMETRIC SYNC | ||||
|     //end of DSG SYNC | ||||
| 
 | ||||
| 
 | ||||
|     /// <summary> | ||||
|  | @ -69,9 +69,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         public event ObjectCreateDelegate OnObjectCreate; | ||||
|         public event ObjectDeleteDelegate OnObjectRemove; | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         public event ObjectCreateBySyncDelegate OnObjectCreateBySync; | ||||
|         //end of SYMMETRIC SYNC | ||||
|         //end of DSG SYNC | ||||
| 
 | ||||
|         #endregion | ||||
| 
 | ||||
|  | @ -288,7 +288,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 sceneObject.HasGroupChanged = true; | ||||
|             } | ||||
| 
 | ||||
|             return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates); | ||||
|             return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates, false); | ||||
|         } | ||||
|                  | ||||
|         /// <summary> | ||||
|  | @ -310,7 +310,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             if (attachToBackup) | ||||
|                 sceneObject.HasGroupChanged = true; | ||||
| 
 | ||||
|             return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates); | ||||
|             return AddSceneObject(sceneObject, attachToBackup, sendClientUpdates, false); | ||||
|         } | ||||
|          | ||||
|         /// <summary> | ||||
|  | @ -344,7 +344,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 sceneObject.Velocity = vel; | ||||
|             } | ||||
| 
 | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             //Moving AddNewSceneObject to the end of this function, so that  | ||||
|             //all object properties are set when AddNewSceneObject is called. | ||||
|             AddNewSceneObject(sceneObject, true, false); | ||||
|  | @ -368,17 +368,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         /// <returns> | ||||
|         /// true if the object was added, false if an object with the same uuid was already in the scene | ||||
|         /// </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) | ||||
|                 return false; | ||||
| 
 | ||||
|             if (Entities.ContainsKey(sceneObject.UUID)) | ||||
|                 return false; | ||||
|              | ||||
| //            m_log.DebugFormat( | ||||
| //                "[SCENEGRAPH]: Adding scene object {0} {1}, with {2} parts on {3}",  | ||||
| //                sceneObject.Name, sceneObject.UUID, sceneObject.Parts.Length, m_parentScene.RegionInfo.RegionName); | ||||
| 
 | ||||
|             //            m_log.DebugFormat( | ||||
|             //                "[SCENEGRAPH]: Adding scene object {0} {1}, with {2} parts on {3}",  | ||||
|             //                sceneObject.Name, sceneObject.UUID, sceneObject.Parts.Length, m_parentScene.RegionInfo.RegionName); | ||||
| 
 | ||||
|             SceneObjectPart[] children = sceneObject.Parts; | ||||
| 
 | ||||
|  | @ -403,18 +403,18 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             m_numPrim += children.Length; | ||||
| 
 | ||||
|             sceneObject.AttachToScene(m_parentScene); | ||||
|              | ||||
| 
 | ||||
|             Entities.Add(sceneObject); | ||||
| 
 | ||||
|             if (attachToBackup) | ||||
|                 sceneObject.AttachToBackup(); | ||||
|              | ||||
| 
 | ||||
|             if (OnObjectCreate != null) | ||||
|                 OnObjectCreate(sceneObject); | ||||
| 
 | ||||
|             lock (SceneObjectGroupsByFullID) | ||||
|                 SceneObjectGroupsByFullID[sceneObject.UUID] = sceneObject; | ||||
|              | ||||
| 
 | ||||
|             lock (SceneObjectGroupsByFullPartID) | ||||
|             { | ||||
|                 SceneObjectGroupsByFullPartID[sceneObject.UUID] = sceneObject; | ||||
|  | @ -429,16 +429,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     SceneObjectGroupsByLocalPartID[part.LocalId] = sceneObject; | ||||
|             } | ||||
| 
 | ||||
|             //DSG SYNC: sending NewObject event, and sending it before calling ScheduleGroupForFullUpdate | ||||
|             if (m_parentScene.RegionSyncModule != null) | ||||
|             { | ||||
|                 //m_parentScene.RegionSyncModule.SendNewObject(sceneObject); | ||||
|                 m_parentScene.RegionSyncModule.SyncNewObject(sceneObject); | ||||
|             } | ||||
| 
 | ||||
|             if (sendClientUpdates) | ||||
|                 //sceneObject.ScheduleGroupForFullUpdate(); | ||||
|                 sceneObject.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>() { SceneObjectPartSyncProperties.None });  | ||||
|                 sceneObject.ScheduleGroupForFullUpdate(null); | ||||
| 
 | ||||
|             //DSG SYNC: sending NewObject event, and sending it before calling ScheduleGroupForFullUpdate | ||||
|             if (m_parentScene.RegionSyncModule != null && !addedByDelink) | ||||
|             { | ||||
|                 m_parentScene.RegionSyncModule.SyncNewObject(sceneObject); | ||||
|             } | ||||
| 
 | ||||
|             return true; | ||||
|         } | ||||
|  | @ -1667,7 +1666,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 List<SceneObjectPart> rootParts = new List<SceneObjectPart>(); | ||||
|                 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> afterDelinkGroups = new List<SceneObjectGroup>(); | ||||
| 
 | ||||
|  | @ -1688,7 +1687,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                             if (!affectedGroups.Contains(group)) | ||||
|                             { | ||||
|                                 affectedGroups.Add(group); | ||||
|                                 //SYMMETRIC SYNC | ||||
|                                 //DSG SYNC | ||||
|                                 beforeDelinkGroups.Add(group); | ||||
|                             } | ||||
|                         } | ||||
|  | @ -1705,7 +1704,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     // handled further. Do the honors here. | ||||
|                     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(); | ||||
|                     afterDelinkGroups.Add(child.ParentGroup); | ||||
|                 } | ||||
|  | @ -1777,7 +1776,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     g.TriggerScriptChangedEvent(Changed.LINK); | ||||
|                     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(); | ||||
|                     afterDelinkGroups.Add(g); | ||||
|                 } | ||||
|  | @ -2053,7 +2052,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|         #endregion // REGION SYNC | ||||
| 
 | ||||
|         #region SYMMETRIC SYNC | ||||
|         #region DSG SYNC | ||||
| 
 | ||||
|         public Scene.ObjectUpdateResult UpdateObjectBySynchronization(SceneObjectGroup updatedSog) | ||||
|         { | ||||
|  | @ -2246,7 +2245,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                             // Make sure no child prim is set for sale | ||||
|                             // So that, on delink, no prims are unwittingly | ||||
|                             // 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.SalePrice = 10; | ||||
|                             //child.RootPart.SetObjectSaleType(0); | ||||
|  | @ -2407,6 +2406,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                             } | ||||
|                             else | ||||
|                             { | ||||
|                                 //No longer calling update prim's properties here, caller will do that | ||||
|                                 //localAfterGroup.UpdateObjectGroupBySync(incomingAfterDelinkGroupsDictionary[localAfterGroup.UUID]); | ||||
|                             } | ||||
|                         } | ||||
|  | @ -2556,6 +2556,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             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 | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -498,7 +498,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|         #region Constructors | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         public SceneObjectGroup(SceneObjectPart part, bool newGroupBySync) | ||||
|         { | ||||
|             if (!newGroupBySync) | ||||
|  | @ -627,7 +627,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             // for the same object with very different properties.  The caller must schedule the update. | ||||
|             //ScheduleGroupForFullUpdate(); | ||||
| 
 | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             if (m_scene.RegionSyncModule != null) | ||||
|             { | ||||
|                 foreach (SceneObjectPart part in Parts) | ||||
|  | @ -1212,7 +1212,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             { | ||||
|                 SceneObjectPart part = parts[i]; | ||||
| 
 | ||||
|                 //SYMMETRIC SYNC: object remove should be handled through RegionSyncModule | ||||
|                 //DSG SYNC: object remove should be handled through RegionSyncModule | ||||
|                 /* | ||||
|                 // REGION SYNC | ||||
|                 if (Scene.IsSyncedServer()) | ||||
|  | @ -1221,7 +1221,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     //return; | ||||
|                 } | ||||
|                  * */ | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
| 
 | ||||
|                 Scene.ForEachScenePresence(delegate(ScenePresence avatar) | ||||
|                 { | ||||
|  | @ -1366,13 +1366,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 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 (m_scene.RegionSyncModule != null && !ToPersistObjectState) | ||||
|             { | ||||
|                 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 | ||||
|             // any exception propogate upwards. | ||||
|  | @ -2200,11 +2200,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             //HasGroupChanged = true; | ||||
|             //ScheduleGroupForFullUpdate(); | ||||
| 
 | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             //The DeleteObject message will be enqueued to be sent out by another thread, and the call will return quickly. | ||||
|             //if (m_scene.RegionSyncModule != null) | ||||
|             //    m_scene.RegionSyncModule.SendDeleteObject(objectGroup, true); | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|         } | ||||
| 
 | ||||
|  | @ -2307,7 +2307,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|             SceneObjectGroup objectGroup = new SceneObjectGroup(linkPart); | ||||
| 
 | ||||
|             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) | ||||
|                 linkPart.TriggerScriptChangedEvent(Changed.LINK); | ||||
|  | @ -3556,7 +3560,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         } | ||||
| #endregion  | ||||
| 
 | ||||
|         #region SYMMETRIC SYNC | ||||
|         #region DSG SYNC | ||||
| 
 | ||||
|         private bool m_toPersistObjectState = false; | ||||
|         public bool ToPersistObjectState | ||||
|  | @ -3779,14 +3783,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         } | ||||
| 
 | ||||
|         //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) | ||||
|         { | ||||
|             //                m_log.DebugFormat( | ||||
|             //                    "[SCENE OBJECT GROUP]: Delinking part {0}, {1} from group with root part {2}, {3}", | ||||
|             //                    linkPart.Name, linkPart.UUID, RootPart.Name, RootPart.UUID); | ||||
|             m_log.DebugFormat( | ||||
|                 "[SCENE OBJECT GROUP]: Delinking part {0}, {1}, {4} from group with root part {2}, {3}", | ||||
|                 delinkPart.Name, delinkPart.UUID, RootPart.Name, RootPart.UUID, delinkPart.LocalId); | ||||
| 
 | ||||
|             SceneObjectPartBase linkPart = (SceneObjectPartBase)delinkPart; | ||||
|             linkPart.ClearUndoState(); | ||||
|  | @ -3803,9 +3804,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 if (parts.Length == 1 && RootPart != null) | ||||
|                 { | ||||
|                     // Single prim left | ||||
|                     //RootPart.LinkNum = 0; | ||||
|                     //RootPart.SetProperty("LinkNum", 0); | ||||
|                     ((SceneObjectPartBase)RootPart).LinkNum = 0; | ||||
|                     RootPart.LinkNum = 0; | ||||
|                 } | ||||
|                 else | ||||
|                 { | ||||
|  | @ -3815,16 +3814,13 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                         if (part.LinkNum > linkPart.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.SetParentID(0); | ||||
| 
 | ||||
|             if (linkPart.PhysActor != null) | ||||
|             { | ||||
|  | @ -3843,15 +3839,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             linkPart.OffsetPosition = new Vector3(0, 0, 0); | ||||
|             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); | ||||
|             bool newGroupBySync = true; | ||||
|             SceneObjectGroup objectGroup = new SceneObjectGroup(delinkPart, newGroupBySync); | ||||
|  |  | |||
|  | @ -129,7 +129,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|         #region Fields | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         //public bool AllowedDrop; | ||||
|         private bool m_allowedDrop; | ||||
|         public bool AllowedDrop | ||||
|  | @ -2933,7 +2933,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         /// <summary> | ||||
|         /// Schedules this prim for a full update | ||||
|         /// </summary> | ||||
|         //public void ScheduleFullUpdate() :: SYMMETRIC SYNC: changed the interface so that we can identify which property triggers calling this function | ||||
|         //public void ScheduleFullUpdate() :: DSG SYNC: changed the interface so that we can identify which property triggers calling this function | ||||
|         public virtual void ScheduleFullUpdate(List<SceneObjectPartSyncProperties> updatedProperties) | ||||
|         { | ||||
| //            m_log.DebugFormat("[SCENE OBJECT PART]: Scheduling full update for {0} {1}", Name, LocalId); | ||||
|  | @ -3202,7 +3202,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             } | ||||
|             ClearUpdateSchedule(); | ||||
| 
 | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             //KittyL: 04/06/2011, No longer calling QueueSceneObjectPartForUpdate  | ||||
|             //from here. Local updates are now recorded by calling IRegionSyncModule.ProcessAndEnqueuePrimUpdatesByLocal(). | ||||
|             /* | ||||
|  | @ -3211,7 +3211,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 m_parentGroup.Scene.RegionSyncModule.QueueSceneObjectPartForUpdate((SceneObjectPart)this); | ||||
|             } | ||||
|              * */  | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|  | @ -4983,7 +4983,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|         #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. | ||||
|         //The goal is to evetually have time-stamp per property bucket for each prim. | ||||
|  | @ -4998,7 +4998,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     //SYMMETRIC SYNC | ||||
|     //DSG SYNC | ||||
| 
 | ||||
|     //Information for concurrency control of one bucket of prim proproperties. | ||||
|     public class BucketSyncInfo | ||||
|  | @ -6142,5 +6142,5 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|     } | ||||
| 
 | ||||
|     //end of SYMMETRIC SYNC | ||||
|     //end of DSG SYNC | ||||
| } | ||||
|  |  | |||
|  | @ -545,7 +545,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             HasInventoryChanged = true; | ||||
|             m_part.ParentGroup.HasGroupChanged = true; | ||||
| 
 | ||||
|             //SYMMETRIC SYNC: add ScheduleFullUpdate to enable synchronization across actors | ||||
|             //DSG SYNC: add ScheduleFullUpdate to enable synchronization across actors | ||||
|             m_part.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.TaskInventory, SceneObjectPartSyncProperties.InventorySerial}); | ||||
|         } | ||||
| 
 | ||||
|  | @ -1180,7 +1180,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|         #endregion REGION SYNC | ||||
|     } | ||||
| 
 | ||||
|     #region SYMMETRIC SYNC | ||||
|     #region DSG SYNC | ||||
|     public class SceneObjectPartInventory : SceneObjectPartInventoryBase | ||||
|     { | ||||
|         private SceneObjectPart m_part; | ||||
|  |  | |||
|  | @ -215,7 +215,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
| 
 | ||||
|                     sceneObject.AddPart(part); | ||||
| 
 | ||||
|                     //SYMMETRIC SYNC | ||||
|                     //DSG SYNC | ||||
|                     //KittyL: 12/27/2010, added ActorID for symmetric synch model | ||||
|                     //part.SetLastUpdateActorID(); | ||||
| 
 | ||||
|  | @ -329,7 +329,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|             m_SOPXmlProcessors.Add("TextureAnimation", ProcessTextureAnimation); | ||||
|             m_SOPXmlProcessors.Add("ParticleSystem", ProcessParticleSystem); | ||||
| 
 | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             m_SOPXmlProcessors.Add("LocalFlags", ProcessLocalFlags); | ||||
|             //m_SOPXmlProcessors.Add("LastUpdateTimeStamp", ProcessUpdateTimeStamp); | ||||
|             //m_SOPXmlProcessors.Add("LastUpdateActorID", ProcessLastUpdateActorID); | ||||
|  | @ -340,7 +340,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|             m_SOPXmlProcessors.Add("AggregateScriptEvents", ProcessAggregateScriptEvents); | ||||
| 
 | ||||
|             m_SOPXmlProcessors.Add("BucketSyncInfoList", ProcessBucketSyncInfo); | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|             #endregion | ||||
| 
 | ||||
|  | @ -425,7 +425,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|         } | ||||
| 
 | ||||
|         #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) | ||||
|         { | ||||
|             obj.AllowedDrop = Util.ReadBoolean(reader);             | ||||
|  | @ -706,7 +706,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|             obj.ParticleSystem = Convert.FromBase64String(reader.ReadElementContentAsString("ParticleSystem", String.Empty)); | ||||
|         } | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         /* | ||||
|         private static void ProcessUpdateTimeStamp(SceneObjectPart obj, XmlTextReader reader) | ||||
|         { | ||||
|  | @ -799,7 +799,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|                 reader.ReadEndElement(); // BucketSyncInfoList | ||||
|         } | ||||
| 
 | ||||
|         //end of SYMMETRIC SYNC | ||||
|         //end of DSG SYNC | ||||
| 
 | ||||
|         #endregion | ||||
| 
 | ||||
|  | @ -1271,10 +1271,10 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|             writer.WriteElementString("GroupMask", sop.GroupMask.ToString()); | ||||
|             writer.WriteElementString("EveryoneMask", sop.EveryoneMask.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, "LocalFlags", sop.LocalFlags.ToString(), options); | ||||
|             //end SYMMETRIC SYNC | ||||
|             //end DSG SYNC | ||||
|             WriteUUID(writer, "CollisionSound", sop.CollisionSound, options); | ||||
|             writer.WriteElementString("CollisionSoundVolume", sop.CollisionSoundVolume.ToString()); | ||||
|             if (sop.MediaUrl != null) | ||||
|  | @ -1282,7 +1282,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|             WriteBytes(writer, "TextureAnimation", sop.TextureAnimation); | ||||
|             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. | ||||
|             //We may remove these if later we use a different method to encode object properties for synchronization. | ||||
|             WriteUUID(writer, "AttachedAvatar", sop.AttachedAvatar, options); | ||||
|  | @ -1291,12 +1291,12 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|             //writer.WriteElementString("IsAttachment", sop.IsAttachment.ToString().ToLower()); //IsAttachment is written last, so that on deserialization, it will be deserialized later than other Attachment properties | ||||
|             WriteFlags(writer, "AggregateScriptEvents", sop.AggregateScriptEvents.ToString(), options); | ||||
|             WriteBucketSyncInfo(writer, sop.BucketSyncInfoList); | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|             writer.WriteEndElement(); | ||||
|         } | ||||
| 
 | ||||
|         //SYMMETRIC SYNC | ||||
|         //DSG SYNC | ||||
|         public static void WriteBucketSyncInfo(XmlTextWriter writer, Dictionary<string, BucketSyncInfo> bucketSyncInfoList) | ||||
|         { | ||||
|             if (bucketSyncInfoList!=null || bucketSyncInfoList.Count > 0) // otherwise skip this | ||||
|  | @ -1318,7 +1318,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
|             } | ||||
| 
 | ||||
|         } | ||||
|         //end of SYMMETRIC SYNC | ||||
|         //end of DSG SYNC | ||||
| 
 | ||||
|         static void WriteUUID(XmlTextWriter writer, string name, UUID id, Dictionary<string, object> options) | ||||
|         { | ||||
|  |  | |||
|  | @ -94,7 +94,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     if (Scale != Vector3.Zero) | ||||
|                         part.Resize(Scale); | ||||
|                     //part.ParentGroup.ScheduleGroupForTerseUpdate(); | ||||
|                     //SYMMETRIC SYNC | ||||
|                     //DSG SYNC | ||||
|                     List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>(); | ||||
|                     updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset); | ||||
|                     if (Position != Vector3.Zero) | ||||
|  | @ -110,7 +110,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     part.UpdateRotation(Rotation); | ||||
|                     if (Scale != Vector3.Zero) | ||||
|                         part.Resize(Scale); //part.ScheduleTerseUpdate(); | ||||
|                     //SYMMETRIC SYNC | ||||
|                     //DSG SYNC | ||||
|                     List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>(); | ||||
|                     updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset); | ||||
|                     if (Position != Vector3.Zero) | ||||
|  | @ -138,7 +138,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     if (Scale != Vector3.Zero) | ||||
|                         part.Resize(Scale); | ||||
|                     //part.ParentGroup.ScheduleGroupForTerseUpdate(); | ||||
|                     //SYMMETRIC SYNC | ||||
|                     //DSG SYNC | ||||
|                     List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>(); | ||||
|                     if (Rotation != Quaternion.Identity) | ||||
|                         updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset); | ||||
|  | @ -157,7 +157,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     if (Scale != Vector3.Zero) | ||||
|                         part.Resize(Scale); | ||||
|                     //part.ScheduleTerseUpdate(); | ||||
|                     //SYMMETRIC SYNC | ||||
|                     //DSG SYNC | ||||
|                     List<SceneObjectPartSyncProperties> updatedProperties = new List<SceneObjectPartSyncProperties>(); | ||||
|                     if (Rotation != Quaternion.Identity) | ||||
|                         updatedProperties.Add(SceneObjectPartSyncProperties.RotationOffset); | ||||
|  |  | |||
|  | @ -3615,7 +3615,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|             parentPrim.RootPart.CreateSelected = true; | ||||
|             parentPrim.HasGroupChanged = true; | ||||
|             //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, | ||||
|             //so should return quickly.  | ||||
|             if (World.RegionSyncModule != null) | ||||
|  | @ -3625,7 +3625,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|                 World.RegionSyncModule.SendLinkObject(parentPrim, parentPrim.RootPart, children); | ||||
|             } | ||||
|             m_host.ScheduleFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); //SendLinkObject above will synchronize the link operation, no need to taint updates here | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|             if (client != null) | ||||
|                 parentPrim.GetProperties(client); | ||||
|  | @ -3683,11 +3683,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
| 
 | ||||
|             if (linknum == ScriptBaseClass.LINK_ROOT) | ||||
|             { | ||||
|                 //SYMMETRIC SYNC | ||||
|                 //DSG SYNC | ||||
|                 List<SceneObjectGroup> beforeDelinkGroups = new List<SceneObjectGroup>(); | ||||
|                 beforeDelinkGroups.Add(parentPrim); | ||||
|                 List<SceneObjectGroup> afterDelinkGroups = new List<SceneObjectGroup>(); | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
| 
 | ||||
|                 // Restructuring Multiple Prims. | ||||
|                 List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Parts); | ||||
|  | @ -3695,19 +3695,19 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|                 foreach (SceneObjectPart part in parts) | ||||
|                 { | ||||
|                     parentPrim.DelinkFromGroup(part.LocalId, true); | ||||
|                     //SYMMETRIC SYNC | ||||
|                     //DSG SYNC | ||||
|                     afterDelinkGroups.Add(part.ParentGroup); | ||||
|                 } | ||||
|                 parentPrim.HasGroupChanged = true; | ||||
|                 //parentPrim.ScheduleGroupForFullUpdate(); | ||||
|                 //SYMMETRIC SYNC | ||||
|                 //DSG SYNC | ||||
|                 //Send out DelinkObject message to other actors to sychronize their object list  | ||||
|                 if (World.RegionSyncModule != null) | ||||
|                 { | ||||
|                     World.RegionSyncModule.SendDeLinkObject(parts, beforeDelinkGroups, afterDelinkGroups); | ||||
|                 } | ||||
|                 parentPrim.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
|                 parentPrim.TriggerScriptChangedEvent(Changed.LINK); | ||||
| 
 | ||||
|                 if (parts.Count > 0) | ||||
|  | @ -3721,13 +3721,13 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|                     } | ||||
|                     newRoot.ParentGroup.HasGroupChanged = true; | ||||
|                     //newRoot.ParentGroup.ScheduleGroupForFullUpdate(); | ||||
|                     //SYMMETRIC SYNC | ||||
|                     //DSG SYNC | ||||
|                     if (World.RegionSyncModule != null) | ||||
|                     { | ||||
|                         World.RegionSyncModule.SendLinkObject(newRoot.ParentGroup, newRoot, new List<SceneObjectPart>(newRoot.ParentGroup.Parts)); | ||||
|                     } | ||||
|                     newRoot.ParentGroup.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); | ||||
|                     //end of SYMMETRIC SYNC | ||||
|                     //end of DSG SYNC | ||||
| 
 | ||||
|                 } | ||||
|             } | ||||
|  | @ -3739,7 +3739,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|                 parentPrim.DelinkFromGroup(childPrim.LocalId, true); | ||||
|                 parentPrim.HasGroupChanged = true; | ||||
|                 //parentPrim.ScheduleGroupForFullUpdate(); | ||||
|                 //SYMMETRIC SYNC | ||||
|                 //DSG SYNC | ||||
|                 //Send out DelinkObject message to other actors to sychronize their object list  | ||||
|                 if (World.RegionSyncModule != null) | ||||
|                 { | ||||
|  | @ -3749,7 +3749,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|                     afterDelinkGroups.Add(childPrim.ParentGroup); | ||||
|                     World.RegionSyncModule.SendDeLinkObject(new List<SceneObjectPart>(parentPrim.Parts), beforeDelinkGroups, afterDelinkGroups); | ||||
|                 } | ||||
|                 //end of SYMMETRIC SYNC | ||||
|                 //end of DSG SYNC | ||||
| 
 | ||||
|                 parentPrim.TriggerScriptChangedEvent(Changed.LINK); | ||||
|             } | ||||
|  | @ -3762,12 +3762,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|             if (parentPrim.RootPart.AttachmentPoint != 0) | ||||
|                 return; // Fail silently if attached | ||||
| 
 | ||||
|             //SYMMETRIC SYNC | ||||
|             //DSG SYNC | ||||
|             List<SceneObjectGroup> beforeDelinkGroups = new List<SceneObjectGroup>(); | ||||
|             beforeDelinkGroups.Add(parentPrim); | ||||
|             List<SceneObjectGroup> afterDelinkGroups = new List<SceneObjectGroup>(); | ||||
|             SceneObjectPart rootPart = parentPrim.RootPart; | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
| 
 | ||||
|             List<SceneObjectPart> parts = new List<SceneObjectPart>(parentPrim.Parts); | ||||
|             parts.Remove(parentPrim.RootPart); | ||||
|  | @ -3776,7 +3776,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|             { | ||||
|                 parentPrim.DelinkFromGroup(part.LocalId, true); | ||||
|                 parentPrim.TriggerScriptChangedEvent(Changed.LINK); | ||||
|                 //SYMMETRIC SYNC | ||||
|                 //DSG SYNC | ||||
|                 afterDelinkGroups.Add(part.ParentGroup); | ||||
|             } | ||||
|             parentPrim.HasGroupChanged = true; | ||||
|  | @ -3789,7 +3789,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|                 World.RegionSyncModule.SendDeLinkObject(parts, beforeDelinkGroups, afterDelinkGroups);  | ||||
|             } | ||||
|             parentPrim.ScheduleGroupForFullUpdate(new List<SceneObjectPartSyncProperties>(){SceneObjectPartSyncProperties.None}); | ||||
|             //end of SYMMETRIC SYNC | ||||
|             //end of DSG SYNC | ||||
|         } | ||||
| 
 | ||||
|         public LSL_String llGetLinkKey(int linknum) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Huaiyu (Kitty) Liu
						Huaiyu (Kitty) Liu