Truncate log in UI, add ability to cancel restart

This commit is contained in:
John Gross
2018-04-12 09:51:52 -07:00
parent d59ef20f72
commit d87cc7f1e7
3 changed files with 29 additions and 4 deletions

View File

@@ -18,6 +18,7 @@ namespace Torch.Server
{ {
private FlowDocument _document = new FlowDocument { Background = new SolidColorBrush(Colors.Black) }; private FlowDocument _document = new FlowDocument { Background = new SolidColorBrush(Colors.Black) };
private readonly Paragraph _paragraph = new Paragraph(); private readonly Paragraph _paragraph = new Paragraph();
private readonly int _maxLines = 500;
public FlowDocument Document => _document; public FlowDocument Document => _document;
@@ -33,6 +34,10 @@ namespace Torch.Server
{ {
var message = $"{Layout.Render(logEvent)}\n"; var message = $"{Layout.Render(logEvent)}\n";
_paragraph.Inlines.Add(new Run(message) {Foreground = LogLevelColors[logEvent.Level]}); _paragraph.Inlines.Add(new Run(message) {Foreground = LogLevelColors[logEvent.Level]});
// A massive paragraph slows the UI down
if (_paragraph.Inlines.Count > _maxLines)
_paragraph.Inlines.Remove(_paragraph.Inlines.FirstInline);
}); });
} }

View File

@@ -133,10 +133,6 @@ namespace Torch.Server.Managers
return; return;
} }
var sb = new StringBuilder();
foreach (var mod in checkpoint.Mods)
sb.AppendLine(mod.PublishedFileId.ToString());
DedicatedConfig.Mods = checkpoint.Mods.Select(x => x.PublishedFileId).ToList(); DedicatedConfig.Mods = checkpoint.Mods.Select(x => x.PublishedFileId).ToList();
Log.Debug("Loaded mod list from world"); Log.Debug("Loaded mod list from world");

View File

@@ -8,6 +8,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Timers; using System.Timers;
using Sandbox.Game.Multiplayer;
using Sandbox.ModAPI; using Sandbox.ModAPI;
using SteamSDK; using SteamSDK;
using Torch; using Torch;
@@ -22,6 +23,9 @@ namespace Torch.Commands
{ {
public class TorchCommands : CommandModule public class TorchCommands : CommandModule
{ {
private static bool _restartPending = false;
private static bool _cancelRestart = false;
[Command("whatsmyip")] [Command("whatsmyip")]
[Permission(MyPromoteLevel.None)] [Permission(MyPromoteLevel.None)]
public void GetIP(ulong steamId = 0) public void GetIP(ulong steamId = 0)
@@ -148,6 +152,7 @@ namespace Torch.Commands
[Command("restart", "Restarts the server.")] [Command("restart", "Restarts the server.")]
public void Restart(int countdownSeconds = 10, bool save = true) public void Restart(int countdownSeconds = 10, bool save = true)
{ {
_restartPending = true;
Task.Run(() => Task.Run(() =>
{ {
var countdown = RestartCountdown(countdownSeconds, save).GetEnumerator(); var countdown = RestartCountdown(countdownSeconds, save).GetEnumerator();
@@ -158,10 +163,29 @@ namespace Torch.Commands
}); });
} }
[Command("restart cancel", "Cancel a pending restart.")]
public void CancelRestart()
{
if (_restartPending)
_cancelRestart = true;
else
Context.Respond("A restart is not pending.");
}
private IEnumerable RestartCountdown(int countdown, bool save) private IEnumerable RestartCountdown(int countdown, bool save)
{ {
for (var i = countdown; i >= 0; i--) for (var i = countdown; i >= 0; i--)
{ {
if (_cancelRestart)
{
Context.Torch.CurrentSession.Managers.GetManager<IChatManagerClient>()
.SendMessageAsSelf($"Restart cancelled.");
_restartPending = false;
_cancelRestart = false;
yield break;
}
if (i >= 60 && i % 60 == 0) if (i >= 60 && i % 60 == 0)
{ {
Context.Torch.CurrentSession.Managers.GetManager<IChatManagerClient>() Context.Torch.CurrentSession.Managers.GetManager<IChatManagerClient>()