diff options
author | Justin Clark-Casey (justincc) | 2012-07-25 21:00:59 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2012-07-25 21:00:59 +0100 |
commit | 31304c222df1e5a832afd0ebcf7d3ed403543e54 (patch) | |
tree | d139e3f34534caa4f31c58503b88bd02a3385d45 /OpenSim/Region/Framework/Scenes/SceneManager.cs | |
parent | Rename "image queues clear" console command to "clear image queues" (diff) | |
download | opensim-SC_OLD-31304c222df1e5a832afd0ebcf7d3ed403543e54.zip opensim-SC_OLD-31304c222df1e5a832afd0ebcf7d3ed403543e54.tar.gz opensim-SC_OLD-31304c222df1e5a832afd0ebcf7d3ed403543e54.tar.bz2 opensim-SC_OLD-31304c222df1e5a832afd0ebcf7d3ed403543e54.tar.xz |
Make SceneManager.OnRegionsReadyStatusChange event available.
This is fired when all regions are ready or when at least one region becomes not ready.
Recently added EventManager.OnRegionReady becomes OnRegionReadyStatusChange to match OnLoginsEnabledStatusChange
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/SceneManager.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneManager.cs | 53 |
1 files changed, 51 insertions, 2 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneManager.cs b/OpenSim/Region/Framework/Scenes/SceneManager.cs index d73a959..c81b55d 100644 --- a/OpenSim/Region/Framework/Scenes/SceneManager.cs +++ b/OpenSim/Region/Framework/Scenes/SceneManager.cs | |||
@@ -47,6 +47,48 @@ namespace OpenSim.Region.Framework.Scenes | |||
47 | 47 | ||
48 | public event RestartSim OnRestartSim; | 48 | public event RestartSim OnRestartSim; |
49 | 49 | ||
50 | /// <summary> | ||
51 | /// Fired when either all regions are ready for use or at least one region has become unready for use where | ||
52 | /// previously all regions were ready. | ||
53 | /// </summary> | ||
54 | public event Action<SceneManager> OnRegionsReadyStatusChange; | ||
55 | |||
56 | /// <summary> | ||
57 | /// Are all regions ready for use? | ||
58 | /// </summary> | ||
59 | public bool AllRegionsReady | ||
60 | { | ||
61 | get | ||
62 | { | ||
63 | return m_allRegionsReady; | ||
64 | } | ||
65 | |||
66 | private set | ||
67 | { | ||
68 | if (m_allRegionsReady != value) | ||
69 | { | ||
70 | m_allRegionsReady = value; | ||
71 | Action<SceneManager> handler = OnRegionsReadyStatusChange; | ||
72 | if (handler != null) | ||
73 | { | ||
74 | foreach (Action<SceneManager> d in handler.GetInvocationList()) | ||
75 | { | ||
76 | try | ||
77 | { | ||
78 | d(this); | ||
79 | } | ||
80 | catch (Exception e) | ||
81 | { | ||
82 | m_log.ErrorFormat("[SCENE MANAGER]: Delegate for OnRegionsReadyStatusChange failed - continuing {0} - {1}", | ||
83 | e.Message, e.StackTrace); | ||
84 | } | ||
85 | } | ||
86 | } | ||
87 | } | ||
88 | } | ||
89 | } | ||
90 | private bool m_allRegionsReady; | ||
91 | |||
50 | private static SceneManager m_instance = null; | 92 | private static SceneManager m_instance = null; |
51 | public static SceneManager Instance | 93 | public static SceneManager Instance |
52 | { | 94 | { |
@@ -141,10 +183,11 @@ namespace OpenSim.Region.Framework.Scenes | |||
141 | 183 | ||
142 | public void Add(Scene scene) | 184 | public void Add(Scene scene) |
143 | { | 185 | { |
144 | scene.OnRestart += HandleRestart; | ||
145 | |||
146 | lock (m_localScenes) | 186 | lock (m_localScenes) |
147 | m_localScenes.Add(scene); | 187 | m_localScenes.Add(scene); |
188 | |||
189 | scene.OnRestart += HandleRestart; | ||
190 | scene.EventManager.OnRegionReadyStatusChange += HandleRegionReadyStatusChange; | ||
148 | } | 191 | } |
149 | 192 | ||
150 | public void HandleRestart(RegionInfo rdata) | 193 | public void HandleRestart(RegionInfo rdata) |
@@ -175,6 +218,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
175 | OnRestartSim(rdata); | 218 | OnRestartSim(rdata); |
176 | } | 219 | } |
177 | 220 | ||
221 | private void HandleRegionReadyStatusChange(IScene scene) | ||
222 | { | ||
223 | lock (m_localScenes) | ||
224 | AllRegionsReady = m_localScenes.TrueForAll(s => s.Ready); | ||
225 | } | ||
226 | |||
178 | public void SendSimOnlineNotification(ulong regionHandle) | 227 | public void SendSimOnlineNotification(ulong regionHandle) |
179 | { | 228 | { |
180 | RegionInfo Result = null; | 229 | RegionInfo Result = null; |