Add @ijwu's changes + add /proc/meminfo trick for linux

This commit is contained in:
quake1337 2017-09-20 09:27:28 +02:00
parent 68437f0a22
commit e6ec63a90e
2 changed files with 39 additions and 5 deletions

View file

@ -27,7 +27,8 @@ using System.Runtime.InteropServices;
using System.Net.Http; using System.Net.Http;
using System.Threading.Tasks; using System.Threading.Tasks;
using TShockAPI.Extensions; using TShockAPI.Extensions;
using System.IO;
using System.Text.RegularExpressions;
namespace TShockAPI namespace TShockAPI
{ {
@ -176,7 +177,38 @@ namespace TShockAPI
} }
return plugins; return plugins;
} }
public long GetFreeSystemRam(bool mono)
{
if (mono)
{
//Temporary in case mono won't work
if (File.Exists("/proc/meminfo"))
{
var l = File.ReadAllLines("/proc/meminfo");
foreach (string s in l)
{
if (s.StartsWith("MemFree:"))
{
var m = Regex.Match(s, "MemFree:(\\s*)(\\d*) kB");
if (m.Success)
{
long val;
if (long.TryParse(m.Groups[2].Value, out val))
{
return val / 1024;
}
}
}
}
}
return -1;
}
else
{
var pc = new PerformanceCounter("Memory", "Available MBytes");
return pc.RawValue;
}
}
public long GetTotalSystemRam(bool isMono) public long GetTotalSystemRam(bool isMono)
{ {
if (totalMem != 0) if (totalMem != 0)

View file

@ -329,10 +329,12 @@ namespace TShockAPI
Log.ConsoleInfo("TShock {0} ({1}) now running.", Version, VersionCodename); Log.ConsoleInfo("TShock {0} ({1}) now running.", Version, VersionCodename);
if (StatTracker.GetTotalSystemRam(ServerApi.RunningMono) < 2) var systemRam = StatTracker.GetFreeSystemRam(ServerApi.RunningMono);
if (systemRam > -1 && systemRam < 2048)
{ {
Log.ConsoleInfo("This machine has less than 2 gigabytes of RAM installed. Be advised that it might not be enough to run TShock."); Log.ConsoleError("This machine has less than 2 gigabytes of RAM free. Be advised that it might not be enough to run TShock.");
} }
ServerApi.Hooks.GamePostInitialize.Register(this, OnPostInit); ServerApi.Hooks.GamePostInitialize.Register(this, OnPostInit);
ServerApi.Hooks.GameUpdate.Register(this, OnUpdate); ServerApi.Hooks.GameUpdate.Register(this, OnUpdate);
ServerApi.Hooks.GameHardmodeTileUpdate.Register(this, OnHardUpdate); ServerApi.Hooks.GameHardmodeTileUpdate.Register(this, OnHardUpdate);