2022-10-23 19:02:39 +08:00
|
|
|
|
using System;
|
2021-12-10 11:31:36 +01:00
|
|
|
|
using System.Diagnostics;
|
2021-07-07 13:36:25 +02:00
|
|
|
|
using System.IO;
|
2021-12-10 11:31:36 +01:00
|
|
|
|
using System.Threading;
|
2022-10-23 19:02:39 +08:00
|
|
|
|
using RageCoop.Core;
|
2022-08-21 19:13:12 +08:00
|
|
|
|
|
2022-10-23 19:02:39 +08:00
|
|
|
|
namespace RageCoop.Server;
|
|
|
|
|
|
|
|
|
|
internal class Program
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
private static bool Stopping;
|
|
|
|
|
private static Logger mainLogger;
|
2022-09-08 12:41:56 -07:00
|
|
|
|
|
2022-10-23 19:02:39 +08:00
|
|
|
|
private static void Main(string[] args)
|
|
|
|
|
{
|
|
|
|
|
if (args.Length >= 2 && args[0] == "update")
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
var target = args[1];
|
|
|
|
|
var i = 0;
|
|
|
|
|
while (i++ < 10)
|
|
|
|
|
try
|
2022-08-21 19:13:12 +08:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Console.WriteLine("Applying update to " + target);
|
2022-08-21 19:56:59 +08:00
|
|
|
|
|
2022-10-23 19:02:39 +08:00
|
|
|
|
CoreUtils.CopyFilesRecursively(new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory),
|
|
|
|
|
new DirectoryInfo(target));
|
|
|
|
|
Process.Start(Path.Combine(target, "RageCoop.Server"));
|
|
|
|
|
Environment.Exit(0);
|
2022-08-21 19:13:12 +08:00
|
|
|
|
}
|
2022-10-23 19:02:39 +08:00
|
|
|
|
catch (Exception ex)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine(ex.ToString());
|
|
|
|
|
Thread.Sleep(3000);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Environment.Exit(i);
|
|
|
|
|
}
|
2022-11-30 20:17:06 +08:00
|
|
|
|
|
2022-10-23 19:02:39 +08:00
|
|
|
|
AppDomain.CurrentDomain.UnhandledException += UnhandledException;
|
|
|
|
|
mainLogger = new Logger
|
|
|
|
|
{
|
|
|
|
|
Name = "Server"
|
|
|
|
|
};
|
|
|
|
|
mainLogger.Writers.Add(CoreUtils.OpenWriter("RageCoop.Server.log"));
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Console.Title = "RAGECOOP";
|
|
|
|
|
var setting = Util.Read<Settings>("Settings.xml");
|
2022-06-27 15:35:23 +08:00
|
|
|
|
#if DEBUG
|
2022-10-23 19:02:39 +08:00
|
|
|
|
setting.LogLevel = 0;
|
2021-12-10 11:31:36 +01:00
|
|
|
|
#endif
|
2022-10-23 19:02:39 +08:00
|
|
|
|
var server = new Server(setting, mainLogger);
|
|
|
|
|
Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
mainLogger.Info("Initiating shutdown sequence...");
|
|
|
|
|
mainLogger.Info("Press Ctrl+C again to commence an emergency shutdown.");
|
|
|
|
|
if (e.SpecialKey == ConsoleSpecialKey.ControlC)
|
2021-12-08 13:45:00 +01:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
if (!Stopping)
|
2021-12-08 13:45:00 +01:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
e.Cancel = true;
|
|
|
|
|
Stopping = true;
|
|
|
|
|
server.Stop();
|
|
|
|
|
mainLogger.Info("Server stopped.");
|
|
|
|
|
mainLogger.Dispose();
|
|
|
|
|
Thread.Sleep(1000);
|
|
|
|
|
Environment.Exit(0);
|
2021-12-08 13:45:00 +01:00
|
|
|
|
}
|
2022-10-23 19:02:39 +08:00
|
|
|
|
else
|
2022-07-22 19:43:48 +08:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
mainLogger.Flush();
|
|
|
|
|
Environment.Exit(1);
|
2022-07-22 19:43:48 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-10-23 19:02:39 +08:00
|
|
|
|
};
|
|
|
|
|
server.Start();
|
|
|
|
|
mainLogger?.Info("Please use CTRL + C if you want to stop the server!");
|
|
|
|
|
mainLogger?.Info("Type here to send chat messages or execute commands");
|
|
|
|
|
mainLogger?.Flush();
|
|
|
|
|
while (true)
|
2021-07-07 13:36:25 +02:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
var s = Console.ReadLine();
|
|
|
|
|
if (!Stopping && s != null) server.ChatMessageReceived("Server", s);
|
|
|
|
|
Thread.Sleep(20);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-10-23 19:02:39 +08:00
|
|
|
|
catch (Exception e)
|
2022-08-15 21:25:42 +08:00
|
|
|
|
{
|
2022-10-23 19:02:39 +08:00
|
|
|
|
Fatal(e);
|
2022-08-15 21:25:42 +08:00
|
|
|
|
}
|
2022-10-23 19:02:39 +08:00
|
|
|
|
}
|
2022-08-15 21:25:42 +08:00
|
|
|
|
|
2022-10-23 19:02:39 +08:00
|
|
|
|
private static void UnhandledException(object sender, UnhandledExceptionEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
mainLogger.Error("Unhandled exception thrown from user thread", e.ExceptionObject as Exception);
|
|
|
|
|
mainLogger.Flush();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private static void Fatal(Exception e)
|
|
|
|
|
{
|
|
|
|
|
mainLogger.Error(e);
|
|
|
|
|
mainLogger.Error("Fatal error occurred, server shutting down.");
|
|
|
|
|
mainLogger.Flush();
|
|
|
|
|
Thread.Sleep(5000);
|
|
|
|
|
Environment.Exit(1);
|
2021-07-07 13:36:25 +02:00
|
|
|
|
}
|
2022-10-23 19:02:39 +08:00
|
|
|
|
}
|