namespace MoonlightServers.Daemon.Models; public class ServerConsole { public event Func? OnOutput; public event Func? OnInput; public string[] Messages => GetMessages(); private readonly Queue MessageCache = new(); private int MaxMessagesInCache; public ServerConsole(int maxMessagesInCache) { MaxMessagesInCache = maxMessagesInCache; } public async Task WriteToOutput(string content) { lock (MessageCache) { MessageCache.Enqueue(content); if (MessageCache.Count > MaxMessagesInCache) MessageCache.Dequeue(); } if (OnOutput != null) { await OnOutput .Invoke(content) .ConfigureAwait(ConfigureAwaitOptions.SuppressThrowing); } } public async Task WriteToInput(string content) { if (OnInput != null) await OnInput.Invoke(content); } private string[] GetMessages() { lock (MessageCache) return MessageCache.ToArray(); } }