From 5c697efc366bafd6d9fb9103257a78e4a29f50d2 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Fri, 26 May 2017 10:00:16 +1000 Subject: [PATCH] Heartbeat is now a background task --- MCGalaxy/Network/Heartbeat/Heartbeat.cs | 36 +++++++++++-------------- MCGalaxy/Server/Server.cs | 2 -- 2 files changed, 16 insertions(+), 22 deletions(-) diff --git a/MCGalaxy/Network/Heartbeat/Heartbeat.cs b/MCGalaxy/Network/Heartbeat/Heartbeat.cs index 25637c50f..032c7e675 100644 --- a/MCGalaxy/Network/Heartbeat/Heartbeat.cs +++ b/MCGalaxy/Network/Heartbeat/Heartbeat.cs @@ -22,6 +22,7 @@ using System.Net; using System.Net.Cache; using System.Text; using System.Threading; +using MCGalaxy.Tasks; namespace MCGalaxy.Network { @@ -60,12 +61,23 @@ namespace MCGalaxy.Network { using (File.Create("heartbeat.log")) { } } - canBeat = true; - for (int i = 0; i < Beats.Length; i++) { - Beats[i].Init(); - Pump(Beats[i]); + foreach (Heartbeat beat in Heartbeats) { + beat.Init(); + Pump(beat); + } + + if (heartbeatTask != null) return; + heartbeatTask = Server.Background.QueueRepeat(OnBeat, null, + TimeSpan.FromSeconds(30)); + } + + static SchedulerTask heartbeatTask; + static void OnBeat(SchedulerTask task) { + foreach (Heartbeat beat in Heartbeats) { + if (beat.Persistent) Pump(beat); } } + /// Pumps the specified heartbeat. public static void Pump(Heartbeat beat) { @@ -105,21 +117,5 @@ namespace MCGalaxy.Network { if (Server.logbeat) Server.s.Log("Beat: " + beat + " failed."); } - - - static Timer timer; - static bool canBeat = false; - readonly static Heartbeat[] Beats = new Heartbeat[] { new ClassiCubeBeat() }; - - static Heartbeat() { - timer = new Timer(OnBeat, null, 30000, 30000); - } - - static void OnBeat(object state) { - if (!canBeat) return; - for (int i = 0; i < Beats.Length; i++) { - if (Beats[i].Persistent) Pump(Beats[i]); - } - } } } diff --git a/MCGalaxy/Server/Server.cs b/MCGalaxy/Server/Server.cs index 846982882..8f787ad9d 100644 --- a/MCGalaxy/Server/Server.cs +++ b/MCGalaxy/Server/Server.cs @@ -162,8 +162,6 @@ namespace MCGalaxy { Ban.EnsureExists(); if (!Directory.Exists("extra")) Directory.CreateDirectory("extra"); - if (!Directory.Exists("extra/copy/")) Directory.CreateDirectory("extra/copy/"); - if (!Directory.Exists("extra/copyBackup/")) Directory.CreateDirectory("extra/copyBackup/"); if (!Directory.Exists("extra/Waypoints")) Directory.CreateDirectory("extra/Waypoints"); if (!Directory.Exists("blockdefs")) Directory.CreateDirectory("blockdefs"); }