Implemented more life cycle handling. Added support for rootless environments

This commit is contained in:
2024-12-27 20:08:05 +01:00
parent 039db22207
commit 92e9f42fbc
21 changed files with 738 additions and 20 deletions

View File

@@ -0,0 +1,41 @@
namespace MoonlightServers.Daemon.Models;
public class ServerConsole
{
public event Func<string, Task> OnOutput;
public event Func<string, Task> OnInput;
public string[] Messages => GetMessages();
private readonly Queue<string> MessageCache = new();
private const int MaxMessagesInCache = 250; //TODO: Config
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();
}
}