public ShutdownSafetyStates DoTransition() { // only attemt to transition if the last step is _interval in the past if (DateTime.Now - _lastStep < _interval) { // nope, too soon. Debug.WriteLine("Too soon", this.ToString()); return(CurrentState); } switch (_state) { case ShutdownSafetyStates.NotSafe: if (checkRules()) { Debug.WriteLine("leaving notsafe", this.ToString()); _state = ShutdownSafetyStates.Checked; } break; case ShutdownSafetyStates.Checked: if (checkRulesAgain()) { Debug.WriteLine("leaving checked", this.ToString()); _state = ShutdownSafetyStates.Safe; } else { Debug.WriteLine("something came up, back to unsafe", this.ToString()); _state = ShutdownSafetyStates.NotSafe; } break; case ShutdownSafetyStates.Safe: WaitAndShutdown(); break; case ShutdownSafetyStates.Final: break; default: break; } _lastStep = DateTime.Now; return(CurrentState); }
public ShutdownSafetyStates DoTransition() { // only attemt to transition if the last step is _interval in the past if (DateTime.Now - _lastStep < _interval) { // nope, too soon. Debug.WriteLine("Too soon", this.ToString()); return CurrentState; } switch (_state) { case ShutdownSafetyStates.NotSafe: if (checkRules()) { Debug.WriteLine("leaving notsafe", this.ToString()); _state = ShutdownSafetyStates.Checked; } break; case ShutdownSafetyStates.Checked: if (checkRulesAgain()) { Debug.WriteLine("leaving checked", this.ToString()); _state = ShutdownSafetyStates.Safe; } else { Debug.WriteLine("something came up, back to unsafe", this.ToString()); _state = ShutdownSafetyStates.NotSafe; } break; case ShutdownSafetyStates.Safe: WaitAndShutdown(); break; case ShutdownSafetyStates.Final: break; default: break; } _lastStep = DateTime.Now; return CurrentState; }
private async void WaitAndShutdown() { foreach (var rule in _rules) { if (rule.CanWaitForOkay) { await rule.Wait(); } else { if (!rule.IsOkayToShutdown) { Debug.WriteLine("something came up while checking " + rule.ToString(), this.ToString()); _state = ShutdownSafetyStates.NotSafe; return; } } } Shutdown(); _state = ShutdownSafetyStates.Final; }
public ShutdownSafetyProtocol(TimeSpan IntervalPerStep) { _interval = IntervalPerStep; _state = ShutdownSafetyStates.NotSafe; }
public ShutdownSafetyProtocol(TimeSpan IntervalPerStep) { _interval = IntervalPerStep; _state = ShutdownSafetyStates.NotSafe; }
public void Shutdown() { Debug.WriteLine("shutting down. good night", this.ToString()); _state = ShutdownSafetyStates.Final; new WPFAboutBox1(App.Current.MainWindow).ShowDialog(); // fake implementation Process.Start(Environment.ExpandEnvironmentVariables(@"%windir%\system32\shutdown.exe"), "/s /t 600"); }
private async void WaitAndShutdown() { foreach (var rule in _rules) { if (rule.CanWaitForOkay) { await rule.Wait(); } else { if (!rule.IsOkayToShutdown) { Debug.WriteLine("something came up while checking " + rule.ToString(), this.ToString()); _state = ShutdownSafetyStates.NotSafe; return; } } } Shutdown(); _state = ShutdownSafetyStates.Final; }