From b182e3bf30771e294e6f66ecacee9315dd389181 Mon Sep 17 00:00:00 2001 From: "Huaiyu (Kitty) Liu" Date: Wed, 20 Apr 2011 17:34:55 -0700 Subject: [PATCH] In SyncLinkObject and SyncDelinkObject, copy property values from linked/delinked SOP values to those in PrimSyncInfo, before sending out sync messages. --- .../SymmetricSync/RegionSyncModule.cs | 46 +++++++++++++++---- OpenSim/Region/Framework/Scenes/Scene.cs | 12 +++-- .../Framework/Scenes/SceneObjectPart.cs | 11 +++-- 3 files changed, 51 insertions(+), 18 deletions(-) diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs index e3ea30c4d4..5148f3a283 100644 --- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs +++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs @@ -603,12 +603,22 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule { if (children.Count == 0) return; + //the group is just linked, each part has quite some properties changed + //(OffsetPosition, etc). Need to sync the property values in PrimSyncInfoManager + //first + foreach (SceneObjectPart part in linkedGroup.Parts) + { + m_primSyncInfoManager.UpdatePrimSyncInfoByLocal(part, new List { SceneObjectPartSyncProperties.FullUpdate }); + } + + if (!IsSyncingWithOtherSyncNodes()) { //no SyncConnector connected. Do nothing. return; } + //Now encode the linkedGroup for sync OSDMap data = new OSDMap(); OSDMap encodedSOG = SceneObjectEncoder(linkedGroup); data["linkedGroup"] = encodedSOG; @@ -634,6 +644,15 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule { if (prims.Count == 0 || beforeDelinkGroups.Count == 0) return; + //the prims are just delinked, each part has quite some properties changed + //(OffsetPosition, etc). Need to sync the property values in PrimSyncInfoManager + //first + foreach (SceneObjectPart part in prims) + { + m_primSyncInfoManager.UpdatePrimSyncInfoByLocal(part, new List { SceneObjectPartSyncProperties.FullUpdate }); + } + + if (!IsSyncingWithOtherSyncNodes()) { //no SyncConnector connected. Do nothing. @@ -2386,10 +2405,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule List propertiesUpdated = m_primSyncInfoManager.UpdatePrimSyncInfoBySync(sop, propertiesSyncInfo); //SYNC DEBUG - //if (propertiesUpdated.Contains(SceneObjectPartSyncProperties.Shape)) - //{ - // m_log.DebugFormat("Shape updated: " + PropertySerializer.SerializeShape(sop)); - //} + if (propertiesUpdated.Contains(SceneObjectPartSyncProperties.AggregateScriptEvents)) + { + m_log.DebugFormat("AggregateScriptEvents updated: " + sop.AggregateScriptEvents); + } if (propertiesUpdated.Count > 0) { @@ -2419,6 +2438,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule Dictionary primsSyncInfo; SceneObjectDecoder(encodedSOG, out linkedGroup, out primsSyncInfo); + //TEMP DEBUG + m_log.DebugFormat("{0}: received linkedGroup: {1}", LogHeader, linkedGroup.DebugObjectUpdateResult()); + //m_log.DebugFormat(linkedGroup.DebugObjectUpdateResult()); + if (linkedGroup == null) { m_log.WarnFormat("{0}: HandleSyncLinkObject, no valid Linked-Group has been deserialized", LogHeader); @@ -3642,12 +3665,12 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule m_log.DebugFormat("{0}: SendPrimPropertyUpdates for {1}, {2}, with updated properties -- {3}", LogHeader, sop.Name, sop.UUID, pString); //SYNC DEBUG - /* - if (updatedProperties.Contains(SceneObjectPartSyncProperties.Shape)) + + if (updatedProperties.Contains(SceneObjectPartSyncProperties.AggregateScriptEvents)) { - m_log.DebugFormat("Shape updated: " + PropertySerializer.SerializeShape(sop)); + m_log.DebugFormat("SendPrimPropertyUpdates -- AggregateScriptEvents: " + sop.AggregateScriptEvents); } - * */ + SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedPrimProperties, OSDParser.SerializeJsonString(syncData)); SendPrimUpdateToRelevantSyncConnectors(primUUID, syncMsg); @@ -4802,6 +4825,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule { m_UUID = id; InitPropertiesSyncInfoFromOSDMap(primSyncInfoData); + m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); } #endregion //Constructors @@ -5169,6 +5193,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule //copy from SOP's data m_propertiesSyncInfo[property].UpdateSyncInfoByLocal(lastUpdateByLocalTS, syncID, (Object)part.AggregateScriptEvents); propertyUpdatedByLocal = true; + + //TEMP DEBUG + m_log.DebugFormat("CompareValue_UpdateByLocal -- copy SOP's AggregateScriptEvents {0}", part.AggregateScriptEvents); } else if (lastUpdateByLocalTS < m_propertiesSyncInfo[property].LastUpdateTimeStamp) { @@ -6410,6 +6437,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule /////////////////////// case SceneObjectPartSyncProperties.AggregateScriptEvents: part.AggregateScriptEvents = (scriptEvents)pSyncInfo.LastUpdateValue; + + m_log.DebugFormat("set {0} value to be {1}", property.ToString(), part.AggregateScriptEvents); + break; case SceneObjectPartSyncProperties.AllowedDrop: part.AllowedDrop = (bool)pSyncInfo.LastUpdateValue; diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index c1e8ed6b06..6bfd07ac73 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -791,8 +791,8 @@ namespace OpenSim.Region.Framework.Scenes /// public void LinkObjectBySync(SceneObjectGroup linkedGroup, UUID rootID, List childrenIDs) { - //m_log.Debug("Start to LinkObjectBySync"); - //DebugSceneObjectGroups(); + m_log.Debug("Start to LinkObjectBySync"); + DebugSceneObjectGroups(); List children = new List(); SceneObjectPart root = GetSceneObjectPart(rootID); @@ -813,7 +813,9 @@ namespace OpenSim.Region.Framework.Scenes continue; } - //m_log.Debug("to link part " + part.DebugObjectPartProperties()); + //TEMP DEBUG + m_log.Debug("to link part " + part.DebugObjectPartProperties()); + string partNames = ""; foreach (SceneObjectPart child in part.ParentGroup.Parts) { @@ -836,14 +838,14 @@ namespace OpenSim.Region.Framework.Scenes //localGroup.UpdateObjectGroupBySync(linkedGroup); //debug - /* + m_log.Debug("after SceneGraph.LinkObjectsBySync, the newly linked group is \n" + root.ParentGroup.DebugObjectUpdateResult()); m_log.Debug("parts before linking now have properties: "); foreach (SceneObjectPart part in children) { m_log.Debug(part.DebugObjectPartProperties()); } - * */ + } /// diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 6a2a00e0f9..a2f8b20465 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -5469,11 +5469,12 @@ namespace OpenSim.Region.Framework.Scenes public string DebugObjectPartProperties() { string debugMsg = "UUID " + UUID + ", Name " + Name + ", localID " + LocalId; - debugMsg += ", parentID " + ParentID + ", parentUUID " + ParentUUID; - foreach (KeyValuePair pair in m_bucketSyncInfoList) - { - debugMsg += ", Bucket " + pair.Key + ": TimeStamp - " + pair.Value.LastUpdateTimeStamp + ", ActorID - " + pair.Value.LastUpdateActorID; - } + //debugMsg += ", parentID " + ParentID + ", parentUUID " + ParentUUID; + //foreach (KeyValuePair pair in m_bucketSyncInfoList) + //{ + // debugMsg += ", Bucket " + pair.Key + ": TimeStamp - " + pair.Value.LastUpdateTimeStamp + ", ActorID - " + pair.Value.LastUpdateActorID; + //} + debugMsg += ", AggregateScriptEvents = " + AggregateScriptEvents.ToString()+", OffsetPosition: "+OffsetPosition; return debugMsg; }