diff --git a/TShockAPI/StatTracker.cs b/TShockAPI/StatTracker.cs new file mode 100644 index 00000000..a413f8c8 --- /dev/null +++ b/TShockAPI/StatTracker.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Net; +using System.Threading; +using System.IO; +using System.Web; + +namespace TShockAPI +{ + public class StatTracker + { + + public StatTracker() + { + ThreadPool.QueueUserWorkItem(SendUpdate); + } + + private HttpWebResponse GetResponseNoException(HttpWebRequest req) + { + try + { + return (HttpWebResponse)req.GetResponse(); + } + catch (WebException we) + { + var resp = we.Response as HttpWebResponse; + if (resp == null) + throw; + return resp; + } + } + + private void SendUpdate(object info) + { + Thread.Sleep(1000*60*15); + var data = new JsonData + { + port = Terraria.Netplay.serverPort, + currentPlayers = TShock.Utils.ActivePlayers(), + maxPlayers = TShock.Config.MaxSlots, + systemRam = 2097152, + systemCPUClock = 2516582, + version = TShock.VersionNum.ToString(), + terrariaVersion = Terraria.Main.versionNumber2 + }; + + var serialized = Newtonsoft.Json.JsonConvert.SerializeObject(data); + var encoded = HttpUtility.UrlEncode(serialized); + var uri = String.Format("http://127.0.0.1:8000?data={0}", encoded); + var client = (HttpWebRequest)WebRequest.Create(uri); + try + { + using (var resp = GetResponseNoException(client)) + { + if (resp.StatusCode != HttpStatusCode.OK) + { + throw new IOException("Server did not respond with an OK."); + } + } + } + catch (Exception e) + { + Console.WriteLine("StatTracker has failed: {0}", e.Message); + return; + } + + ThreadPool.QueueUserWorkItem(SendUpdate); + } + } + + public struct JsonData + { + public int port; + public int currentPlayers; + public int maxPlayers; + public int systemRam; + public int systemCPUClock; + public string version; + public string terrariaVersion; + } +} diff --git a/TShockAPI/TShock.cs b/TShockAPI/TShock.cs index d215df12..99fb4c33 100755 --- a/TShockAPI/TShock.cs +++ b/TShockAPI/TShock.cs @@ -70,6 +70,7 @@ namespace TShockAPI public static SecureRest RestApi; public static RestManager RestManager; public static Utils Utils = Utils.Instance; + public static StatTracker StatTracker; /// /// Used for implementing REST Tokens prior to the REST system starting up. /// @@ -596,8 +597,6 @@ namespace TShockAPI Lighting.lightMode = 2; FixChestStacks(); - - } private void FixChestStacks() diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index 6732d26f..01a31456 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -68,6 +68,7 @@ + False .exe @@ -125,6 +126,7 @@ + @@ -176,7 +178,7 @@ - +