Make the "delay restart" button delay restart for 1 hour rather than aborting
it altogether. Allow a maximum of three uses before the restart goes through.avinationmerge
parent
a945105003
commit
e93308072e
|
@ -61,6 +61,8 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
public event ChangeDelegate OnEstateInfoChange;
|
public event ChangeDelegate OnEstateInfoChange;
|
||||||
public event MessageDelegate OnEstateMessage;
|
public event MessageDelegate OnEstateMessage;
|
||||||
|
|
||||||
|
private int m_delayCount = 0;
|
||||||
|
|
||||||
#region Packet Data Responders
|
#region Packet Data Responders
|
||||||
|
|
||||||
private void clientSendDetailedEstateData(IClientAPI remote_client, UUID invoice)
|
private void clientSendDetailedEstateData(IClientAPI remote_client, UUID invoice)
|
||||||
|
@ -259,7 +261,11 @@ namespace OpenSim.Region.CoreModules.World.Estate
|
||||||
{
|
{
|
||||||
if (timeInSeconds == -1)
|
if (timeInSeconds == -1)
|
||||||
{
|
{
|
||||||
restartModule.AbortRestart("Restart aborted by region manager");
|
m_delayCount++;
|
||||||
|
if (m_delayCount > 3)
|
||||||
|
return;
|
||||||
|
|
||||||
|
restartModule.DelayRestart(3600, "Restart delayed by region manager");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
protected bool m_Notice = false;
|
protected bool m_Notice = false;
|
||||||
protected IDialogModule m_DialogModule = null;
|
protected IDialogModule m_DialogModule = null;
|
||||||
protected string m_MarkerPath = String.Empty;
|
protected string m_MarkerPath = String.Empty;
|
||||||
|
private int[] m_CurrentAlerts = null;
|
||||||
|
|
||||||
public void Initialise(IConfigSource config)
|
public void Initialise(IConfigSource config)
|
||||||
{
|
{
|
||||||
|
@ -141,6 +142,7 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
m_Message = message;
|
m_Message = message;
|
||||||
m_Initiator = initiator;
|
m_Initiator = initiator;
|
||||||
m_Notice = notice;
|
m_Notice = notice;
|
||||||
|
m_CurrentAlerts = alerts;
|
||||||
m_Alerts = new List<int>(alerts);
|
m_Alerts = new List<int>(alerts);
|
||||||
m_Alerts.Sort();
|
m_Alerts.Sort();
|
||||||
m_Alerts.Reverse();
|
m_Alerts.Reverse();
|
||||||
|
@ -152,12 +154,12 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int nextInterval = DoOneNotice();
|
int nextInterval = DoOneNotice(true);
|
||||||
|
|
||||||
SetTimer(nextInterval);
|
SetTimer(nextInterval);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int DoOneNotice()
|
public int DoOneNotice(bool sendOut)
|
||||||
{
|
{
|
||||||
if (m_Alerts.Count == 0 || m_Alerts[0] == 0)
|
if (m_Alerts.Count == 0 || m_Alerts[0] == 0)
|
||||||
{
|
{
|
||||||
|
@ -182,34 +184,37 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
|
|
||||||
m_Alerts.RemoveAt(0);
|
m_Alerts.RemoveAt(0);
|
||||||
|
|
||||||
int minutes = currentAlert / 60;
|
if (sendOut)
|
||||||
string currentAlertString = String.Empty;
|
|
||||||
if (minutes > 0)
|
|
||||||
{
|
{
|
||||||
if (minutes == 1)
|
int minutes = currentAlert / 60;
|
||||||
currentAlertString += "1 minute";
|
string currentAlertString = String.Empty;
|
||||||
else
|
if (minutes > 0)
|
||||||
currentAlertString += String.Format("{0} minutes", minutes);
|
{
|
||||||
|
if (minutes == 1)
|
||||||
|
currentAlertString += "1 minute";
|
||||||
|
else
|
||||||
|
currentAlertString += String.Format("{0} minutes", minutes);
|
||||||
|
if ((currentAlert % 60) != 0)
|
||||||
|
currentAlertString += " and ";
|
||||||
|
}
|
||||||
if ((currentAlert % 60) != 0)
|
if ((currentAlert % 60) != 0)
|
||||||
currentAlertString += " and ";
|
{
|
||||||
}
|
int seconds = currentAlert % 60;
|
||||||
if ((currentAlert % 60) != 0)
|
if (seconds == 1)
|
||||||
{
|
currentAlertString += "1 second";
|
||||||
int seconds = currentAlert % 60;
|
else
|
||||||
if (seconds == 1)
|
currentAlertString += String.Format("{0} seconds", seconds);
|
||||||
currentAlertString += "1 second";
|
}
|
||||||
else
|
|
||||||
currentAlertString += String.Format("{0} seconds", seconds);
|
|
||||||
}
|
|
||||||
|
|
||||||
string msg = String.Format(m_Message, currentAlertString);
|
string msg = String.Format(m_Message, currentAlertString);
|
||||||
|
|
||||||
if (m_DialogModule != null && msg != String.Empty)
|
if (m_DialogModule != null && msg != String.Empty)
|
||||||
{
|
{
|
||||||
if (m_Notice)
|
if (m_Notice)
|
||||||
m_DialogModule.SendGeneralAlert(msg);
|
m_DialogModule.SendGeneralAlert(msg);
|
||||||
else
|
else
|
||||||
m_DialogModule.SendNotificationToUsersInRegion(m_Initiator, "System", msg);
|
m_DialogModule.SendNotificationToUsersInRegion(m_Initiator, "System", msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return currentAlert - nextAlert;
|
return currentAlert - nextAlert;
|
||||||
|
@ -226,7 +231,25 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
|
|
||||||
private void OnTimer(object source, ElapsedEventArgs e)
|
private void OnTimer(object source, ElapsedEventArgs e)
|
||||||
{
|
{
|
||||||
int nextInterval = DoOneNotice();
|
int nextInterval = DoOneNotice(true);
|
||||||
|
|
||||||
|
SetTimer(nextInterval);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void DelayRestart(int seconds, string message)
|
||||||
|
{
|
||||||
|
if (m_CountdownTimer == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
m_CountdownTimer.Stop();
|
||||||
|
m_CountdownTimer = null;
|
||||||
|
|
||||||
|
m_Alerts = new List<int>(m_CurrentAlerts);
|
||||||
|
m_Alerts.Add(seconds);
|
||||||
|
m_Alerts.Sort();
|
||||||
|
m_Alerts.Reverse();
|
||||||
|
|
||||||
|
int nextInterval = DoOneNotice(false);
|
||||||
|
|
||||||
SetTimer(nextInterval);
|
SetTimer(nextInterval);
|
||||||
}
|
}
|
||||||
|
@ -240,9 +263,9 @@ namespace OpenSim.Region.CoreModules.World.Region
|
||||||
if (m_DialogModule != null && message != String.Empty)
|
if (m_DialogModule != null && message != String.Empty)
|
||||||
m_DialogModule.SendGeneralAlert(message);
|
m_DialogModule.SendGeneralAlert(message);
|
||||||
}
|
}
|
||||||
if (m_MarkerPath != String.Empty)
|
if (m_MarkerPath != String.Empty)
|
||||||
File.Delete(Path.Combine(m_MarkerPath,
|
File.Delete(Path.Combine(m_MarkerPath,
|
||||||
m_Scene.RegionInfo.RegionID.ToString()));
|
m_Scene.RegionInfo.RegionID.ToString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void HandleRegionRestart(string module, string[] args)
|
private void HandleRegionRestart(string module, string[] args)
|
||||||
|
|
|
@ -35,5 +35,6 @@ namespace OpenSim.Region.Framework.Interfaces
|
||||||
TimeSpan TimeUntilRestart { get; }
|
TimeSpan TimeUntilRestart { get; }
|
||||||
void ScheduleRestart(UUID initiator, string message, int[] alerts, bool notice);
|
void ScheduleRestart(UUID initiator, string message, int[] alerts, bool notice);
|
||||||
void AbortRestart(string message);
|
void AbortRestart(string message);
|
||||||
|
void DelayRestart(int seconds, string message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue