aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/World/Region/RestartModule.cs62
1 files changed, 60 insertions, 2 deletions
diff --git a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs
index 1c26c38..5a5239a 100644
--- a/OpenSim/Region/CoreModules/World/Region/RestartModule.cs
+++ b/OpenSim/Region/CoreModules/World/Region/RestartModule.cs
@@ -34,12 +34,15 @@ using log4net;
34using Nini.Config; 34using Nini.Config;
35using OpenMetaverse; 35using OpenMetaverse;
36using OpenSim.Framework; 36using OpenSim.Framework;
37using OpenSim.Framework.Console;
37using OpenSim.Region.Framework.Interfaces; 38using OpenSim.Region.Framework.Interfaces;
38using OpenSim.Region.Framework.Scenes; 39using OpenSim.Region.Framework.Scenes;
39using Timer=System.Timers.Timer; 40using Timer=System.Timers.Timer;
41using Mono.Addins;
40 42
41namespace OpenSim.Region.CoreModules.World.Region 43namespace OpenSim.Region.CoreModules.World.Region
42{ 44{
45 [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "RestartModule")]
43 public class RestartModule : INonSharedRegionModule, IRestartModule 46 public class RestartModule : INonSharedRegionModule, IRestartModule
44 { 47 {
45 private static readonly ILog m_log = 48 private static readonly ILog m_log =
@@ -62,6 +65,18 @@ namespace OpenSim.Region.CoreModules.World.Region
62 { 65 {
63 m_Scene = scene; 66 m_Scene = scene;
64 m_DialogModule = m_Scene.RequestModuleInterface<IDialogModule>(); 67 m_DialogModule = m_Scene.RequestModuleInterface<IDialogModule>();
68 MainConsole.Instance.Commands.AddCommand("RestartModule",
69 false, "region restart bluebox",
70 "region restart bluebox <message> <time> ...",
71 "Restart the region", HandleRegionRestart);
72 MainConsole.Instance.Commands.AddCommand("RestartModule",
73 false, "region restart notice",
74 "region restart notice <message> <time> ...",
75 "Restart the region", HandleRegionRestart);
76 MainConsole.Instance.Commands.AddCommand("RestartModule",
77 false, "region restart abort",
78 "region restart abort [<message>]",
79 "Restart the region", HandleRegionRestart);
65 } 80 }
66 81
67 public void RegionLoaded(Scene scene) 82 public void RegionLoaded(Scene scene)
@@ -137,6 +152,7 @@ namespace OpenSim.Region.CoreModules.World.Region
137 continue; 152 continue;
138 } 153 }
139 nextAlert = m_Alerts[1]; 154 nextAlert = m_Alerts[1];
155 break;
140 } 156 }
141 157
142 int currentAlert = m_Alerts[0]; 158 int currentAlert = m_Alerts[0];
@@ -144,7 +160,7 @@ namespace OpenSim.Region.CoreModules.World.Region
144 m_Alerts.RemoveAt(0); 160 m_Alerts.RemoveAt(0);
145 161
146 int minutes = currentAlert / 60; 162 int minutes = currentAlert / 60;
147 string currentAlertString = ""; 163 string currentAlertString = String.Empty;
148 if (minutes > 0) 164 if (minutes > 0)
149 { 165 {
150 if (minutes == 1) 166 if (minutes == 1)
@@ -165,7 +181,7 @@ namespace OpenSim.Region.CoreModules.World.Region
165 181
166 string msg = String.Format(m_Message, currentAlertString); 182 string msg = String.Format(m_Message, currentAlertString);
167 183
168 if (m_DialogModule != null) 184 if (m_DialogModule != null && msg != String.Empty)
169 { 185 {
170 if (m_Notice) 186 if (m_Notice)
171 m_DialogModule.SendGeneralAlert(msg); 187 m_DialogModule.SendGeneralAlert(msg);
@@ -198,7 +214,49 @@ namespace OpenSim.Region.CoreModules.World.Region
198 { 214 {
199 m_CountdownTimer.Stop(); 215 m_CountdownTimer.Stop();
200 m_CountdownTimer = null; 216 m_CountdownTimer = null;
217 if (m_DialogModule != null && message != String.Empty)
218 m_DialogModule.SendGeneralAlert(message);
201 } 219 }
202 } 220 }
221
222 private void HandleRegionRestart(string module, string[] args)
223 {
224 if (!(MainConsole.Instance.ConsoleScene is Scene))
225 return;
226
227 if (MainConsole.Instance.ConsoleScene != m_Scene)
228 return;
229
230 if (args.Length < 5)
231 {
232 if (args.Length > 2)
233 {
234 if (args[2] == "abort")
235 {
236 string msg = String.Empty;
237 if (args.Length > 3)
238 msg = args[3];
239
240 AbortRestart(msg);
241
242 MainConsole.Instance.Output("Region restart aborted");
243 return;
244 }
245 }
246
247 MainConsole.Instance.Output("Error: restart region <mode> <name> <time> ...");
248 return;
249 }
250
251 bool notice = false;
252 if (args[2] == "notice")
253 notice = true;
254
255 List<int> times = new List<int>();
256 for (int i = 4 ; i < args.Length ; i++)
257 times.Add(Convert.ToInt32(args[i]));
258
259 ScheduleRestart(UUID.Zero, args[3], times.ToArray(), notice);
260 }
203 } 261 }
204} 262}