Added UpdateManager.cs
Update checks now happen every 5 minutes. Side effect: Instant join update is now delayed 5 minutes.
This commit is contained in:
parent
f3c30da22c
commit
4422f643f8
3 changed files with 130 additions and 130 deletions
|
|
@ -16,22 +16,14 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
public static TSPlayer[] players = new TSPlayer[Main.maxPlayers];
|
public static TSPlayer[] players = new TSPlayer[Main.maxPlayers];
|
||||||
|
|
||||||
public static long updateEpoch = 0;
|
|
||||||
|
|
||||||
public static bool serverOutOfDate = false;
|
|
||||||
|
|
||||||
public static string saveDir = "./tshock/";
|
public static string saveDir = "./tshock/";
|
||||||
|
|
||||||
public static Version VersionNum = new Version(2, 0, 0, 1);
|
public static Version VersionNum = new Version(2, 0, 0, 1);
|
||||||
|
|
||||||
public static string VersionCodename = "UnrealIRCd ftw (irc.shankshock.com #terraria)";
|
public static string VersionCodename = "UnrealIRCd ftw (irc.shankshock.com #terraria)";
|
||||||
|
|
||||||
public static bool notifiedAdminOfVersionCheck;
|
|
||||||
|
|
||||||
private static bool[] BlacklistTiles;
|
private static bool[] BlacklistTiles;
|
||||||
|
|
||||||
public static bool updateCmd;
|
|
||||||
|
|
||||||
public static BanManager Bans = new BanManager(Path.Combine(saveDir, "bans.txt"));
|
public static BanManager Bans = new BanManager(Path.Combine(saveDir, "bans.txt"));
|
||||||
|
|
||||||
public override Version Version
|
public override Version Version
|
||||||
|
|
@ -479,7 +471,6 @@ namespace TShockAPI
|
||||||
{
|
{
|
||||||
StartInvasion();
|
StartInvasion();
|
||||||
}
|
}
|
||||||
ShowUpdateReminder(who);
|
|
||||||
e.Handled = true;
|
e.Handled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -584,11 +575,7 @@ namespace TShockAPI
|
||||||
|
|
||||||
private void OnUpdate(GameTime time)
|
private void OnUpdate(GameTime time)
|
||||||
{
|
{
|
||||||
long currentEpoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000)/10000000;
|
UpdateManager.UpdateProcedureCheck();
|
||||||
if (currentEpoch > updateEpoch)
|
|
||||||
{
|
|
||||||
CheckForUpdates();
|
|
||||||
}
|
|
||||||
for (int i = 0; i < Main.maxPlayers; i++)
|
for (int i = 0; i < Main.maxPlayers; i++)
|
||||||
{
|
{
|
||||||
if (Main.player[i].active == false)
|
if (Main.player[i].active == false)
|
||||||
|
|
@ -623,74 +610,6 @@ namespace TShockAPI
|
||||||
* Useful stuff:
|
* Useful stuff:
|
||||||
* */
|
* */
|
||||||
|
|
||||||
public static void CheckForUpdates()
|
|
||||||
{
|
|
||||||
if (serverOutOfDate)
|
|
||||||
return;
|
|
||||||
WebClient client = new WebClient();
|
|
||||||
client.Headers.Add("user-agent",
|
|
||||||
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string updateString = client.DownloadString("http://shankshock.com/tshock-update.txt");
|
|
||||||
string[] changes = updateString.Split(',');
|
|
||||||
Version updateVersion = new Version(Convert.ToInt32(changes[0]), Convert.ToInt32(changes[1]),
|
|
||||||
Convert.ToInt32(changes[2]), Convert.ToInt32(changes[3]));
|
|
||||||
if (VersionNum.CompareTo(updateVersion) < 0)
|
|
||||||
{
|
|
||||||
notifiedAdminOfVersionCheck = false;
|
|
||||||
Tools.Broadcast("A TShock update has been released. Tell an admin to join to see the full changelog.");
|
|
||||||
serverOutOfDate = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
FileTools.WriteError(e.Message);
|
|
||||||
}
|
|
||||||
notifiedAdminOfVersionCheck = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void ShowUpdateReminder(int ply)
|
|
||||||
{
|
|
||||||
if (!notifiedAdminOfVersionCheck || serverOutOfDate)
|
|
||||||
{
|
|
||||||
if (players[ply].group.HasPermission("maintenance"))
|
|
||||||
{
|
|
||||||
updateEpoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000)/10000000 + 600;
|
|
||||||
WebClient client = new WebClient();
|
|
||||||
client.Headers.Add("user-agent",
|
|
||||||
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
|
|
||||||
try
|
|
||||||
{
|
|
||||||
string updateString = client.DownloadString("http://shankshock.com/tshock-update.txt");
|
|
||||||
string[] changes = updateString.Split(',');
|
|
||||||
Version updateVersion = new Version(Convert.ToInt32(changes[0]), Convert.ToInt32(changes[1]),
|
|
||||||
Convert.ToInt32(changes[2]), Convert.ToInt32(changes[3]));
|
|
||||||
float[] color = { 255, 255, 000 };
|
|
||||||
if (VersionNum.CompareTo(updateVersion) < 0)
|
|
||||||
{
|
|
||||||
Tools.SendMessage(ply, "This server is out of date, to update now type /updatenow");
|
|
||||||
if (!updateCmd)
|
|
||||||
{
|
|
||||||
Commands.commands.Add(new Commands.Command("updatenow", "maintenance", Commands.UpdateNow));
|
|
||||||
updateCmd = true;
|
|
||||||
serverOutOfDate = true;
|
|
||||||
}
|
|
||||||
for (int i = 4; i <= changes.Length; i++)
|
|
||||||
{
|
|
||||||
Tools.SendMessage(ply, changes[i], color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
FileTools.WriteError(e.Message);
|
|
||||||
}
|
|
||||||
notifiedAdminOfVersionCheck = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void Teleport(int ply, int x, int y)
|
public static void Teleport(int ply, int x, int y)
|
||||||
{
|
{
|
||||||
Main.player[ply].position.X = x;
|
Main.player[ply].position.X = x;
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,7 @@
|
||||||
<Compile Include="TShock.cs" />
|
<Compile Include="TShock.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="TSPlayer.cs" />
|
<Compile Include="TSPlayer.cs" />
|
||||||
|
<Compile Include="UpdateManager.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="config\groups.txt" />
|
<None Include="config\groups.txt" />
|
||||||
|
|
|
||||||
80
TShockAPI/UpdateManager.cs
Normal file
80
TShockAPI/UpdateManager.cs
Normal file
|
|
@ -0,0 +1,80 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
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 = {};
|
||||||
|
/// <summary>
|
||||||
|
/// Checks to see if the server is out of date.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool ServerIsOutOfDate()
|
||||||
|
{
|
||||||
|
WebClient client = new WebClient();
|
||||||
|
client.Headers.Add("user-agent",
|
||||||
|
"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
string updateString = client.DownloadString(updateUrl);
|
||||||
|
string[] changes = updateString.Split(',');
|
||||||
|
Version updateVersion = new Version(Convert.ToInt32(changes[0]), Convert.ToInt32(changes[1]),
|
||||||
|
Convert.ToInt32(changes[2]), Convert.ToInt32(changes[3]));
|
||||||
|
if (TShock.VersionNum.CompareTo(updateVersion) < 0)
|
||||||
|
{
|
||||||
|
globalChanges = changes;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e)
|
||||||
|
{
|
||||||
|
FileTools.WriteError(e.Message);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void EnableUpdateCommand()
|
||||||
|
{
|
||||||
|
Commands.commands.Add(new Commands.Command("updatenow", "maintenance", Commands.UpdateNow));
|
||||||
|
updateCmd = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void NotifyAdministrators(string[] changes)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < ConfigurationManager.maxSlots; i++)
|
||||||
|
{
|
||||||
|
if (Terraria.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++)
|
||||||
|
{
|
||||||
|
Tools.SendMessage(i, changes[i], new float[] { 255, 0, 0 });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void UpdateProcedureCheck()
|
||||||
|
{
|
||||||
|
long currentEpoch = (DateTime.Now.ToUniversalTime().Ticks - 621355968000000000) / 10000000;
|
||||||
|
if (currentEpoch > UpdateManager.updateEpoch)
|
||||||
|
{
|
||||||
|
if (ServerIsOutOfDate())
|
||||||
|
{
|
||||||
|
EnableUpdateCommand();
|
||||||
|
NotifyAdministrators(globalChanges);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue