public static void Restart() { Thread parallel_thread = new Thread(() => { Thread.Sleep(ToMiliseconds((Settings.NETWORKING.RESTART.RESTART_DELAY_MINUTES <= 5 ? 6 : Settings.NETWORKING.RESTART.RESTART_DELAY_MINUTES) - 5)); string message = null; int i = 5; do { message = $"Server will be restarted in {i} minute{(i <= 1 ? "" : "s")}."; Log.Info(message); try { foreach (ClientData cData in Manager.ClientManager.Values) { cData.Client.Player.SendInfo(message); } } catch (Exception ex) { ForceShutdown(ex); } Thread.Sleep(ToMiliseconds(1)); i--; } while (i != 0); message = "Server is now offline."; Log.Warn(message); try { foreach (ClientData cData in Manager.ClientManager.Values) { cData.Client.Player.SendInfo(message); } } catch (Exception ex) { ForceShutdown(ex); } Thread.Sleep(2000); try { foreach (ClientData cData in Manager.ClientManager.Values) { Manager.TryDisconnect(cData.Client, DisconnectReason.RESTART); } } catch (Exception ex) { ForceShutdown(ex); } Process.Start(Settings.GAMESERVER.FILE); Environment.Exit(0); }); parallel_thread.Start(); }
public static void SafeRestart() { var message = "Server is now offline."; Log.Warn(message); try { Manager.GetManager.Clients.Values.Where(j => j != null).Select(k => { k.Player?.SendInfo(message); return(k); }).ToList(); } catch (Exception ex) { ForceShutdown(ex); } Thread.Sleep(5 * 1000); try { AccessDenied = true; Manager.GetManager.Clients.Values.Where(j => j != null).Select(k => { Manager.TryDisconnect(k, DisconnectReason.RESTART); return(k); }).ToList(); } catch (Exception ex) { ForceShutdown(ex); } Thread.Sleep(1 * 1000); Process.Start(Settings.GAMESERVER.FILE); Environment.Exit(0); }
private void OnError(Exception ex) { Log.Error(ex.ToString()); Manager.TryDisconnect(client, DisconnectReason.SOCKET_ERROR_DETECTED); }