Merge branch 'dev' into physics
Conflicts: OpenSim/Region/CoreModules/RegionSync/RegionSyncModule/RegionSyncServerModule.csdsg
						commit
						7441fbfa3a
					
				|  | @ -47,6 +47,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|         Dictionary<UUID, RegionSyncAvatar> m_remoteAvatars = new Dictionary<UUID, RegionSyncAvatar>(); |         Dictionary<UUID, RegionSyncAvatar> m_remoteAvatars = new Dictionary<UUID, RegionSyncAvatar>(); | ||||||
|         Dictionary<UUID, IClientAPI> m_localAvatars = new Dictionary<UUID, IClientAPI>(); |         Dictionary<UUID, IClientAPI> m_localAvatars = new Dictionary<UUID, IClientAPI>(); | ||||||
| 
 | 
 | ||||||
|  |         private bool m_symSync = false; | ||||||
|  | 
 | ||||||
|         private Dictionary<UUID, RegionSyncAvatar> RemoteAvatars |         private Dictionary<UUID, RegionSyncAvatar> RemoteAvatars | ||||||
|         { |         { | ||||||
|             get { return m_remoteAvatars; } |             get { return m_remoteAvatars; } | ||||||
|  | @ -276,6 +278,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.AvatarAppearance, OSDParser.SerializeJsonString(data))); |             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.AvatarAppearance, OSDParser.SerializeJsonString(data))); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         public void SetSymSync(bool symSync) | ||||||
|  |         { | ||||||
|  |             m_symSync = symSync; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         // Handle an incoming message |         // Handle an incoming message | ||||||
|         // TODO: This should not be synchronous with the receive! |         // TODO: This should not be synchronous with the receive! | ||||||
|         // Instead, handle messages from an incoming Queue so server doesn't block sending |         // Instead, handle messages from an incoming Queue so server doesn't block sending | ||||||
|  | @ -289,16 +296,21 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|                         RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Syncing to region \"{0}\"", m_regionName)); |                         RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Syncing to region \"{0}\"", m_regionName)); | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|  |                 //SYMMETRIC SYNC: do not handle terrian and object updates | ||||||
|                 case RegionSyncMessage.MsgType.Terrain: |                 case RegionSyncMessage.MsgType.Terrain: | ||||||
|                     { |                     { | ||||||
|  |                         if(!m_symSync) | ||||||
|  |                         { | ||||||
|                         m_scene.Heightmap.LoadFromXmlString(Encoding.ASCII.GetString(msg.Data, 0, msg.Length)); |                         m_scene.Heightmap.LoadFromXmlString(Encoding.ASCII.GetString(msg.Data, 0, msg.Length)); | ||||||
|                         m_scene.PhysicsScene.SetTerrain(m_scene.Heightmap.GetFloatsSerialised()); |                         m_scene.PhysicsScene.SetTerrain(m_scene.Heightmap.GetFloatsSerialised()); | ||||||
|                         RegionSyncMessage.HandleSuccess(LogHeader(), msg, "Synchronized terrain"); |                         RegionSyncMessage.HandleSuccess(LogHeader(), msg, "Synchronized terrain"); | ||||||
|  |                         } | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|                 case RegionSyncMessage.MsgType.NewObject: |                 case RegionSyncMessage.MsgType.NewObject: | ||||||
|                 case RegionSyncMessage.MsgType.UpdatedObject: |                 case RegionSyncMessage.MsgType.UpdatedObject: | ||||||
|                     { |                     { | ||||||
|  |                         if(!m_symSync){ | ||||||
|                         SceneObjectGroup sog = SceneObjectSerializer.FromXml2Format(Encoding.ASCII.GetString(msg.Data, 0, msg.Length)); |                         SceneObjectGroup sog = SceneObjectSerializer.FromXml2Format(Encoding.ASCII.GetString(msg.Data, 0, msg.Length)); | ||||||
|                         if (sog.IsDeleted) |                         if (sog.IsDeleted) | ||||||
|                         { |                         { | ||||||
|  | @ -306,23 +318,18 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|                             return; |                             return; | ||||||
|                         } |                         } | ||||||
| 
 | 
 | ||||||
|                         /* |  | ||||||
|                         m_log.DebugFormat("{0} NewObject '{1}'", LogHeader(), sog.Name); |  | ||||||
|                         sog.ForEachPart(delegate(SceneObjectPart part) |  | ||||||
|                         { |  | ||||||
|                             m_log.DebugFormat("{0}     Part {1}, lf={2} f={3}", LogHeader(), part.Name,  |  | ||||||
|                                         part.LocalFlags.ToString(), part.Flags.ToString()); |  | ||||||
|                         }); |  | ||||||
|                          */ |  | ||||||
|                         if (m_scene.AddNewSceneObject(sog, true)); |                         if (m_scene.AddNewSceneObject(sog, true)); | ||||||
|                             //RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Object \"{0}\" ({1}) ({1}) updated.", sog.Name, sog.UUID.ToString(), sog.LocalId.ToString())); |                             //RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Object \"{0}\" ({1}) ({1}) updated.", sog.Name, sog.UUID.ToString(), sog.LocalId.ToString())); | ||||||
|                         //else |                         //else | ||||||
|                         //RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Object \"{0}\" ({1}) ({1}) added.", sog.Name, sog.UUID.ToString(), sog.LocalId.ToString())); |                         //RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("Object \"{0}\" ({1}) ({1}) added.", sog.Name, sog.UUID.ToString(), sog.LocalId.ToString())); | ||||||
|                         sog.ScheduleGroupForFullUpdate(); |                         sog.ScheduleGroupForFullUpdate(); | ||||||
|  |                         } | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|                 case RegionSyncMessage.MsgType.RemovedObject: |                 case RegionSyncMessage.MsgType.RemovedObject: | ||||||
|                     { |                     { | ||||||
|  |                         if(!m_symSync) | ||||||
|  |                         { | ||||||
|                         // Get the data from message and error check |                         // Get the data from message and error check | ||||||
|                         OSDMap data = DeserializeMessage(msg); |                         OSDMap data = DeserializeMessage(msg); | ||||||
|                         if (data == null) |                         if (data == null) | ||||||
|  | @ -346,8 +353,10 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|                         // Delete the object from the scene |                         // Delete the object from the scene | ||||||
|                         m_scene.DeleteSceneObject(sog, false); |                         m_scene.DeleteSceneObject(sog, false); | ||||||
|                         RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("localID {0} deleted.", localID.ToString())); |                         RegionSyncMessage.HandleSuccess(LogHeader(), msg, String.Format("localID {0} deleted.", localID.ToString())); | ||||||
|  |                         } | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|  |                     //end of SYMMETRIC SYNC | ||||||
|                 case RegionSyncMessage.MsgType.NewAvatar: |                 case RegionSyncMessage.MsgType.NewAvatar: | ||||||
|                     { |                     { | ||||||
|                         // Get the data from message and error check |                         // Get the data from message and error check | ||||||
|  | @ -823,8 +832,13 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
| 
 | 
 | ||||||
|             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.RegionName, m_scene.RegionInfo.RegionName)); |             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.RegionName, m_scene.RegionInfo.RegionName)); | ||||||
|             m_log.WarnFormat("Sending region name: \"{0}\"", m_scene.RegionInfo.RegionName); |             m_log.WarnFormat("Sending region name: \"{0}\"", m_scene.RegionInfo.RegionName); | ||||||
|             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetTerrain)); |             //SYMMETRIC SYNC: commenting out terrian and object updates | ||||||
|             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetObjects)); |             if (!m_symSync) | ||||||
|  |             { | ||||||
|  |                 Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetTerrain)); | ||||||
|  |                 Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetObjects)); | ||||||
|  |             } | ||||||
|  |             //end of SYMMETRIC SYNC | ||||||
|             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetAvatars)); |             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.GetAvatars)); | ||||||
| 
 | 
 | ||||||
|             // Register for events which will be forwarded to authoritative scene |             // Register for events which will be forwarded to authoritative scene | ||||||
|  |  | ||||||
|  | @ -75,6 +75,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|                 m_serverport = syncConfig.GetInt(scene.RegionInfo.RegionName+"_ServerPort", serverPortDefault); |                 m_serverport = syncConfig.GetInt(scene.RegionInfo.RegionName+"_ServerPort", serverPortDefault); | ||||||
|                 m_scene.RegisterModuleInterface<IRegionSyncClientModule>(this); |                 m_scene.RegisterModuleInterface<IRegionSyncClientModule>(this); | ||||||
| 
 | 
 | ||||||
|  |                 m_symsync = syncConfig.GetBoolean("SymSync", false); | ||||||
|  | 
 | ||||||
|                 // Setup the command line interface |                 // Setup the command line interface | ||||||
|                 m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; |                 m_scene.EventManager.OnPluginConsole += EventManager_OnPluginConsole; | ||||||
|                 InstallInterfaces(); |                 InstallInterfaces(); | ||||||
|  | @ -156,6 +158,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|         private Object m_client_lock = new Object(); |         private Object m_client_lock = new Object(); | ||||||
|         private RegionSyncClient m_client = null; |         private RegionSyncClient m_client = null; | ||||||
| 
 | 
 | ||||||
|  |         private bool m_symsync = false; | ||||||
| 
 | 
 | ||||||
|         #endregion |         #endregion | ||||||
| 
 | 
 | ||||||
|  | @ -239,6 +242,7 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|                 m_log.Warn("[REGION SYNC CLIENT MODULE] Starting RegionSyncClient"); |                 m_log.Warn("[REGION SYNC CLIENT MODULE] Starting RegionSyncClient"); | ||||||
| 
 | 
 | ||||||
|                 m_client = new RegionSyncClient(m_scene, m_serveraddr, m_serverport); |                 m_client = new RegionSyncClient(m_scene, m_serveraddr, m_serverport); | ||||||
|  |                 m_client.SetSymSync(m_symsync); | ||||||
|                 m_client.Start(); |                 m_client.Start(); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | @ -302,26 +302,34 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|                         RegionSyncMessage.HandleSuccess(LogHeader, msg, String.Format("Syncing to region \"{0}\"", m_regionName)); |                         RegionSyncMessage.HandleSuccess(LogHeader, msg, String.Format("Syncing to region \"{0}\"", m_regionName)); | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|  |                 //SYMMETRIC SYNC: do not handle terrian and object updates | ||||||
|                 case RegionSyncMessage.MsgType.GetTerrain: |                 case RegionSyncMessage.MsgType.GetTerrain: | ||||||
|                     { |                     { | ||||||
|                         Send(new RegionSyncMessage(RegionSyncMessage.MsgType.Terrain, m_scene.Heightmap.SaveToXmlString())); |                         if (!m_scene.RegionSyncServerModule.IsSymSync) | ||||||
|                         RegionSyncMessage.HandleSuccess(LogHeader, msg, "Terrain sent"); |                         { | ||||||
|  |                             Send(new RegionSyncMessage(RegionSyncMessage.MsgType.Terrain, m_scene.Heightmap.SaveToXmlString())); | ||||||
|  |                             RegionSyncMessage.HandleSuccess(LogHeader, msg, "Terrain sent"); | ||||||
|  |                         } | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|                 case RegionSyncMessage.MsgType.GetObjects: |                 case RegionSyncMessage.MsgType.GetObjects: | ||||||
|                     { |                     { | ||||||
|                         EntityBase[] entities = m_scene.GetEntities(); |                         if (!m_scene.RegionSyncServerModule.IsSymSync) | ||||||
|                         foreach(EntityBase e in entities) |  | ||||||
|                         { |                         { | ||||||
|                             if (e is SceneObjectGroup) |                             EntityBase[] entities = m_scene.GetEntities(); | ||||||
|  |                             foreach (EntityBase e in entities) | ||||||
|                             { |                             { | ||||||
|                                 string sogxml = SceneObjectSerializer.ToXml2Format((SceneObjectGroup)e); |                                 if (e is SceneObjectGroup) | ||||||
|                                 Send(new RegionSyncMessage(RegionSyncMessage.MsgType.NewObject, sogxml)); |                                 { | ||||||
|  |                                     string sogxml = SceneObjectSerializer.ToXml2Format((SceneObjectGroup)e); | ||||||
|  |                                     Send(new RegionSyncMessage(RegionSyncMessage.MsgType.NewObject, sogxml)); | ||||||
|  |                                 } | ||||||
|                             } |                             } | ||||||
|  |                             RegionSyncMessage.HandleSuccess(LogHeader, msg, "Sent all scene objects"); | ||||||
|                         } |                         } | ||||||
|                         RegionSyncMessage.HandleSuccess(LogHeader, msg, "Sent all scene objects"); |  | ||||||
|                         return; |                         return; | ||||||
|                     } |                     } | ||||||
|  |                 //end of SYMMETRIC SYNC | ||||||
|                 case RegionSyncMessage.MsgType.GetAvatars: |                 case RegionSyncMessage.MsgType.GetAvatars: | ||||||
|                     { |                     { | ||||||
|                         m_scene.ForEachScenePresence(delegate(ScenePresence presence) |                         m_scene.ForEachScenePresence(delegate(ScenePresence presence) | ||||||
|  |  | ||||||
|  | @ -49,6 +49,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|     { |     { | ||||||
|         private static int DefaultPort = 13000; |         private static int DefaultPort = 13000; | ||||||
|         public static string ActorID = "XX"; |         public static string ActorID = "XX"; | ||||||
|  |         private static int PortUnknown = -1; | ||||||
|  |         private static string IPAddrUnknown = ""; | ||||||
| 
 | 
 | ||||||
|         #region IRegionModule Members |         #region IRegionModule Members | ||||||
|         public void Initialise(Scene scene, IConfigSource config) |         public void Initialise(Scene scene, IConfigSource config) | ||||||
|  | @ -100,18 +102,18 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
| 
 | 
 | ||||||
|             //Get sync server info for Client Manager actors  |             //Get sync server info for Client Manager actors  | ||||||
|             string serverAddr = scene.RegionInfo.RegionName + "_ServerIPAddress"; |             string serverAddr = scene.RegionInfo.RegionName + "_ServerIPAddress"; | ||||||
|             m_serveraddr = syncConfig.GetString(serverAddr, "127.0.0.1"); |             m_serveraddr = syncConfig.GetString(serverAddr, IPAddrUnknown); | ||||||
|             string serverPort = scene.RegionInfo.RegionName + "_ServerPort"; |             string serverPort = scene.RegionInfo.RegionName + "_ServerPort"; | ||||||
|             m_serverport = syncConfig.GetInt(serverPort, DefaultPort); |             m_serverport = syncConfig.GetInt(serverPort, PortUnknown); | ||||||
|             // Client manager load balancing |             // Client manager load balancing | ||||||
|             m_maxClientsPerManager = syncConfig.GetInt("MaxClientsPerManager", 100); |             m_maxClientsPerManager = syncConfig.GetInt("MaxClientsPerManager", 100); | ||||||
|             DefaultPort++; |             DefaultPort++; | ||||||
| 
 | 
 | ||||||
|             //Get sync server info for Script Engine actors  |             //Get sync server info for Script Engine actors  | ||||||
|             string seServerAddr = scene.RegionInfo.RegionName + "_SceneToSESyncServerIP"; |             string seServerAddr = scene.RegionInfo.RegionName + "_SceneToSESyncServerIP"; | ||||||
|             m_seSyncServeraddr = syncConfig.GetString(seServerAddr, "127.0.0.1"); |             m_seSyncServeraddr = syncConfig.GetString(seServerAddr, IPAddrUnknown); | ||||||
|             string seServerPort = scene.RegionInfo.RegionName + "_SceneToSESyncServerPort"; |             string seServerPort = scene.RegionInfo.RegionName + "_SceneToSESyncServerPort"; | ||||||
|             m_seSyncServerport = syncConfig.GetInt(seServerPort, DefaultPort); |             m_seSyncServerport = syncConfig.GetInt(seServerPort, PortUnknown); | ||||||
|             DefaultPort++; |             DefaultPort++; | ||||||
| 
 | 
 | ||||||
|             //Get sync server info for Physics Engine actors  |             //Get sync server info for Physics Engine actors  | ||||||
|  | @ -121,6 +123,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|             m_peSyncServerport = syncConfig.GetInt(peServerPort, DefaultPort); |             m_peSyncServerport = syncConfig.GetInt(peServerPort, DefaultPort); | ||||||
|             DefaultPort++; |             DefaultPort++; | ||||||
|              |              | ||||||
|  |             m_symsync = syncConfig.GetBoolean("SymSync", false); | ||||||
|  | 
 | ||||||
|             //Get quark information |             //Get quark information | ||||||
|             QuarkInfo.SizeX = syncConfig.GetInt("QuarkSizeX", (int)Constants.RegionSize); |             QuarkInfo.SizeX = syncConfig.GetInt("QuarkSizeX", (int)Constants.RegionSize); | ||||||
|             QuarkInfo.SizeY = syncConfig.GetInt("QuarkSizeY", (int)Constants.RegionSize); |             QuarkInfo.SizeY = syncConfig.GetInt("QuarkSizeY", (int)Constants.RegionSize); | ||||||
|  | @ -149,28 +153,42 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|             m_scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient); |             m_scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient); | ||||||
|             //m_scene.EventManager.OnNewPresence += new EventManager.OnNewPresenceDelegate(EventManager_OnNewPresence); |             //m_scene.EventManager.OnNewPresence += new EventManager.OnNewPresenceDelegate(EventManager_OnNewPresence); | ||||||
|             m_scene.EventManager.OnRemovePresence += new EventManager.OnRemovePresenceDelegate(EventManager_OnRemovePresence); |             m_scene.EventManager.OnRemovePresence += new EventManager.OnRemovePresenceDelegate(EventManager_OnRemovePresence); | ||||||
|             m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(SceneGraph_OnObjectCreate); |  | ||||||
|             m_scene.SceneGraph.OnObjectDuplicate += new ObjectDuplicateDelegate(SceneGraph_OnObjectDuplicate); |  | ||||||
|             //m_scene.SceneGraph.OnObjectRemove += new ObjectDeleteDelegate(SceneGraph_OnObjectRemove); |  | ||||||
|             //m_scene.StatsReporter.OnSendStatsResult += new SimStatsReporter.SendStatResult(StatsReporter_OnSendStatsResult); |  | ||||||
|             m_scene.EventManager.OnOarFileLoaded += new EventManager.OarFileLoaded(EventManager_OnOarFileLoaded); |  | ||||||
|              |              | ||||||
|             m_log.Warn("[REGION SYNC SERVER MODULE] Starting RegionSyncServer"); |             //SYMMETRIC SYNC: do not handle object updates | ||||||
|  |             if (!m_symsync) | ||||||
|  |             { | ||||||
|  |                 m_scene.SceneGraph.OnObjectCreate += new ObjectCreateDelegate(SceneGraph_OnObjectCreate); | ||||||
|  |                 m_scene.SceneGraph.OnObjectDuplicate += new ObjectDuplicateDelegate(SceneGraph_OnObjectDuplicate); | ||||||
|  |                 //m_scene.SceneGraph.OnObjectRemove += new ObjectDeleteDelegate(SceneGraph_OnObjectRemove); | ||||||
|  |                 //m_scene.StatsReporter.OnSendStatsResult += new SimStatsReporter.SendStatResult(StatsReporter_OnSendStatsResult); | ||||||
|  |                 m_scene.EventManager.OnOarFileLoaded += new EventManager.OarFileLoaded(EventManager_OnOarFileLoaded); | ||||||
|  |             } | ||||||
|  |             //end of SYMMETRIC SYNC | ||||||
|             // Start the server and listen for RegionSyncClients |             // Start the server and listen for RegionSyncClients | ||||||
|             m_server = new RegionSyncServer(m_scene, m_serveraddr, m_serverport, m_maxClientsPerManager); |             if (!m_serveraddr.Equals(IPAddrUnknown) && m_serverport != PortUnknown) | ||||||
|             m_server.Start(); |             { | ||||||
|             m_statsTimer.Elapsed += new System.Timers.ElapsedEventHandler(StatsTimerElapsed); |                 m_log.Warn("[REGION SYNC SERVER MODULE] Starting RegionSyncServer"); | ||||||
|             m_statsTimer.Start(); |                 m_server = new RegionSyncServer(m_scene, m_serveraddr, m_serverport, m_maxClientsPerManager); | ||||||
|  |                 m_server.Start(); | ||||||
|  |                 m_statsTimer.Elapsed += new System.Timers.ElapsedEventHandler(StatsTimerElapsed); | ||||||
|  |                 m_statsTimer.Start(); | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
|             m_log.Warn("[REGION SYNC SERVER MODULE] Starting SceneToScriptEngineSyncServer"); |             if (!m_seSyncServeraddr.Equals(IPAddrUnknown) && m_seSyncServerport != PortUnknown) | ||||||
|             //Start the sync server for script engines |             { | ||||||
|             m_sceneToSESyncServer = new SceneToScriptEngineSyncServer(m_scene, m_seSyncServeraddr, m_seSyncServerport); |                 m_log.Warn("[REGION SYNC SERVER MODULE] Starting SceneToScriptEngineSyncServer"); | ||||||
|             m_sceneToSESyncServer.Start(); |                 //Start the sync server for script engines | ||||||
|  |                 m_sceneToSESyncServer = new SceneToScriptEngineSyncServer(m_scene, m_seSyncServeraddr, m_seSyncServerport); | ||||||
|  |                 m_sceneToSESyncServer.Start(); | ||||||
|  |             } | ||||||
| 
 | 
 | ||||||
|             m_log.Warn("[REGION SYNC SERVER MODULE] Starting SceneToPhysEngineSyncServer"); |             if (!m_peSyncServeraddr.Equals(IPAddrUnknown) && m_peSyncServerport != PortUnknown) | ||||||
|             //Start the sync server for physics engines |             { | ||||||
|             m_sceneToPESyncServer = new SceneToPhysEngineSyncServer(m_scene, m_peSyncServeraddr, m_peSyncServerport); |                 m_log.Warn("[REGION SYNC SERVER MODULE] Starting SceneToPhysEngineSyncServer"); | ||||||
|             m_sceneToPESyncServer.Start(); |                 //Start the sync server for physics engines | ||||||
|  |                 m_sceneToPESyncServer = new SceneToPhysEngineSyncServer(m_scene, m_peSyncServeraddr, m_peSyncServerport); | ||||||
|  |                 m_sceneToPESyncServer.Start(); | ||||||
|  |             } | ||||||
|             //m_log.Warn("[REGION SYNC SERVER MODULE] Post-Initialised"); |             //m_log.Warn("[REGION SYNC SERVER MODULE] Post-Initialised"); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  | @ -275,25 +293,23 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|             { |             { | ||||||
|                 // Sending the message when it's first queued would yield lower latency but much higher load on the simulator |                 // Sending the message when it's first queued would yield lower latency but much higher load on the simulator | ||||||
|                 // as parts may be updated many many times very quickly. Need to implement a higher resolution send in heartbeat |                 // as parts may be updated many many times very quickly. Need to implement a higher resolution send in heartbeat | ||||||
|                 foreach (SceneObjectGroup sog in primUpdates) | 
 | ||||||
|  |                 //SYMMETRIC SYNC: do not handle object updates | ||||||
|  |                 if (!m_symsync) | ||||||
|                 { |                 { | ||||||
|                     if (!sog.IsDeleted) |                     foreach (SceneObjectGroup sog in primUpdates) | ||||||
|                     { |                     { | ||||||
|                         /* |                         if (!sog.IsDeleted) | ||||||
|                         string sogxml = SceneObjectSerializer.ToXml2Format(sog); |                         { | ||||||
| 
 |                             //KittyL: modified to broadcast to different types of actors | ||||||
|                         m_log.Debug("[REGION SYNC SERVER MODULE]: to update object " + sog.UUID + ", localID: "+sog.LocalId |                             if (m_server != null) | ||||||
|                             + ", with color " + sog.RootPart.Shape.Textures.DefaultTexture.RGBA.A  |                                 m_server.BroadcastToCM(RegionSyncMessage.MsgType.UpdatedObject, sog); | ||||||
|                             + "," + sog.RootPart.Shape.Textures.DefaultTexture.RGBA.B + "," + sog.RootPart.Shape.Textures.DefaultTexture.RGBA.G  |                             if (m_sceneToSESyncServer != null) | ||||||
|                             + "," + sog.RootPart.Shape.Textures.DefaultTexture.RGBA.R); |                                 m_sceneToSESyncServer.SendToSE(RegionSyncMessage.MsgType.UpdatedObject, sog); | ||||||
| 
 |                         } | ||||||
|                         m_server.Broadcast(new RegionSyncMessage(RegionSyncMessage.MsgType.UpdatedObject, sogxml)); |  | ||||||
|                          * */ |  | ||||||
|                         //KittyL: modified to broadcast to different types of actors |  | ||||||
|                         m_server.BroadcastToCM(RegionSyncMessage.MsgType.UpdatedObject, sog); |  | ||||||
|                         m_sceneToSESyncServer.SendToSE(RegionSyncMessage.MsgType.UpdatedObject, sog); |  | ||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|  |                 //end of SYMMETRIC SYNC | ||||||
|                 foreach (ScenePresence presence in presenceUpdates) |                 foreach (ScenePresence presence in presenceUpdates) | ||||||
|                 { |                 { | ||||||
|                     try |                     try | ||||||
|  | @ -379,7 +395,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|             data["localID"] = OSD.FromUInteger(localID); |             data["localID"] = OSD.FromUInteger(localID); | ||||||
|             RegionSyncMessage rsm = new RegionSyncMessage(RegionSyncMessage.MsgType.RemovedObject, OSDParser.SerializeJsonString(data)); |             RegionSyncMessage rsm = new RegionSyncMessage(RegionSyncMessage.MsgType.RemovedObject, OSDParser.SerializeJsonString(data)); | ||||||
|             //m_server.BroadcastToCM(rsm); |             //m_server.BroadcastToCM(rsm); | ||||||
|             m_server.Broadcast(rsm); |             if(m_server!=null) | ||||||
|  |                 m_server.Broadcast(rsm); | ||||||
| 
 | 
 | ||||||
|             //KittyL: Second, tell script engine to remove the object, identified by UUID |             //KittyL: Second, tell script engine to remove the object, identified by UUID | ||||||
|             //UUID objID = m_scene.GetSceneObjectPart(localID).ParentGroup.UUID; |             //UUID objID = m_scene.GetSceneObjectPart(localID).ParentGroup.UUID; | ||||||
|  | @ -394,7 +411,8 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|                 //when an object is deleted, this function (DeleteObject) could be triggered more than once. So we check  |                 //when an object is deleted, this function (DeleteObject) could be triggered more than once. So we check  | ||||||
|                 //if the object part is already removed is the scene (part==null) |                 //if the object part is already removed is the scene (part==null) | ||||||
|                 m_log.Debug("Inform script engine about the deleted object"); |                 m_log.Debug("Inform script engine about the deleted object"); | ||||||
|                 m_sceneToSESyncServer.SendToSE(rsm, part.ParentGroup); |                 if(m_sceneToSESyncServer!=null) | ||||||
|  |                     m_sceneToSESyncServer.SendToSE(rsm, part.ParentGroup); | ||||||
|             } |             } | ||||||
|              |              | ||||||
|         } |         } | ||||||
|  | @ -419,9 +437,11 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|         public void SendLoadWorldMap(ITerrainChannel heightMap) |         public void SendLoadWorldMap(ITerrainChannel heightMap) | ||||||
|         { |         { | ||||||
|             RegionSyncMessage msg = new RegionSyncMessage(RegionSyncMessage.MsgType.Terrain, m_scene.Heightmap.SaveToXmlString()); |             RegionSyncMessage msg = new RegionSyncMessage(RegionSyncMessage.MsgType.Terrain, m_scene.Heightmap.SaveToXmlString()); | ||||||
|             m_server.Broadcast(msg); |             if(m_server!=null) | ||||||
|  |                 m_server.Broadcast(msg); | ||||||
|             //KittyL: added for SE |             //KittyL: added for SE | ||||||
|             m_sceneToSESyncServer.SendToAllConnectedSE(msg); |             if(m_sceneToSESyncServer!=null) | ||||||
|  |                 m_sceneToSESyncServer.SendToAllConnectedSE(msg); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         #region cruft |         #region cruft | ||||||
|  | @ -490,6 +510,13 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|         private int m_peSyncServerport; |         private int m_peSyncServerport; | ||||||
|         private SceneToPhysEngineSyncServer m_sceneToPESyncServer = null; |         private SceneToPhysEngineSyncServer m_sceneToPESyncServer = null; | ||||||
|          |          | ||||||
|  |         //a boolean variable to indicate in symmetric sync is configured | ||||||
|  |         private bool m_symsync = false; | ||||||
|  | 
 | ||||||
|  |         public bool IsSymSync | ||||||
|  |         { | ||||||
|  |             get { return IsSymSync; } | ||||||
|  |         } | ||||||
|         //quark related information |         //quark related information | ||||||
|         //private int QuarkInfo.SizeX; |         //private int QuarkInfo.SizeX; | ||||||
|         //private int QuarkInfo.SizeY; |         //private int QuarkInfo.SizeY; | ||||||
|  |  | ||||||
|  | @ -366,6 +366,9 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|         // Synchronization related functions, NOT exposed through IRegionSyncModule interface |         // Synchronization related functions, NOT exposed through IRegionSyncModule interface | ||||||
|         ///////////////////////////////////////////////////////////////////////////////////////// |         ///////////////////////////////////////////////////////////////////////////////////////// | ||||||
| 
 | 
 | ||||||
|  |         private static int PortUnknown = -1; | ||||||
|  |         private static string IPAddrUnknown = ""; | ||||||
|  | 
 | ||||||
|         private ILog m_log; |         private ILog m_log; | ||||||
|         //private bool m_active = true; |         //private bool m_active = true; | ||||||
| 
 | 
 | ||||||
|  | @ -482,8 +485,13 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|         private void StartLocalSyncListener() |         private void StartLocalSyncListener() | ||||||
|         { |         { | ||||||
|             RegionSyncListenerInfo localSyncListenerInfo = GetLocalSyncListenerInfo(); |             RegionSyncListenerInfo localSyncListenerInfo = GetLocalSyncListenerInfo(); | ||||||
|             m_localSyncListener = new RegionSyncListener(localSyncListenerInfo, this); | 
 | ||||||
|             m_localSyncListener.Start(); |             if (localSyncListenerInfo!=null) | ||||||
|  |             { | ||||||
|  |                 m_log.Warn(LogHeader + " Starting SyncListener"); | ||||||
|  |                 m_localSyncListener = new RegionSyncListener(localSyncListenerInfo, this); | ||||||
|  |                 m_localSyncListener.Start(); | ||||||
|  |             } | ||||||
|              |              | ||||||
|             //STATS TIMER: TO BE IMPLEMENTED |             //STATS TIMER: TO BE IMPLEMENTED | ||||||
|             //m_statsTimer.Elapsed += new System.Timers.ElapsedEventHandler(StatsTimerElapsed); |             //m_statsTimer.Elapsed += new System.Timers.ElapsedEventHandler(StatsTimerElapsed); | ||||||
|  | @ -494,11 +502,18 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|         //For now, we use configuration to access the information. Might be replaced by some Grid Service later on. |         //For now, we use configuration to access the information. Might be replaced by some Grid Service later on. | ||||||
|         private RegionSyncListenerInfo GetLocalSyncListenerInfo() |         private RegionSyncListenerInfo GetLocalSyncListenerInfo() | ||||||
|         { |         { | ||||||
|             string addr = m_sysConfig.GetString("SyncListenerIPAddress", "127.0.0.1"); |             string addr = m_sysConfig.GetString("SyncListenerIPAddress", IPAddrUnknown); | ||||||
|             int port = m_sysConfig.GetInt("SyncListenerPort", 13000); |             int port = m_sysConfig.GetInt("SyncListenerPort", PortUnknown); | ||||||
|             RegionSyncListenerInfo info = new RegionSyncListenerInfo(addr, port); |  | ||||||
| 
 | 
 | ||||||
|             return info; |             m_log.Warn(LogHeader + ", listener addr: " + addr + ", port: " + port); | ||||||
|  | 
 | ||||||
|  |             if (!addr.Equals(IPAddrUnknown) && port != PortUnknown) | ||||||
|  |             { | ||||||
|  |                 RegionSyncListenerInfo info = new RegionSyncListenerInfo(addr, port); | ||||||
|  |                 return info; | ||||||
|  |             } | ||||||
|  | 
 | ||||||
|  |             return null; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         //Get the information for remote [IP:Port] to connect to for synchronization purpose. |         //Get the information for remote [IP:Port] to connect to for synchronization purpose. | ||||||
|  | @ -510,13 +525,14 @@ namespace OpenSim.Region.CoreModules.RegionSync.RegionSyncModule | ||||||
|         { |         { | ||||||
|             //For now, we assume there is only one remote listener to connect to. Later on,  |             //For now, we assume there is only one remote listener to connect to. Later on,  | ||||||
|             //we may need to modify the code to read in multiple listeners. |             //we may need to modify the code to read in multiple listeners. | ||||||
|             string addr = m_sysConfig.GetString("SyncListenerIPAddress", "127.0.0.1"); |             string addr = m_sysConfig.GetString("SyncListenerIPAddress", IPAddrUnknown); | ||||||
|             int port = m_sysConfig.GetInt("SyncListenerPort", 13000); |             int port = m_sysConfig.GetInt("SyncListenerPort", PortUnknown); | ||||||
|             RegionSyncListenerInfo info = new RegionSyncListenerInfo(addr, port); |             if (!addr.Equals(IPAddrUnknown) && port != PortUnknown) | ||||||
| 
 |             { | ||||||
|             m_remoteSyncListeners = new HashSet<RegionSyncListenerInfo>(); |                 RegionSyncListenerInfo info = new RegionSyncListenerInfo(addr, port); | ||||||
|              |                 m_remoteSyncListeners = new HashSet<RegionSyncListenerInfo>(); | ||||||
|             m_remoteSyncListeners.Add(info); |                 m_remoteSyncListeners.Add(info); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         //Start SyncListener if a listener is supposed to run on this actor; Otherwise, initiate connections to remote listeners. |         //Start SyncListener if a listener is supposed to run on this actor; Otherwise, initiate connections to remote listeners. | ||||||
|  |  | ||||||
|  | @ -38,6 +38,9 @@ namespace OpenSim.Region.Framework.Interfaces | ||||||
| 
 | 
 | ||||||
|         bool Active { get; } |         bool Active { get; } | ||||||
|         bool Synced { get; } |         bool Synced { get; } | ||||||
|  | 
 | ||||||
|  |         bool IsSymSync { get; } //If SymSync is set to true in the config file, then Symmetric Sync is running and object updates should be handled through RegionSyncModule | ||||||
|  | 
 | ||||||
|         void QueuePartForUpdate(SceneObjectPart part); |         void QueuePartForUpdate(SceneObjectPart part); | ||||||
|         void QueuePresenceForTerseUpdate(ScenePresence presence); |         void QueuePresenceForTerseUpdate(ScenePresence presence); | ||||||
|         void SendUpdates(); |         void SendUpdates(); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Robert Adams
						Robert Adams