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();
        }
示例#2
0
        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);
        }