arbiter/Tadah.Arbiter/Program.cs

67 lines
1.9 KiB
C#

using System;
using System.Threading;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace Tadah.Arbiter
{
public enum GameServerState
{
Online = 0,
Offline = 1,
Crashed = 2,
Paused = 3
};
public class Program
{
internal static void Main(string[] args)
{
#if DEBUG
Log.Write($"Access Key read: {Configuration.AppSettings["AccessKey"]}", LogSeverity.Boot);
Log.Write($"Current Access key: {Configuration.AppSettings["AccessKey"]}", LogSeverity.Boot);
#else
Log.Write("Access Key read", LogSeverity.Information);
#endif
Log.Write("Service starting...", LogSeverity.Boot);
Configuration.Load();
Log.Write($"Assigned GameserverId: {Configuration.Uuid}", LogSeverity.Boot);
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
Task.Run(() => JobManager.MonitorCrashedJobs());
Task.Run(() => JobManager.MonitorUnresponsiveJobs());
Task.Run(() => Tampa.ProcessManager.MonitorUnresponsiveProcesses());
}
Task.Run(() => Http.StartResourceReporter());
Http.UpdateState(GameServerState.Online);
Log.Write("Initializing Tadah Arbiter Service", LogSeverity.Boot);
int ServicePort = Service.Start();
Log.Write($"Service Started on port {ServicePort}", LogSeverity.Boot);
Console.CancelKeyPress += delegate
{
Log.Write("Service shutting down...", LogSeverity.Event);
Service.Stop();
JobManager.CloseAllJobs();
Http.UpdateState(GameServerState.Offline);
// wait for web requests to finish
Thread.Sleep(10000);
};
while (true)
{
Thread.Sleep(1000);
}
}
}
}