diff --git a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs
index db5740009b..dd0e9d4945 100644
--- a/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs
+++ b/OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/SymmetricSync/RegionSyncModule.cs
@@ -84,9 +84,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
m_isSyncRelay = m_sysConfig.GetBoolean("IsSyncRelay", false);
m_isSyncListenerLocal = m_sysConfig.GetBoolean("IsSyncListenerLocal", false);
- //Setup the PropertyBucketMap
- PopulatePropertyBucketMap(m_sysConfig);
-
m_active = true;
LogHeader += "-Actor " + m_actorID;
@@ -737,24 +734,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
m_log.Warn("[REGION SYNC MODULE]: StatsTimerElapsed -- NOT yet implemented.");
}
- private SymmetricSyncMessage CreateNewObjectMessage(SceneObjectGroup sog)
- {
- OSDMap data = new OSDMap();
- string sogxml = SceneObjectSerializer.ToXml2Format(sog);
- data["sogxml"] = OSD.FromString(sogxml);
- OSDArray partArray = new OSDArray();
- foreach (SceneObjectPart part in sog.Parts)
- {
- OSDMap partData = PhysicsBucketPropertiesEncoder(m_physicsBucketName, part);
- partArray.Add(partData);
- }
- data["partPhysicsProperties"] = partArray;
- //string sogxml = SceneObjectSerializer.ToXml2Format(sog);
- SymmetricSyncMessage rsm = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.NewObject, OSDParser.SerializeJsonString(data));
-
- return rsm;
- }
-
private void HandleGetTerrainRequest(SyncConnector connector)
{
string msgData = m_scene.Heightmap.SaveToXmlString();
@@ -796,499 +775,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
}
}
- //Read in configuration for which property-bucket each property belongs to, and the description of each bucket
- private void PopulatePropertyBucketMap(IConfig config)
- {
- //We start with a default bucket map. Will add the code to read in configuration from config files later.
- PopulatePropertyBuketMapByDefault();
-
- //Pass the bucket information to SceneObjectPart.
- SceneObjectPart.InitializePropertyBucketInfo(m_primPropertyBucketMap, m_propertyBucketNames, m_actorID);
- }
-
- #region Bucket specific sender/receiver, encoder/decoder
- ////////////////////////////////////////////////////////////////////////
- // These are bucket specific functions, hence are "hard-coded", that is,
- // they each undestand the particular bucket it operates for.
- //
- // Each encoder should encode properties in OSDMap, and besides
- // properties, encode two more items:
- // Bucket -- bucket's name,
- // GroupPostiion -- the object group or object part's group position,
- // which is used to identify which quark an object
- // group/part belongs to.
- // The encoder needs to convert positions from local to global coordinates,
- // if necessary (client manager needs to).
- //
- // Each receiver should check if the object/prim's group position is
- // within local sync quarks' space. If not, ignore the sync message.
- // Otherwise, it calls decoder to decode the properties.
- //
- // Each decoder need to convert the coordicates if necessary (only client
- // manager needs to register for the conversion handler).
- ////////////////////////////////////////////////////////////////////////
-
- ///
- /// Decode and construct SceneObjectGroup, convert the coordinates of Position
- /// properties if necessary (from global to local).
- ///
- ///
- /// indicates if the constructed SOG resides in the Sync Quarks
- ///
- // private SceneObjectGroup DecodeSceneObjectGroup(string sogxml, out bool inLocalQuarks)
- private SceneObjectGroup DecodeSceneObjectGroup(string sogxml)
- {
- SceneObjectGroup sog = SceneObjectSerializer.FromXml2Format(sogxml);
-
- return sog;
- }
-
- ///////////////////////////////////////////////////////////////////////
- //Legacy implementation of NewObject encoder/decoder for bucket-based
- //sync protocol.
- ///////////////////////////////////////////////////////////////////////
-
- ///
- /// Encode all properties of an object. Assumption: no matter how many
- /// buckets are designed, there is always a "General" bucket that contains
- /// non-actor specific properties.
- /// The encoding include the sogxml of the object as serialized by
- /// SceneObjectSerializer, and encoding of properties in all buckets other
- /// than "General" bucket.
- ///
- ///
- ///
- private SymmetricSyncMessage NewObjectMessageEncoder(SceneObjectGroup sog)
- {
- OSDMap data = new OSDMap();
- string sogxml = SceneObjectSerializer.ToXml2Format(sog);
- data["SogXml"] = OSD.FromString(sogxml);
-
- //convert the coordinates if necessary
- Vector3 globalPos = sog.AbsolutePosition;
- data["GroupPosition"] = OSDMap.FromVector3(globalPos);
-
- foreach (string bucketName in m_propertyBucketNames)
- {
- //We assume there is always a General bucket, and properties in it
- //are covered in the xml serialization above
- if (bucketName.Equals(m_generalBucketName))
- continue;
-
- OSDArray partArray = new OSDArray();
- foreach (SceneObjectPart part in sog.Parts)
- {
- OSDMap partData = m_updatePerBucketEncoder[bucketName](bucketName, (Object)part);
- partArray.Add(partData);
- }
- data[bucketName] = partArray;
- }
- //string sogxml = SceneObjectSerializer.ToXml2Format(sog);
- SymmetricSyncMessage rsm = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.NewObject, OSDParser.SerializeJsonString(data));
-
- //SYNC DEBUG
- //m_log.DebugFormat("{0}: Created a NewObject message for {1},{2}, at pos {3}", LogHeader, sog.Name, sog.UUID, globalPos);
-
- return rsm;
- }
-
- private void NewObjectMessageDecoder(OSDMap data, out Object group)
- {
- //First, create the object group and add it to Scene
- string sogxml = data["SogXml"].AsString();
- Vector3 globalPos = data["GroupPosition"].AsVector3();
- SceneObjectGroup sog = DecodeSceneObjectGroup(sogxml);
-
- //Convert the coordinates if necessary
- Vector3 localPos = globalPos;
-
- sog.AbsolutePosition = localPos;
-
- //TEMP DEBUG
- //m_log.DebugFormat("{0}: received NewObject sync message for object {1}, {2} at pos {3}", LogHeader, sog.Name, sog.UUID, sog.AbsolutePosition.ToString());
-
- Scene.ObjectUpdateResult updateResult = m_scene.AddNewSceneObjectBySync(sog);
-
- //Second, for each prim in the object, update the properties in buckets
- //other than the General bucket
- foreach (string bucketName in m_propertyBucketNames)
- {
- if (bucketName.Equals(m_generalBucketName))
- continue;
-
- if (!data.ContainsKey(bucketName))
- {
- m_log.WarnFormat("{0}: On receiving NewObject, no properties in bucket {1} are included", LogHeader, bucketName);
- continue;
- }
-
- OSDArray partDataArray = (OSDArray)data[bucketName];
-
- for (int i = 0; i < partDataArray.Count; i++)
- {
- OSDMap partData = (OSDMap)partDataArray[i];
-
- m_primUpdatesPerBucketReceiver[bucketName](bucketName, partData);
- }
- }
-
- group = (Object)sog;
- }
-
- //As of current version, we still use the xml serialization as most of SOP's properties are in the General bucket.
- //Going forward, we may serialize the properties differently, e.g. using OSDMap
- private void PrimUpdatesGeneralBucketSender(string bucketName, List primUpdates)
- {
- Dictionary updatedObjects = new Dictionary();
- foreach (SceneObjectPart part in primUpdates)
- {
- if (!part.ParentGroup.IsDeleted)
- updatedObjects[part.ParentGroup.UUID] = part.ParentGroup;
- }
- long timeStamp = DateTime.Now.Ticks;
- foreach (SceneObjectGroup sog in updatedObjects.Values)
- {
- sog.UpdateTaintedBucketSyncInfo(bucketName, timeStamp); //this update the timestamp and clear the taint info of the bucket
- //string sogGeneralBucketEncoding = SceneObjectSerializer.ToXml2Format(sog);
- //SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedObject, sogGeneralBucketEncoding);
-
- OSDMap data = GeneralBucketPropertiesEncoder(bucketName, sog);
- SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedObject, OSDParser.SerializeJsonString(data));
-
- lock (m_stats) m_statSOGBucketOut++;
-
- //TEMP SYNC DEBUG
- //m_log.DebugFormat(LogHeader + " calling SendObjectUpdateToRelevantSyncConnectors for general bucket for sog {0},{1}", sog.Name, sog.UUID);
-
- SendObjectUpdateToRelevantSyncConnectors(sog, syncMsg);
-
- //clear the taints
- foreach (SceneObjectPart part in sog.Parts)
- {
- part.BucketSyncInfoList[bucketName].ClearBucketTaintBySync();
- }
- }
-
- //UpdateBucektLastSentTime(bucketName, timeStamp);
- }
-
- private void PrimUpdatesGeneralBucketReceiver(string bucketName, OSDMap data)
- {
- lock (m_stats) m_statSOGBucketIn++;
-
- if (!data.ContainsKey("GroupPosition"))
- {
- m_log.WarnFormat("{0}: PrimUpdatesGeneralBucketReceiver -- no GroupPosition is provided in the received update message");
- return;
- }
-
- //Check the object/prim's position, if outside of local quarks, ignore the update.
- Vector3 groupPosition = data["GroupPosition"].AsVector3();
- /*
- if (!m_syncQuarkManager.IsPosInSyncQuarks(groupPosition))
- {
- m_log.WarnFormat("{0}: Received a {1} bucket update for object at pos {2}, OUT OF local quarks", LogHeader, bucketName, groupPosition.ToString());
- return;
- }
- * */
-
- //TEMP SYNC DEBUG
- //m_log.DebugFormat("{0}: PrimUpdatesGeneralBucketReceiver called, for update at GroupPosition {1}", LogHeader, groupPosition.ToString());
-
- Object ret;
- GeneralBucketPropertiesDecoder(bucketName, data, out ret);
-
- SceneObjectGroup sog;
- if (ret is SceneObjectGroup && ret != null)
- {
- sog = (SceneObjectGroup)ret;
- }
- else
- {
- m_log.DebugFormat("{0}: Error in GeneralBucketPropertiesDecoder.", LogHeader);
- return;
- }
-
- if (sog.IsDeleted)
- {
- m_log.DebugFormat("{0}: Ignoring update on deleted object, Name: {1}, UUID: {2}.", LogHeader, sog.Name, sog.UUID);
- return;
- }
- else
- {
- //TEMP SYNC DEBUG
- //m_log.DebugFormat("{0}: UpdateObjectBySynchronization to be called for: sog {1}, {2}, at post {3}", LogHeader, sog.Name, sog.UUID, sog.AbsolutePosition);
-
- Scene.ObjectUpdateResult updateResult = m_scene.UpdateObjectBySynchronization(sog);
-
- /*
- switch (updateResult)
- {
- case Scene.ObjectUpdateResult.New:
- m_log.DebugFormat("[{0} Object \"{1}\" ({1}) ({2}) added.", LogHeader, sog.Name, sog.UUID.ToString(), sog.LocalId.ToString());
- break;
- case Scene.ObjectUpdateResult.Updated:
- m_log.DebugFormat("[{0} Object \"{1}\" ({1}) ({2}) updated.", LogHeader, sog.Name, sog.UUID.ToString(), sog.LocalId.ToString());
- break;
- case Scene.ObjectUpdateResult.Error:
- m_log.WarnFormat("[{0} Object \"{1}\" ({1}) ({2}) -- add or update ERROR.", LogHeader, sog.Name, sog.UUID.ToString(), sog.LocalId.ToString());
- break;
- case Scene.ObjectUpdateResult.Unchanged:
- //m_log.DebugFormat("[{0} Object \"{1}\" ({1}) ({2}) unchanged after receiving an update.", LogHeader, sog.Name, sog.UUID.ToString(), sog.LocalId.ToString());
- break;
- }
- * */
-
- //TEMP SYNC DEBUG
- // m_log.DebugFormat("{0}: end of processing UpdatedObject {4} bucket, for object {1}, {2}, at pos {3}", LogHeader, sog.Name,
- // sog.UUID, sog.AbsolutePosition, bucketName);
- }
- }
-
-
-
- ///
- /// Encode the properties of a given object(group) into string, to be
- /// included in an outgoing sync message.
- ///
- ///
- ///
- ///
- private OSDMap GeneralBucketPropertiesEncoder(string bucketName, Object group)
- {
- OSDMap data = new OSDMap();
-
- SceneObjectGroup sog;
- if (group is SceneObjectGroup)
- {
- sog = (SceneObjectGroup)group;
- }
- else
- return data;
-
- string sogxml = SceneObjectSerializer.ToXml2Format(sog);
- data["Bucket"] = OSDMap.FromString(bucketName);
- data["SogXml"] = OSDMap.FromString(sogxml);
-
- //convert the coordinates if necessary
- Vector3 globalPos = sog.AbsolutePosition;
- /*
- if (CoordinatesConversionHandler != null)
- {
- bool inComingMsg = false;
- globalPos = CoordinatesConversionHandler(globalPos, inComingMsg);
- }
- * */
-
- data["GroupPosition"] = OSDMap.FromVector3(globalPos);
-
- //TEMP DEBUG
- //m_log.Debug(LogHeader + " GeneralBucketPropertiesEncoder for " + sog.Name + "," + sog.UUID + ". GlobalPos: " + globalPos.ToString());
-
- return data;
- }
-
- private void GeneralBucketPropertiesDecoder(string bucketName, OSDMap data, out Object group)
- {
- group = null;
- if (!data.ContainsKey("SogXml") || !data.ContainsKey("GroupPosition"))
- {
- m_log.WarnFormat("{0}: GeneralBucketPropertiesDecoder -- Either SogXml or GroupPosition is missing in the received update message");
- return;
- }
-
- string sogxml = data["SogXml"].AsString();
- Vector3 globalPos = data["GroupPosition"].AsVector3();
-
- SceneObjectGroup sog = SceneObjectSerializer.FromXml2Format(sogxml);
-
- /*
- if (CoordinatesConversionHandler != null)
- {
- bool inComingMsg = true;
- sog.AbsolutePosition = CoordinatesConversionHandler(globalPos, inComingMsg);
- }
- * */
-
- group = sog;
- }
-
-
- private void PrimUpdatesPhysicsBucketSender(string bucketName, List primUpdates)
- {
- foreach (SceneObjectPart updatedPart in primUpdates)
- {
- if (updatedPart.ParentGroup.IsDeleted)
- continue;
-
- updatedPart.UpdateTaintedBucketSyncInfo(bucketName, DateTime.Now.Ticks);
-
- //string partPhysicsBucketEncoding = PhysicsBucketPropertiesEncoder(bucketName, updatedPart);
- OSDMap partData = PhysicsBucketPropertiesEncoder(bucketName, updatedPart);
- //SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedBucketProperties, OSDParser.SerializeJsonString(partData));
- SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedObject, OSDParser.SerializeJsonString(partData));
-
- lock (m_stats) m_statPhysBucketOut++;
- SendPrimUpdateToRelevantSyncConnectors(updatedPart, syncMsg, updatedPart.BucketSyncInfoList[bucketName].LastUpdateActorID);
-
- //clear the taints
- updatedPart.BucketSyncInfoList[bucketName].ClearBucketTaintBySync();
- }
-
- //UpdateBucektLastSentTime(bucketName);
- }
-
- private void PrimUpdatesPhysicsBucketReceiver(string bucketName, OSDMap data)
- {
- lock (m_stats) m_statPhysBucketIn++;
-
- if (!data.ContainsKey("GroupPosition"))
- {
- m_log.WarnFormat("{0}: PrimUpdatesGeneralBucketReceiver -- no GroupPosition is provided in the received update message");
- return;
- }
-
- //check the object/prim's position, if outside of local quarks, ignore it
- Vector3 groupPosition = data["GroupPosition"].AsVector3();
- /*
- if (!m_syncQuarkManager.IsPosInSyncQuarks(groupPosition))
- {
- m_log.WarnFormat("{0}: Received a {1} bucket update for object at pos {2}, OUT OF local quarks", LogHeader, bucketName, groupPosition.ToString());
- return;
- }
- * */
-
- //TEMP SYNC DEBUG
- //m_log.DebugFormat("{0}: PrimUpdatesPhysicsBucketReceiver called, for update at GroupPosition {1}", LogHeader, groupPosition.ToString());
-
- Object ret;
- PhysicsBucketPropertiesDecoder(bucketName, data, out ret);
-
- OSDMap recvData;
- if (ret is OSDMap && ret != null)
- {
- recvData = (OSDMap)ret;
- }
- else
- {
- m_log.DebugFormat("{0}: Error in PhysicsBucketPropertiesDecoder.", LogHeader);
- return;
- }
-
- UUID partUUID = data["UUID"].AsUUID();
-
-
- BucketSyncInfo rBucketSyncInfo = new BucketSyncInfo(bucketName);
- rBucketSyncInfo.LastUpdateTimeStamp = data["LastUpdateTimeStamp"].AsLong();
- rBucketSyncInfo.LastUpdateActorID = data["LastUpdateActorID"].AsString();
-
- m_scene.UpdateObjectPartBucketProperties(bucketName, partUUID, data, rBucketSyncInfo);
-
- //TEMP SYNC DEBUG
- SceneObjectPart localPart = m_scene.GetSceneObjectPart(partUUID);
- //m_log.DebugFormat("{0}: end of processing UpdatedObject {4} bucket, for part {1}, {2}, at group pos {3}", LogHeader, localPart.Name,
- // localPart.UUID, localPart.GroupPosition, bucketName);
- }
-
- private OSDMap PhysicsBucketPropertiesEncoder(string bucketName, Object part)
- {
- OSDMap data = new OSDMap();
-
- SceneObjectPart updatedPart;
- if (part is SceneObjectPart)
- {
- updatedPart = (SceneObjectPart)part;
- }
- else
- return data;
-
-
- data["Bucket"] = OSD.FromString(bucketName);
-
- //Convert GroupPosition if necessary
- Vector3 globalGroupPos = updatedPart.GroupPosition;
- /*
- if (CoordinatesConversionHandler != null)
- {
- bool inComingMsg = false;
- globalGroupPos = CoordinatesConversionHandler(globalGroupPos, inComingMsg);
- }
- * */
- data["GroupPosition"] = OSDMap.FromVector3(globalGroupPos); //This records the global GroupPosition.
-
- data["UUID"] = OSD.FromUUID(updatedPart.UUID);
- data["OffsetPosition"] = OSD.FromVector3(updatedPart.OffsetPosition);
- data["Scale"] = OSD.FromVector3(updatedPart.Scale);
- data["AngularVelocity"] = OSD.FromVector3(updatedPart.AngularVelocity);
- data["RotationOffset"] = OSD.FromQuaternion(updatedPart.RotationOffset);
-
- Physics.Manager.PhysicsActor pa = updatedPart.PhysActor;
- if (pa != null)
- {
-
- //Convert Position if necessary
- Vector3 globalPos = pa.Position;
- /*
- if (CoordinatesConversionHandler != null)
- {
- bool inComingMsg = false;
- globalPos = CoordinatesConversionHandler(globalPos, inComingMsg);
- }
- * */
- data["Position"] = OSDMap.FromVector3(globalPos); //This records the global GroupPosition.
-
- data["Size"] = OSD.FromVector3(pa.Size);
- //data["Position"] = OSD.FromVector3(pa.Position);
- data["Force"] = OSD.FromVector3(pa.Force);
- data["Velocity"] = OSD.FromVector3(pa.Velocity);
- data["RotationalVelocity"] = OSD.FromVector3(pa.RotationalVelocity);
- data["PA_Acceleration"] = OSD.FromVector3(pa.Acceleration);
- data["Torque"] = OSD.FromVector3(pa.Torque);
- data["Orientation"] = OSD.FromQuaternion(pa.Orientation);
- data["IsPhysical"] = OSD.FromBoolean(pa.IsPhysical);
- data["Flying"] = OSD.FromBoolean(pa.Flying);
- data["Kinematic"] = OSD.FromBoolean(pa.Kinematic);
- data["Buoyancy"] = OSD.FromReal(pa.Buoyancy);
- data["CollidingGround"] = OSD.FromBoolean(pa.CollidingGround);
- data["IsColliding"] = OSD.FromBoolean(pa.IsColliding);
-
- //m_log.DebugFormat("{0}: PhysBucketSender for {1}, pos={2}", LogHeader, updatedPart.UUID.ToString(), pa.Position.ToString());
- }
-
- data["LastUpdateTimeStamp"] = OSD.FromLong(updatedPart.BucketSyncInfoList[bucketName].LastUpdateTimeStamp);
- data["LastUpdateActorID"] = OSD.FromString(updatedPart.BucketSyncInfoList[bucketName].LastUpdateActorID);
-
- return data;
- }
-
- private void PhysicsBucketPropertiesDecoder(string bucketName, OSDMap msgData, out Object data)
- {
- /*
- if (msgData.ContainsKey("GroupPosition"))
- {
- if (CoordinatesConversionHandler != null)
- {
- bool inComingMsg = true;
- Vector3 globalGroupPos = msgData["GroupPosition"].AsVector3();
- msgData["GroupPosition"] = OSDMap.FromVector3(CoordinatesConversionHandler(globalGroupPos, inComingMsg));
- }
- }
-
- if (msgData.ContainsKey("Position"))
- {
- if (CoordinatesConversionHandler != null)
- {
- bool inComingMsg = true;
- Vector3 globalPos = msgData["Position"].AsVector3();
- msgData["Position"] = OSDMap.FromVector3(CoordinatesConversionHandler(globalPos, inComingMsg));
- }
- }
- * */
-
- data = (Object)msgData;
- }
-
- #endregion //Bucket specific sender/receiver, encoder/decoder
private bool HaveUpdatesToSendoutForSync(SceneObjectPart part, string bucketName)
{
@@ -1302,76 +788,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
}
}
- //by default, there are two property buckets: the "General" bucket and the "Physics" bucket.
- private string m_generalBucketName = "General";
- private string m_physicsBucketName = "Physics";
- //If nothing configured in the config file, this is the default settings for grouping properties into different bucket
- private void PopulatePropertyBuketMapByDefault()
- {
-
- m_propertyBucketNames.Add(m_generalBucketName);
- m_propertyBucketNames.Add(m_physicsBucketName);
- m_maxNumOfPropertyBuckets = m_propertyBucketNames.Count;
-
- //Linking each bucket with the sender/receiver function for sending/receiving an update message
- m_primUpdatesPerBucketSender.Add(m_generalBucketName, PrimUpdatesGeneralBucketSender);
- m_primUpdatesPerBucketSender.Add(m_physicsBucketName, PrimUpdatesPhysicsBucketSender);
-
- m_primUpdatesPerBucketReceiver.Add(m_generalBucketName, PrimUpdatesGeneralBucketReceiver);
- m_primUpdatesPerBucketReceiver.Add(m_physicsBucketName, PrimUpdatesPhysicsBucketReceiver);
-
- //Linking each bucket with the encoder/decoder functions that encode/decode the properties in the bucket
- m_updatePerBucketEncoder.Add(m_generalBucketName, GeneralBucketPropertiesEncoder);
- m_updatePerBucketEncoder.Add(m_physicsBucketName, PhysicsBucketPropertiesEncoder);
-
- m_updatePerBucketDecoder.Add(m_generalBucketName, GeneralBucketPropertiesDecoder);
- m_updatePerBucketDecoder.Add(m_physicsBucketName, PhysicsBucketPropertiesDecoder);
-
-
- //m_lastUpdateSentTime.Add("General", 0);
- //m_lastUpdateSentTime.Add("Physics", 0);
-
- //Mapping properties to buckets.
- foreach (SceneObjectPartSyncProperties property in Enum.GetValues(typeof(SceneObjectPartSyncProperties)))
- {
- switch (property)
- {
- case SceneObjectPartSyncProperties.GroupPosition:
- case SceneObjectPartSyncProperties.OffsetPosition:
- case SceneObjectPartSyncProperties.Scale:
- case SceneObjectPartSyncProperties.AngularVelocity:
- case SceneObjectPartSyncProperties.RotationOffset:
- case SceneObjectPartSyncProperties.Size:
- case SceneObjectPartSyncProperties.Position:
- case SceneObjectPartSyncProperties.Force:
- case SceneObjectPartSyncProperties.Velocity:
- case SceneObjectPartSyncProperties.RotationalVelocity:
- case SceneObjectPartSyncProperties.PA_Acceleration:
- case SceneObjectPartSyncProperties.Torque:
- case SceneObjectPartSyncProperties.Orientation:
- case SceneObjectPartSyncProperties.IsPhysical:
- case SceneObjectPartSyncProperties.Flying:
- case SceneObjectPartSyncProperties.Kinematic:
- case SceneObjectPartSyncProperties.Buoyancy:
- case SceneObjectPartSyncProperties.CollidingGround:
- case SceneObjectPartSyncProperties.IsColliding:
- m_primPropertyBucketMap.Add(property, m_physicsBucketName);
- break;
- default:
- //all other properties belong to the "General" bucket.
- m_primPropertyBucketMap.Add(property, m_generalBucketName);
- break;
- }
- }
-
- //create different lists to keep track which SOP has what properties updated (which bucket of properties)
- foreach (string bucketName in m_propertyBucketNames)
- {
- m_primUpdates.Add(bucketName, new Dictionary());
- m_primUpdateLocks.Add(bucketName, new Object());
- }
- }
-
private bool IsSyncingWithOtherSyncNodes()
{
return (m_syncConnectors.Count > 0);
@@ -1484,36 +900,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
}
}
- ///
- /// Check if we need to send out an update message for the given object. For now, we have a very inefficient solution:
- /// If any synchronization bucket in any part shows a property in that bucket has changed, we'll serialize and ship the whole object.
- ///
- ///
- ///
- private bool CheckObjectForSendingUpdate(SceneObjectGroup sog)
- {
- //If any part in the object has the last update caused by this actor itself, then send the update
- foreach (SceneObjectPart part in sog.Parts)
- {
- /*
- if (!part.LastUpdateActorID.Equals(m_actorID))
- {
- return true;
- }
- * */
-
- foreach (KeyValuePair pair in part.BucketSyncInfoList)
- {
- if (pair.Value.LastUpdateActorID.Equals(m_actorID))
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
///
/// Get the set of SyncConnectors to send updates of the given object.
///
@@ -1530,7 +916,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
//in other parts as well, so we are sending to all connectors.
ForEachSyncConnector(delegate(SyncConnector connector)
{
- //if(!connector.OtherSideActorID.Equals(sog.BucketSyncInfoUpdate[
syncConnectors.Add(connector);
});
}
@@ -1897,31 +1282,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
}
}
- //debug functions
- private void BucketSyncDebug()
- {
- //Legacy serialization/deserialization for bucket based sync
- /*
- //first test serialization
- StringWriter sw = new StringWriter();
- XmlTextWriter writer = new XmlTextWriter(sw);
- Dictionary bucketSyncInfoList = new Dictionary();
- BucketSyncInfo generalBucket = new BucketSyncInfo(DateTime.Now.Ticks, m_actorID, "General");
- bucketSyncInfoList.Add("General", generalBucket);
- BucketSyncInfo physicsBucket = new BucketSyncInfo(DateTime.Now.Ticks, m_actorID, "Physics");
- bucketSyncInfoList.Add("Physics", physicsBucket);
- SceneObjectSerializer.WriteBucketSyncInfo(writer, bucketSyncInfoList);
-
- string xmlString = sw.ToString();
- m_log.DebugFormat("Serialized xml string: {0}", xmlString);
-
- //second, test de-serialization
- XmlTextReader reader = new XmlTextReader(new StringReader(xmlString));
- SceneObjectPart part = new SceneObjectPart();
- SceneObjectSerializer.ProcessBucketSyncInfo(part, reader);
- * */
- }
-
private void PrimSyncSerializationDebug()
{
if (m_scene != null)
@@ -2193,11 +1553,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
HandleUpdatedObject(msg, senderActorID);
return;
}
- case SymmetricSyncMessage.MsgType.UpdatedBucketProperties:
- {
- HandleUpdatedBucketProperties(msg, senderActorID);
- return;
- }
case SymmetricSyncMessage.MsgType.RemovedObject:
{
HandleRemovedObject(msg, senderActorID);
@@ -2205,13 +1560,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
}
case SymmetricSyncMessage.MsgType.LinkObject:
{
- //HandleLinkObject(msg, senderActorID);
HandleSyncLinkObject(msg, senderActorID);
return;
}
case SymmetricSyncMessage.MsgType.DelinkObject:
{
- //HandleDelinkObject(msg, senderActorID);
HandleSyncDelinkObject(msg, senderActorID);
return;
}
@@ -2522,32 +1875,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
// Bucket sync handlers
///////////////////////////////////////////////////////////////////////
- private void HandleAddNewObject(SymmetricSyncMessage msg, string senderActorID)
- {
-
- OSDMap data = DeserializeMessage(msg);
-
- //if this is a relay node, forward the event
- Vector3 globalPos = data["GroupPosition"].AsVector3();
- if (m_isSyncRelay)
- {
- SendSpecialObjectUpdateToRelevantSyncConnectors(senderActorID, globalPos, msg);
- }
-
- /*
- if (!m_syncQuarkManager.IsPosInSyncQuarks(globalPos))
- {
- m_log.WarnFormat("{0}: Received an update for object at global pos {1}, not within local quarks, ignore the update", LogHeader, globalPos.ToString());
- return;
- }
- * */
-
- SceneObjectGroup sog;
- Object group;
- NewObjectMessageDecoder(data, out group);
- sog = (SceneObjectGroup)group;
- //Might need to do something with SOG, or no more actions, just return
- }
///
/// Handler of UpdatedObject message. Note: for a relay node in the
@@ -2650,32 +1977,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
}
}
- private void HandleUpdatedBucketProperties(SymmetricSyncMessage msg, string senderActorID)
- {
- // Get the data from message and error check
- OSDMap data = DeserializeMessage(msg);
-
- if (data == null)
- {
- SymmetricSyncMessage.HandleError(LogHeader, msg, "Could not deserialize JSON data.");
- return;
- }
-
- lock (m_stats) m_statPhysBucketIn++;
-
- UUID partUUID = data["UUID"].AsUUID();
- string bucketName = data["Bucket"].AsString();
-
- //m_log.DebugFormat("{0}: HandleUpdatedBucketProperties from {1}: for {2}/{3}", LogHeader, senderActorID, partUUID.ToString(), bucketName);
-
- BucketSyncInfo rBucketSyncInfo = new BucketSyncInfo(bucketName);
- rBucketSyncInfo.LastUpdateTimeStamp = data["LastUpdateTimeStamp"].AsLong();
- rBucketSyncInfo.LastUpdateActorID = data["LastUpdateActorID"].AsString();
- // updatedPart.BucketSyncInfoList.Add(bucketName, rBucketSyncInfo);
-
- m_scene.UpdateObjectPartBucketProperties(bucketName, partUUID, data, rBucketSyncInfo);
- }
-
///
/// Send out a sync message about the updated Terrain. If this is a relay node,
/// forward the sync message to all connectors except the one which initiated
@@ -2770,107 +2071,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule
}
- private void HandleLinkObject(SymmetricSyncMessage msg, string senderActorID)
- {
-
- // Get the data from message and error check
- OSDMap data = DeserializeMessage(msg);
- if (data == null)
- {
- SymmetricSyncMessage.HandleError(LogHeader, msg, "Could not deserialize JSON data.");
- return;
- }
-
- //string init_actorID = data["actorID"].AsString();
- string sogxml = data["linkedGroup"].AsString();
- //SceneObjectGroup linkedGroup = SceneObjectSerializer.FromXml2Format(sogxml);
- SceneObjectGroup linkedGroup = DecodeSceneObjectGroup(sogxml);
-
- UUID rootID = data["rootID"].AsUUID();
- int partCount = data["partCount"].AsInteger();
- List childrenIDs = new List();
-
-
- //if this is a relay node, forwards the event
- if (m_isSyncRelay)
- {
- //SendSceneEventToRelevantSyncConnectors(senderActorID, msg, linkedGroup);
- SendSpecialObjectUpdateToRelevantSyncConnectors(senderActorID, linkedGroup, msg);
- }
-
- for (int i = 0; i < partCount; i++)
- {
- string partTempID = "part" + i;
- childrenIDs.Add(data[partTempID].AsUUID());
- }
-
- //TEMP SYNC DEBUG
- //m_log.DebugFormat("{0}: received LinkObject from {1}", LogHeader, senderActorID);
-
- m_scene.LinkObjectBySync(linkedGroup, rootID, childrenIDs);
-
-
- }
-
- private void HandleDelinkObject(SymmetricSyncMessage msg, string senderActorID)
- {
-
-
- OSDMap data = DeserializeMessage(msg);
- if (data == null)
- {
- SymmetricSyncMessage.HandleError(LogHeader, msg, "Could not deserialize JSON data.");
- return;
- }
-
- //List localPrims = new List();
- List delinkPrimIDs = new List();
- List beforeDelinkGroupIDs = new List();
- List incomingAfterDelinkGroups = new List();
-
- int partCount = data["partCount"].AsInteger();
- for (int i = 0; i < partCount; i++)
- {
- string partTempID = "part" + i;
- UUID primID = data[partTempID].AsUUID();
- //SceneObjectPart localPart = m_scene.GetSceneObjectPart(primID);
- //localPrims.Add(localPart);
- delinkPrimIDs.Add(primID);
- }
-
- int beforeGroupCount = data["beforeGroupsCount"].AsInteger();
- for (int i = 0; i < beforeGroupCount; i++)
- {
- string groupTempID = "beforeGroup" + i;
- UUID beforeGroupID = data[groupTempID].AsUUID();
- beforeDelinkGroupIDs.Add(beforeGroupID);
- }
-
- int afterGroupsCount = data["afterGroupsCount"].AsInteger();
- for (int i = 0; i < afterGroupsCount; i++)
- {
- string groupTempID = "afterGroup" + i;
- string sogxml = data[groupTempID].AsString();
- //SceneObjectGroup afterGroup = SceneObjectSerializer.FromXml2Format(sogxml);
- SceneObjectGroup afterGroup = DecodeSceneObjectGroup(sogxml);
- incomingAfterDelinkGroups.Add(afterGroup);
- }
-
- //if this is a relay node, forwards the event
- if (m_isSyncRelay)
- {
- List beforeDelinkGroups = new List();
- foreach (UUID sogID in beforeDelinkGroupIDs)
- {
- SceneObjectGroup sog = m_scene.SceneGraph.GetGroupByPrim(sogID);
- beforeDelinkGroups.Add(sog);
- }
- SendDelinkObjectToRelevantSyncConnectors(senderActorID, beforeDelinkGroups, msg);
- }
-
- m_scene.DelinkObjectsBySync(delinkPrimIDs, beforeDelinkGroupIDs, incomingAfterDelinkGroups);
-
- }
#endregion //Sync message handlers
#region Remote Event handlers
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs
index 9d14b77cc4..9f61ae5fd7 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.cs
@@ -851,13 +851,6 @@ namespace OpenSim.Region.Framework.Scenes
m_sceneGraph.DelinkObjectsBySync(delinkPrimIDs, beforeDelinkGroupIDs, incomingAfterDelinkGroups);
}
- //public ObjectUpdateResult UpdateObjectPartBucketProperties(string bucketName, UUID partUUID, Dictionary updatedProperties, BucketSyncInfo rBucketSyncInfo)
- public ObjectUpdateResult UpdateObjectPartBucketProperties(string bucketName, UUID partUUID,
- Object updatePart, BucketSyncInfo bucketSyncInfo)
- {
- return m_sceneGraph.UpdateObjectPartBucketProperties(bucketName, partUUID, updatePart, bucketSyncInfo);
- }
-
public bool AddNewSceneObjectByDelink(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
{
if (m_sceneGraph.AddNewSceneObjectByDelink(sceneObject, attachToBackup, sendClientUpdates))
diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
index a8045ba464..0e437ab806 100644
--- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs
@@ -2198,18 +2198,8 @@ 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
- //DSG SYNC: need to copy value w/o trigger UpdateBucketSyncInfo
- //child.RootPart.ObjectSaleType = 0;
- //child.RootPart.SalePrice = 10;
- //child.RootPart.SetObjectSaleType(0);
- //child.RootPart.SetSalePrice(10);
- //child.RootPart.SetProperty("ObjectSaleType", 0);
- //child.RootPart.SetProperty("SalePrice", 10);
-
- //casting SOP to SOPBase to make sure we call SOPBase.Property set function, not the SOP.Property set function
- SceneObjectPartBase rootPart = (SceneObjectPartBase)child.RootPart;
- rootPart.ObjectSaleType = 0;
- rootPart.SalePrice = 10;
+ child.RootPart.ObjectSaleType = 0;
+ child.RootPart.SalePrice = 10;
childGroups.Add(child);
}
}
@@ -2496,19 +2486,6 @@ namespace OpenSim.Region.Framework.Scenes
return afterDelinkGroups;
}
- //public Scene.ObjectUpdateResult UpdateObjectPartBucketProperties(string bucketName, UUID partUUID, Dictionary updatedProperties, BucketSyncInfo rBucketSyncInfo)
- public Scene.ObjectUpdateResult UpdateObjectPartBucketProperties(string bucketName, UUID partUUID,
- Object updatedPart, BucketSyncInfo bucketSyncInfo)
- {
- SceneObjectPart localPart = GetSceneObjectPart(partUUID);
- if (localPart == null)
- {
- m_log.Warn("No SOP found: UUID -- " + partUUID);
- return Scene.ObjectUpdateResult.Unchanged;
- }
- return localPart.UpdateBucketProperties(bucketName, updatedPart, bucketSyncInfo);
- }
-
protected internal bool AddNewSceneObjectByDelink(SceneObjectGroup sceneObject, bool attachToBackup, bool sendClientUpdates)
{
// Ensure that we persist this new scene object if it's not an
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
index e7854ce9d8..c4413482d9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs
@@ -601,6 +601,7 @@ namespace OpenSim.Region.Framework.Scenes
//ScheduleGroupForFullUpdate();
//DSG SYNC
+ /*
if (m_scene.RegionSyncModule != null)
{
foreach (SceneObjectPart part in Parts)
@@ -608,6 +609,7 @@ namespace OpenSim.Region.Framework.Scenes
part.InitializeBucketSyncInfo();
}
}
+ * */
}
public Vector3 GroupScale()