private static void ShutdownHandler( Player player, Command cmd )
{
string delayString = cmd.Next();
TimeSpan delayTime = DefaultShutdownTime;
string reason = "";
if ( delayString != null ) {
if ( delayString.Equals( "abort", StringComparison.OrdinalIgnoreCase ) ) {
if ( Server.CancelShutdown() ) {
Logger.Log( LogType.UserActivity,
"Shutdown aborted by {0}.", player.Name );
Server.Message( "&WShutdown aborted by {0}", player.ClassyName );
} else {
player.MessageNow( "Cannot abort shutdown - too late." );
}
return;
} else if ( !delayString.TryParseMiniTimespan( out delayTime ) ) {
CdShutdown.PrintUsage( player );
return;
}
if ( delayTime > DateTimeUtil.MaxTimeSpan ) {
player.MessageMaxTimeSpan();
return;
}
reason = cmd.NextAll();
}
if ( delayTime.TotalMilliseconds > Int32.MaxValue - 1 ) {
player.Message( "WShutdown: Delay is too long, maximum is {0}",
TimeSpan.FromMilliseconds( Int32.MaxValue - 1 ).ToMiniString() );
return;
}
Server.Message( "&WServer shutting down in {0}", delayTime.ToMiniString() );
if ( String.IsNullOrEmpty( reason ) ) {
Logger.Log( LogType.UserActivity,
"{0} scheduled a shutdown ({1} delay).",
player.Name, delayTime.ToCompactString() );
ShutdownParams sp = new ShutdownParams( ShutdownReason.ShuttingDown, delayTime, true, false );
Server.Shutdown( sp, false );
} else {
Server.Message( "&SShutdown reason: {0}", reason );
Logger.Log( LogType.UserActivity,
"{0} scheduled a shutdown ({1} delay). Reason: {2}",
player.Name, delayTime.ToCompactString(), reason );
ShutdownParams sp = new ShutdownParams( ShutdownReason.ShuttingDown, delayTime, true, false, reason, player );
Server.Shutdown( sp, false );
}
}