From 8313a88942e3f1b479a77fbeaa5da0b59b5d1b95 Mon Sep 17 00:00:00 2001 From: CommonLoon102 <321850+CommonLoon102@users.noreply.github.com> Date: Sat, 25 Jan 2020 15:59:28 +0000 Subject: [PATCH] remove crashed servers from the list (#2) --- Model/Server.cs | 1 + Supervisor/NBloodServerListener.cs | 1 + Supervisor/Program.cs | 16 +++++++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Model/Server.cs b/Model/Server.cs index 34df56c..273602a 100644 --- a/Model/Server.cs +++ b/Model/Server.cs @@ -8,6 +8,7 @@ namespace Model public class Server { public DateTime SpawnedAtUtc { get; set; } = DateTime.UtcNow; + public DateTime LastHeartBeatUtc { get; set; } public int ProcessId { get; set; } public int Port { get; set; } public bool IsStarted { get; set; } diff --git a/Supervisor/NBloodServerListener.cs b/Supervisor/NBloodServerListener.cs index a384266..6dff515 100644 --- a/Supervisor/NBloodServerListener.cs +++ b/Supervisor/NBloodServerListener.cs @@ -66,6 +66,7 @@ namespace Supervisor new Server() { Port = packetData.Port, + LastHeartBeatUtc = DateTime.UtcNow, IsStarted = packetData.IsStarted, CurrentPlayers = packetData.CurrentPlayers, MaximumPlayers = packetData.MaximumPlayers diff --git a/Supervisor/Program.cs b/Supervisor/Program.cs index 27acac4..1107bd2 100644 --- a/Supervisor/Program.cs +++ b/Supervisor/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; using System.Threading; using Model; @@ -17,7 +18,20 @@ namespace Supervisor while (true) { - Thread.Sleep(TimeSpan.FromSeconds(1)); + RemoveCrashedServers(); + Thread.Sleep(TimeSpan.FromSeconds(3)); + } + } + + private static void RemoveCrashedServers() + { + var crashedServers = State.Servers.Values + .Where(s => s.IsStarted && DateTime.UtcNow - s.LastHeartBeatUtc < TimeSpan.FromMinutes(15)) + .Select(s => s.Port); + + foreach (var port in crashedServers) + { + State.Servers.TryRemove(port, out _); } } }