using RobotNet10.ScriptEngine.HubContexts; namespace RobotNet10.ScriptEngine.Models; public class LoggerMission(Guid id, ConsoleHubContext hubContext) : RobotNet10.Script.ILogger { private string log = ""; private readonly Mutex mutexLog = new(); public string GetLog() { mutexLog.WaitOne(); var result = log; log = ""; // Clear log after reading mutexLog.ReleaseMutex(); return result; } public void LogError(string message) { hubContext.LogErrorToMission(id, message); mutexLog.WaitOne(); // Format: [LEVEL] YYYY-MM-DDTHH:mm:ss.fffZ | message log += $"[ERROR] {DateTime.UtcNow:yyyy-MM-ddTHH:mm:ss.fffZ} | {message}{Environment.NewLine}"; mutexLog.ReleaseMutex(); } public void LogInfo(string message) { hubContext.LogInfoToMission(id, message); mutexLog.WaitOne(); // Format: [LEVEL] YYYY-MM-DDTHH:mm:ss.fffZ | message log += $"[INFO] {DateTime.UtcNow:yyyy-MM-ddTHH:mm:ss.fffZ} | {message}{Environment.NewLine}"; mutexLog.ReleaseMutex(); } public void LogWarning(string message) { hubContext.LogWarningToMission(id, message); mutexLog.WaitOne(); // Format: [LEVEL] YYYY-MM-DDTHH:mm:ss.fffZ | message log += $"[WARN] {DateTime.UtcNow:yyyy-MM-ddTHH:mm:ss.fffZ} | {message}{Environment.NewLine}"; mutexLog.ReleaseMutex(); } }