private static void OnServerCrashed(CrashedEventArgs e) { if (World.Loading || World.Saving) { return; } PokerGame.EventSink_Crashed(e); _Event = e; _Stamp = DateTime.Now; Core.CrashedHandler = null; VitaNexCore.TryCatch( () => { if (CSOptions.Report) { CSOptions.ToConsole("Writing Crash Report..."); CSOptions.ToConsole(Report() ? "Done" : "Failed"); } //World.WaitForWriteCompletion(); if (CSOptions.Backup) { CSOptions.ToConsole("Backing Up Saves..."); CSOptions.ToConsole(Backup(false) ? "Done" : "Failed"); } if (CSOptions.Restore) { CSOptions.ToConsole("Creating Restore Saves..."); CSOptions.ToConsole(Backup(true) ? "Done" : "Failed"); } Delta(); if (!CSOptions.Restart) { return; } if (CSOptions.RestartDelay > TimeSpan.Zero) { CSOptions.ToConsole("Press 'ESC' to cancel or 'Enter' to skip the restart delay..."); CSOptions.ToConsole("{0} will restart in: ", ServerList.ServerName); _RestartTime = (int)Math.Ceiling(CSOptions.RestartDelay.TotalSeconds); int cX = Console.CursorLeft; int cY = Console.CursorTop; var wait = new EventWaitHandle(false, EventResetMode.ManualReset); ThreadPool.QueueUserWorkItem( cb => { bool exit = false; do { lock (VitaNexCore.ConsoleLock) { Console.CursorLeft = cX; Console.CursorTop = cY; Console.Write(new String(' ', 40)); Console.CursorLeft = cX; Console.CursorTop = cY; Console.Write("{0} second{1}", _RestartTime, _RestartTime != 1 ? "s" : String.Empty); } if (_RestartIntercept || _RestartForce) { exit = true; } if (_RestartTime-- < 0) { exit = _RestartForce = true; } if (!exit) { Thread.Sleep(1000); } wait.Set(); }while (!exit); }); ThreadPool.QueueUserWorkItem( cb => { bool escape = false; do { if (_RestartForce || _RestartIntercept || _RestartTime <= 0) { escape = true; } if (!escape && !Console.KeyAvailable) { switch (Console.ReadKey(true).Key) { case ConsoleKey.Escape: escape = _RestartForce = _RestartIntercept = true; break; case ConsoleKey.Enter: escape = _RestartForce = true; break; } } if (!escape) { wait.WaitOne(); } }while (!escape); }); while (!_RestartForce && !_RestartIntercept && _RestartTime > 0) { Thread.Sleep(10); } lock (VitaNexCore.ConsoleLock) { Console.WriteLine(); } } DeltaRestart(); }, CSOptions.ToConsole); }