diff --git a/TShockAPI/Commands.cs b/TShockAPI/Commands.cs index 073b7445..ce04a640 100755 --- a/TShockAPI/Commands.cs +++ b/TShockAPI/Commands.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text.RegularExpressions; using System.Diagnostics; using System.Net; +using System.Threading; using Microsoft.Xna.Framework; using Terraria; @@ -127,7 +128,7 @@ namespace TShockAPI public static void CheckUpdates(CommandArgs args) { - UpdateManager.CheckUpdate(); + ThreadPool.QueueUserWorkItem(UpdateManager.CheckUpdate); } public static void PartyChat(CommandArgs args) @@ -231,10 +232,11 @@ namespace TShockAPI { string ip = args.Message.Split(' ')[1]; TShock.Bans.AddBan(ip, "", "Manually added IP address ban."); - } else if (args.Message.Split(' ').Length > 2) + } + else if (args.Message.Split(' ').Length > 2) { string reason = ""; - for (int i = 2; i > args.Message.Split(' ').Length;i++) + for (int i = 2; i > args.Message.Split(' ').Length; i++) { reason += args.Message.Split(' ')[i]; } diff --git a/TShockAPI/UpdateManager.cs b/TShockAPI/UpdateManager.cs index 564112b2..debd27bd 100644 --- a/TShockAPI/UpdateManager.cs +++ b/TShockAPI/UpdateManager.cs @@ -2,16 +2,23 @@ using System.Collections.Generic; using System.Linq; using System.Net; -using System.Text; - +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Terraria; + namespace TShockAPI { class UpdateManager { static string updateUrl = "http://shankshock.com/tshock-update.txt"; public static bool updateCmd; - public static long updateEpoch = 0; - public static string[] globalChanges = {}; + public static DateTime lastcheck = DateTime.MinValue; + public static string[] globalChanges = {}; + /// + /// Check once every X minutes. + /// + static readonly int CheckXMinutes = 30; /// /// Checks to see if the server is out of date. /// @@ -48,31 +55,31 @@ namespace TShockAPI public static void NotifyAdministrators(string[] changes) { - for (int i = 0; i < ConfigurationManager.maxSlots; i++) + for (int i = 0; i < Main.maxPlayers; i++) { - if (Terraria.Main.player[i].active) + if (Main.player[i].active) { if (!TShock.players[i].group.HasPermission("maintenance")) return; Tools.SendMessage(i, "The server is out of date. To update, type /updatenow."); - for (int j = 4; j <= changes.Length; j++) + for (int j = 4; j < changes.Length; j++) { - Tools.SendMessage(i, changes[i], new float[] { 255, 0, 0 }); + Tools.SendMessage(i, changes[j], new float[] { 255, 0, 0 }); } } } } public static void UpdateProcedureCheck() - { - long currentEpoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000; - if (currentEpoch > UpdateManager.updateEpoch) + { + if ((DateTime.Now - lastcheck).TotalMinutes >= CheckXMinutes) { - CheckUpdate(); + ThreadPool.QueueUserWorkItem(CheckUpdate); + lastcheck = DateTime.Now; } } - public static void CheckUpdate() + public static void CheckUpdate(object o) { if (ServerIsOutOfDate()) {