Added SendNewObject to explicitly send out NewObject sync message when new objects are added.
							parent
							
								
									48ad2010e5
								
							
						
					
					
						commit
						37dd39fd5d
					
				|  | @ -246,7 +246,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|             { | ||||
|                 if (m_primUpdates[bucketName].Count > 0) | ||||
|                 { | ||||
|                     m_log.Debug(m_primUpdates[bucketName].Count + " updated parts in bucket " + bucketName); | ||||
|                     //m_log.Debug(m_primUpdates[bucketName].Count + " updated parts in bucket " + bucketName); | ||||
|                     lock (m_primUpdateLocks[bucketName]) | ||||
|                     { | ||||
|                         updated = true; | ||||
|  | @ -376,6 +376,24 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Send a sync message to add the given object to other sync nodes. | ||||
|         /// </summary> | ||||
|         /// <param name="sog"></param> | ||||
|         public void SendNewObject(SceneObjectGroup sog) | ||||
|         { | ||||
|             if (!IsSyncingWithOtherActors()) | ||||
|             { | ||||
|                 //no SyncConnector connected. Do nothing. | ||||
|                 return; | ||||
|             } | ||||
|             m_log.DebugFormat(LogHeader + "SendNewObject called for object {0}, {1}", sog.Name, sog.UUID); | ||||
| 
 | ||||
|             string sogxml = SceneObjectSerializer.ToXml2Format(sog); | ||||
|             SymmetricSyncMessage rsm = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.NewObject, sogxml); | ||||
|             SendObjectUpdateToRelevantSyncConnectors(sog, rsm); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Send a sync message to remove the given objects in all connected actors.  | ||||
|         /// UUID is used for identified a removed object. This function now should | ||||
|  | @ -772,7 +790,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                 data["LastUpdateTimeStamp"] = OSD.FromLong(updatedPart.BucketSyncInfoList[bucketName].LastUpdateTimeStamp); | ||||
|                 data["LastUpdateActorID"] = OSD.FromString(updatedPart.BucketSyncInfoList[bucketName].LastUpdateActorID); | ||||
| 
 | ||||
|                 m_log.Debug(LogHeader + " Send out Physics Bucket updates for " + updatedPart.Name + ". GroupPosition: " + updatedPart.GroupPosition.ToString()); | ||||
|                 //m_log.Debug(LogHeader + " Send out Physics Bucket updates for " + updatedPart.Name + ". GroupPosition: " + updatedPart.GroupPosition.ToString()); | ||||
| 
 | ||||
|                 SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedBucketProperties, OSDParser.SerializeJsonString(data)); | ||||
|                 //m_log.DebugFormat("{0}: PhysBucketSender for {1}, pos={2}", LogHeader, updatedPart.UUID.ToString(), pa.Position.ToString()); | ||||
|  | @ -849,8 +867,6 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                 //string sogxml = SceneObjectSerializer.ToXml2Format(sog); | ||||
|                 //SymmetricSyncMessage syncMsg = new SymmetricSyncMessage(SymmetricSyncMessage.MsgType.UpdatedObject, sogxml); | ||||
| 
 | ||||
|                 m_log.Debug(LogHeader + " send " + syncMsg.Type.ToString() + " about "+sog.Name+"," + sog.UUID+ " to " + connector.OtherSideActorID); | ||||
| 
 | ||||
|                 connector.EnqueueOutgoingUpdate(sog.UUID, syncMsg.ToBytes()); | ||||
|             } | ||||
|         } | ||||
|  | @ -1459,6 +1475,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|                         return; | ||||
|                     } | ||||
|                 case SymmetricSyncMessage.MsgType.NewObject: | ||||
|                     HandleAddNewObject(msg, senderActorID); | ||||
|                     break; | ||||
|                 case SymmetricSyncMessage.MsgType.UpdatedObject: | ||||
|                     { | ||||
|                         HandleAddOrUpdateObjectBySynchronization(msg, senderActorID); | ||||
|  | @ -1526,18 +1544,30 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|             m_log.Debug(LogHeader + ": Synchronized terrain"); | ||||
|         } | ||||
| 
 | ||||
|         private void HandleAddNewObject(SymmetricSyncMessage msg, string senderActorID) | ||||
|         { | ||||
|             string sogxml = Encoding.ASCII.GetString(msg.Data, 0, msg.Length); | ||||
|             SceneObjectGroup sog = SceneObjectSerializer.FromXml2Format(sogxml); | ||||
| 
 | ||||
|             m_log.DebugFormat("{0}: received NewObject sync message from {1}, for object {1}, {2}", LogHeader, senderActorID, sog.Name, sog.UUID); | ||||
| 
 | ||||
|             Scene.ObjectUpdateResult updateResult = m_scene.AddOrUpdateObjectBySynchronization(sog); | ||||
|         } | ||||
| 
 | ||||
|         private void HandleAddOrUpdateObjectBySynchronization(SymmetricSyncMessage msg, string senderActorID) | ||||
|         { | ||||
|             string sogxml = Encoding.ASCII.GetString(msg.Data, 0, msg.Length); | ||||
|             SceneObjectGroup sog = SceneObjectSerializer.FromXml2Format(sogxml); | ||||
| 
 | ||||
|             //SYNC DEBUG | ||||
|             /* | ||||
|             string partnames = ""; | ||||
|             foreach (SceneObjectPart part in sog.Parts) | ||||
|             { | ||||
|                 partnames += "(" + part.Name + ", " + part.UUID + ")"; | ||||
|             } | ||||
|             m_log.Debug(LogHeader+" received "+msg.Type.ToString()+" from "+senderActorID+" about obj "+sog.Name+", "+sog.UUID+"; parts -- "+partnames); | ||||
|              * */  | ||||
| 
 | ||||
|             if (sog.IsDeleted) | ||||
|             { | ||||
|  | @ -2039,7 +2069,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
|         /// <param name="data">OSDMap data of event args</param> | ||||
|         private void HandleRemoteEvent_OnObjectGrab(string actorID, ulong evSeqNum, OSDMap data) | ||||
|         { | ||||
|             m_log.Debug(LogHeader + ", " + m_actorID + ": received GrabObject from " + actorID + ", seq " + evSeqNum); | ||||
|            // m_log.Debug(LogHeader + ", " + m_actorID + ": received GrabObject from " + actorID + ", seq " + evSeqNum); | ||||
| 
 | ||||
| 
 | ||||
|             UUID agentID = data["agentID"].AsUUID(); | ||||
|  | @ -2076,7 +2106,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
| 
 | ||||
|         private void HandleRemoteEvent_OnObjectGrabbing(string actorID, ulong evSeqNum, OSDMap data) | ||||
|         { | ||||
|             m_log.Debug(LogHeader + ", " + m_actorID + ": received GrabObject from " + actorID + ", seq " + evSeqNum); | ||||
|            // m_log.Debug(LogHeader + ", " + m_actorID + ": received GrabObject from " + actorID + ", seq " + evSeqNum); | ||||
| 
 | ||||
|             UUID agentID = data["agentID"].AsUUID(); | ||||
|             UUID primID = data["primID"].AsUUID(); | ||||
|  | @ -2113,7 +2143,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | |||
| 
 | ||||
|         private void HandleRemoteEvent_OnObjectDeGrab(string actorID, ulong evSeqNum, OSDMap data) | ||||
|         { | ||||
|             m_log.Debug(LogHeader + ", " + m_actorID + ": received GrabObject from " + actorID + ", seq " + evSeqNum); | ||||
|            // m_log.Debug(LogHeader + ", " + m_actorID + ": received GrabObject from " + actorID + ", seq " + evSeqNum); | ||||
| 
 | ||||
|             UUID agentID = data["agentID"].AsUUID(); | ||||
|             UUID primID = data["primID"].AsUUID(); | ||||
|  |  | |||
|  | @ -72,6 +72,7 @@ namespace OpenSim.Region.Framework.Interfaces | |||
| 
 | ||||
|         //The folloiwng calls deal with object updates, and will insert each update into an outgoing queue of each SyncConnector | ||||
|         void SendSceneUpdates(); | ||||
|         void SendNewObject(SceneObjectGroup sog); | ||||
|         void SendDeleteObject(SceneObjectGroup sog, bool softDelete); | ||||
|         void SendLinkObject(SceneObjectGroup linkedGroup, SceneObjectPart root, List<SceneObjectPart> children); | ||||
|         void SendDeLinkObject(List<SceneObjectPart> prims, List<SceneObjectGroup> beforeDelinkGroups, List<SceneObjectGroup> afterDelinkGroups); | ||||
|  |  | |||
|  | @ -544,12 +544,15 @@ namespace OpenSim.Region.Framework.Scenes | |||
| 
 | ||||
|         /////////////////////////////////////////////////////////////////////////////////////////////// | ||||
| 
 | ||||
|         //!!! Obsolete function. Shouldn't be used anymore. | ||||
| 
 | ||||
|         //This function should only be called by an actor who's local Scene is just a cache of the authorative Scene. | ||||
|         //If the object already exists, use the new copy to replace it. | ||||
|         //Return true if added, false if just updated | ||||
|         public bool AddOrUpdateObjectInLocalScene(SceneObjectGroup sog, bool debugWithViewer) | ||||
|         { | ||||
|             return m_sceneGraph.AddOrUpdateObjectInScene(sog, debugWithViewer); | ||||
|             return false; | ||||
|             //return m_sceneGraph.AddOrUpdateObjectInScene(sog, debugWithViewer); | ||||
|              | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -382,10 +382,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             m_numPrim += children.Length; | ||||
| 
 | ||||
|             sceneObject.AttachToScene(m_parentScene); | ||||
| 
 | ||||
|             if (sendClientUpdates) | ||||
|                 //sceneObject.ScheduleGroupForFullUpdate(); | ||||
|                 sceneObject.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>(){SceneObjectPartProperties.None});  | ||||
|              | ||||
|             Entities.Add(sceneObject); | ||||
| 
 | ||||
|  | @ -409,6 +405,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                     SceneObjectGroupsByLocalID[part.LocalId] = sceneObject; | ||||
|             } | ||||
| 
 | ||||
|             //SYMMETRIC SYNC: sending NewObject event, and sending it before calling ScheduleGroupForFullUpdate | ||||
|             if (m_parentScene.RegionSyncModule != null) | ||||
|             { | ||||
|                 m_parentScene.RegionSyncModule.SendNewObject(sceneObject); | ||||
|             } | ||||
| 
 | ||||
|             if (sendClientUpdates) | ||||
|                 //sceneObject.ScheduleGroupForFullUpdate(); | ||||
|                 sceneObject.ScheduleGroupForFullUpdate(new List<SceneObjectPartProperties>() { SceneObjectPartProperties.None });  | ||||
| 
 | ||||
|             return true; | ||||
|         } | ||||
| 
 | ||||
|  | @ -1948,6 +1954,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|          | ||||
|         //Return false if the entity with the UUID is not a SceneObjectGroup,  | ||||
|         //otherwise, return true. | ||||
|         /* | ||||
|         protected internal bool AddOrUpdateObjectInScene(SceneObjectGroup updatedSog, bool debugWithViewer) | ||||
|         { | ||||
|             UUID sogID = updatedSog.UUID; | ||||
|  | @ -1989,6 +1996,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             } | ||||
| 
 | ||||
|         } | ||||
|          * */  | ||||
| 
 | ||||
|         #endregion // REGION SYNC | ||||
| 
 | ||||
|  |  | |||
|  | @ -5528,8 +5528,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
|             //SceneObjectPart localPart = this; | ||||
|             PhysicsActor pa = localPart.PhysActor; | ||||
| 
 | ||||
|             m_log.Debug("Received Physics Bucket updates for " + localPart.Name + ". GroupPosition: " + data["GroupPosition"].AsVector3().ToString() | ||||
|                 + ", Position = " + data["Position"].AsVector3().ToString()); | ||||
|             //m_log.Debug("Received Physics Bucket updates for " + localPart.Name + ". GroupPosition: " + data["GroupPosition"].AsVector3().ToString() | ||||
|             //    + ", Position = " + data["Position"].AsVector3().ToString()); | ||||
| 
 | ||||
|             //m_log.DebugFormat("{0}: PhysicsBucketUpdateProcessor. pos={1}", "[SCENE OBJECT PART]", data["Position"].AsVector3().ToString()); | ||||
| 
 | ||||
|  | @ -5779,7 +5779,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
|                 //Second, if need to update local properties, call each bucket's update process | ||||
|                 if (m_bucketUpdateProcessors.ContainsKey(bucketName)) | ||||
|                 { | ||||
|                     m_log.Debug("Update properties in " + bucketName + " buckets"); | ||||
|                     //m_log.Debug("Update properties in " + bucketName + " buckets"); | ||||
| 
 | ||||
|                     m_bucketUpdateProcessors[bucketName](updatedPart, bucketName); | ||||
|                     partUpdateResult = Scene.ObjectUpdateResult.Updated; | ||||
|  |  | |||
|  | @ -3567,14 +3567,12 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
|                 item = m_host.TaskInventory[invItemID]; | ||||
|             } | ||||
| 
 | ||||
|             /* | ||||
|             if ((item.PermsMask & ScriptBaseClass.PERMISSION_CHANGE_LINKS) == 0 | ||||
|                 && !m_automaticLinkPermission) | ||||
|             { | ||||
|                 ShoutError("Script trying to link but PERMISSION_CHANGE_LINKS permission not set!"); | ||||
|                 return; | ||||
|             } | ||||
|             */ | ||||
| 
 | ||||
|             IClientAPI client = null; | ||||
|             ScenePresence sp = World.GetScenePresence(item.PermsGranter); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Huaiyu (Kitty) Liu
						Huaiyu (Kitty) Liu