mirror of
https://github.com/opensim/opensim.git
synced 2026-08-12 20:55:43 +08:00
Merge branch 'master' into careminster
Conflicts: OpenSim/Framework/Monitoring/BaseStatsCollector.cs OpenSim/Region/Application/OpenSim.cs OpenSim/Region/Application/OpenSimBase.cs OpenSim/Region/Framework/Scenes/SceneManager.cs bin/OpenMetaverse.Rendering.Meshmerizer.dll bin/OpenMetaverse.StructuredData.dll bin/OpenMetaverse.dll bin/OpenMetaverseTypes.dll prebuild.xml
This commit is contained in:
@@ -47,6 +47,48 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
public event RestartSim OnRestartSim;
|
||||
|
||||
/// <summary>
|
||||
/// Fired when either all regions are ready for use or at least one region has become unready for use where
|
||||
/// previously all regions were ready.
|
||||
/// </summary>
|
||||
public event Action<SceneManager> OnRegionsReadyStatusChange;
|
||||
|
||||
/// <summary>
|
||||
/// Are all regions ready for use?
|
||||
/// </summary>
|
||||
public bool AllRegionsReady
|
||||
{
|
||||
get
|
||||
{
|
||||
return m_allRegionsReady;
|
||||
}
|
||||
|
||||
private set
|
||||
{
|
||||
if (m_allRegionsReady != value)
|
||||
{
|
||||
m_allRegionsReady = value;
|
||||
Action<SceneManager> handler = OnRegionsReadyStatusChange;
|
||||
if (handler != null)
|
||||
{
|
||||
foreach (Action<SceneManager> d in handler.GetInvocationList())
|
||||
{
|
||||
try
|
||||
{
|
||||
d(this);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
m_log.ErrorFormat("[SCENE MANAGER]: Delegate for OnRegionsReadyStatusChange failed - continuing {0} - {1}",
|
||||
e.Message, e.StackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private bool m_allRegionsReady;
|
||||
|
||||
private static SceneManager m_instance = null;
|
||||
public static SceneManager Instance
|
||||
{
|
||||
@@ -128,9 +170,11 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
public void Add(Scene scene)
|
||||
{
|
||||
scene.OnRestart += HandleRestart;
|
||||
lock (m_localScenes)
|
||||
m_localScenes.Add(scene.RegionInfo.RegionID, scene.RegionInfo.RegionName, scene);
|
||||
|
||||
m_localScenes.Add(scene.RegionInfo.RegionID, scene.RegionInfo.RegionName, scene);
|
||||
scene.OnRestart += HandleRestart;
|
||||
scene.EventManager.OnRegionReadyStatusChange += HandleRegionReadyStatusChange;
|
||||
}
|
||||
|
||||
public void HandleRestart(RegionInfo rdata)
|
||||
@@ -138,12 +182,19 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
m_log.Error("[SCENEMANAGER]: Got Restart message for region:" + rdata.RegionName + " Sending up to main");
|
||||
int RegionSceneElement = -1;
|
||||
|
||||
m_localScenes.Remove(rdata.RegionID);
|
||||
lock (m_localScenes)
|
||||
m_localScenes.Remove(rdata.RegionID);
|
||||
|
||||
// Send signal to main that we're restarting this sim.
|
||||
OnRestartSim(rdata);
|
||||
}
|
||||
|
||||
private void HandleRegionReadyStatusChange(IScene scene)
|
||||
{
|
||||
lock (m_localScenes)
|
||||
AllRegionsReady = m_localScenes.TrueForAll(s => s.Ready);
|
||||
}
|
||||
|
||||
public void SendSimOnlineNotification(ulong regionHandle)
|
||||
{
|
||||
RegionInfo Result = null;
|
||||
@@ -483,7 +534,8 @@ namespace OpenSim.Region.Framework.Scenes
|
||||
|
||||
public void CloseScene(Scene scene)
|
||||
{
|
||||
m_localScenes.Remove(scene.RegionInfo.RegionID);
|
||||
lock (m_localScenes)
|
||||
m_localScenes.Remove(scene.RegionInfo.RegionID);
|
||||
|
||||
scene.Close();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user