From bef9d168883632035027a696aa6190405593c5fe Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Wed, 12 Jan 2022 19:03:51 +0100 Subject: [PATCH] Synchronous logging Changelog: fixed --- MinecraftDiscordBot/ConnectedComputer.cs | 8 +++--- MinecraftDiscordBot/Program.cs | 31 +++++++++++++----------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/MinecraftDiscordBot/ConnectedComputer.cs b/MinecraftDiscordBot/ConnectedComputer.cs index 1566b4c..d99d228 100644 --- a/MinecraftDiscordBot/ConnectedComputer.cs +++ b/MinecraftDiscordBot/ConnectedComputer.cs @@ -19,7 +19,7 @@ public class ConnectedComputer { IChunkWaiter? waiter; lock (_syncRoot) { if (!_waits.TryGetValue(msg.AnswerId, out waiter)) { - Program.LogWarning("Socket", $"Invalid wait id '{msg.AnswerId}'!"); + Program.LogWarningAsync("Socket", $"Invalid wait id '{msg.AnswerId}'!"); return; } } @@ -62,12 +62,12 @@ public class ConnectedComputer { lock (_syncRoot) { if (_chunks is null) _chunks = new string[totalChunks]; else if (_chunks.Length != totalChunks) { - Program.LogError(Program.WebSocketSource, new InvalidOperationException("Different numbers of chunks in same message ID!")); + Program.LogErrorAsync(Program.WebSocketSource, new InvalidOperationException("Different numbers of chunks in same message ID!")); return; } ref string? chunk = ref _chunks[chunkId - 1]; // Lua 1-indexed if (chunk is not null) { - Program.LogError(Program.WebSocketSource, new InvalidOperationException($"Chunk with ID {chunkId} was already received!")); + Program.LogErrorAsync(Program.WebSocketSource, new InvalidOperationException($"Chunk with ID {chunkId} was already received!")); return; } chunk = value; @@ -86,7 +86,7 @@ public class ConnectedComputer { var id = _rnd.Next(); if (!_waits.ContainsKey(id)) return id; - Program.LogWarning(Program.WebSocketSource, $"Could not get a free ID after {++attempts} attempts!"); + Program.LogWarningAsync(Program.WebSocketSource, $"Could not get a free ID after {++attempts} attempts!"); } } diff --git a/MinecraftDiscordBot/Program.cs b/MinecraftDiscordBot/Program.cs index 8c01e7d..bf98a91 100644 --- a/MinecraftDiscordBot/Program.cs +++ b/MinecraftDiscordBot/Program.cs @@ -83,7 +83,7 @@ public class Program : IDisposable { private async Task HasValidChannels() { if (await GetValidChannels(_whitelistedChannels).ToArrayAsync() is not { Length: > 0 } channels) { - await LogError(BotSource, new InvalidOperationException("No valid textchannel was whitelisted!")); + await LogErrorAsync(BotSource, new InvalidOperationException("No valid textchannel was whitelisted!")); return false; } _channels = channels; @@ -100,16 +100,16 @@ public class Program : IDisposable { foreach (var channelId in ids) { var channel = await _client.GetChannelAsync(channelId); if (channel is not ITextChannel textChannel) { - if (channel is null) await LogWarning(BotSource, $"Channel with id [{channelId}] does not exist!"); - else await LogWarning(BotSource, $"Channel is not a text channels and will not be used: {channel.Name} [{channel.Id}]!"); + if (channel is null) await LogWarningAsync(BotSource, $"Channel with id [{channelId}] does not exist!"); + else await LogWarningAsync(BotSource, $"Channel is not a text channels and will not be used: {channel.Name} [{channel.Id}]!"); continue; } if (textChannel.Guild is RestGuild guild) { await guild.UpdateAsync(); - await LogInfo(BotSource, $"Whitelisted in channel: {channel.Name} [{channel.Id}] on server {guild.Name} [{guild.Id}]"); + await LogInfoAsync(BotSource, $"Whitelisted in channel: {channel.Name} [{channel.Id}] on server {guild.Name} [{guild.Id}]"); } else { - await LogWarning(BotSource, $"Whitelisted in channel: {channel.Name} [{channel.Id}] on unknown server!"); + await LogWarningAsync(BotSource, $"Whitelisted in channel: {channel.Name} [{channel.Id}] on unknown server!"); } yield return textChannel; } @@ -124,9 +124,9 @@ public class Program : IDisposable { string role => throw new ArgumentException($"Invalid role '{role}'!") }; AddComputerSocket(socket, pc); - await LogInfo(WebSocketSource, $"[{socket.ConnectionInfo.Id}] Presented capability as {pc.GetType().Name}"); + await LogInfoAsync(WebSocketSource, $"[{socket.ConnectionInfo.Id}] Presented capability as {pc.GetType().Name}"); } catch (ArgumentException e) { - await LogError(WebSocketSource, e); + await LogErrorAsync(WebSocketSource, e); } } @@ -140,11 +140,11 @@ public class Program : IDisposable { private async Task SocketClosed(IWebSocketConnection socket) { RemoveComputerSocket(socket); - await LogInfo(WebSocketSource, $"[{socket.ConnectionInfo.Id}] Client disconnected!"); + await LogInfoAsync(WebSocketSource, $"[{socket.ConnectionInfo.Id}] Client disconnected!"); } private static async Task SocketOpened(IWebSocketConnection socket) - => await LogInfo(WebSocketSource, $"[{socket.ConnectionInfo.Id}] Client connected from {socket.ConnectionInfo.ClientIpAddress}:{socket.ConnectionInfo.ClientPort}!"); + => await LogInfoAsync(WebSocketSource, $"[{socket.ConnectionInfo.Id}] Client connected from {socket.ConnectionInfo.ClientIpAddress}:{socket.ConnectionInfo.ClientPort}!"); private async Task DiscordMessageReceived(SocketMessage arg, int timeout = 10000) { if (arg is not SocketUserMessage message) return; @@ -159,7 +159,7 @@ public class Program : IDisposable { return; } - await LogInfo("Discord", $"[{arg.Author.Username}] {arg.Content}"); + await LogInfoAsync("Discord", $"[{arg.Author.Username}] {arg.Content}"); // TODO: Relay Message to Chat Receiver } @@ -183,16 +183,19 @@ public class Program : IDisposable { private bool IsChannelWhitelisted(ISocketMessageChannel channel) => _whitelistedChannels.Contains(channel.Id); - public static ConfiguredTaskAwaitable LogInfo(string source, string message) => LogAsync(new(LogSeverity.Info, source, message)).ConfigureAwait(false); - public static ConfiguredTaskAwaitable LogWarning(string source, string message) => LogAsync(new(LogSeverity.Warning, source, message)).ConfigureAwait(false); - public static ConfiguredTaskAwaitable LogError(string source, Exception exception) => LogAsync(new(LogSeverity.Error, source, exception?.Message, exception)).ConfigureAwait(false); + public static ConfiguredTaskAwaitable LogInfoAsync(string source, string message) => LogAsync(new(LogSeverity.Info, source, message)).ConfigureAwait(false); + public static ConfiguredTaskAwaitable LogWarningAsync(string source, string message) => LogAsync(new(LogSeverity.Warning, source, message)).ConfigureAwait(false); + public static ConfiguredTaskAwaitable LogErrorAsync(string source, Exception exception) => LogAsync(new(LogSeverity.Error, source, exception?.Message, exception)).ConfigureAwait(false); + public static void LogInfo(string source, string message) => Log(new(LogSeverity.Info, source, message)); + public static void LogWarning(string source, string message) => Log(new(LogSeverity.Warning, source, message)); + public static void LogError(string source, Exception exception) => Log(new(LogSeverity.Error, source, exception?.Message, exception)); private static async Task LogAsync(LogMessage msg) { Log(msg); await Task.CompletedTask; } - private static void Log(LogMessage msg) { + public static void Log(LogMessage msg) { lock (LogLock) Console.WriteLine(msg.ToString()); }