From d88a6b5ef09f920bc8b509be43ae8863ce332dec Mon Sep 17 00:00:00 2001 From: EvilFactory Date: Fri, 28 Oct 2022 13:19:23 -0300 Subject: [PATCH] Move logging stuff to a separate file --- .../SharedSource/LuaCs/LuaCsLogger.cs | 146 ++++++++++++++++++ .../SharedSource/LuaCs/LuaCsSetup.cs | 146 +----------------- 2 files changed, 149 insertions(+), 143 deletions(-) create mode 100644 Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsLogger.cs diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsLogger.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsLogger.cs new file mode 100644 index 000000000..7f216cef0 --- /dev/null +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsLogger.cs @@ -0,0 +1,146 @@ +using System; +using Barotrauma.Networking; +using Microsoft.Xna.Framework; +using MoonSharp.Interpreter; + +namespace Barotrauma +{ + internal enum LuaCsMessageOrigin + { + LuaCs, + Unknown, + LuaMod, + CSharpMod, + } + + internal delegate void LuaCsMessageLogger(string prefix, object o); + internal delegate void LuaCsExceptionHandler(Exception ex, LuaCsMessageOrigin origin); + + // TODO: make it a separate class + partial class LuaCsSetup + { + +#if SERVER + private const string LOG_PREFIX = "SV"; +#else + private const string LOG_PREFIX = "CL"; +#endif + public static void PrintLuaError(object o) => PrintErrorBase($"[{LOG_PREFIX} LUA ERROR] ", o, "nil"); + public static void PrintCsError(object o) => PrintErrorBase($"[{LOG_PREFIX} CS ERROR] ", o, "Null"); + public static void PrintGenericError(object o) => PrintErrorBase($"[{LOG_PREFIX} ERROR] ", o, "Null"); + + + private static void PrintErrorBase(string prefix, object message, string empty) + { + message ??= empty; + var str = message.ToString(); + + for (int i = 0; i < str.Length; i += 1024) + { + var subStr = str.Substring(i, Math.Min(1024, str.Length - i)); + + var errorMsg = subStr; + if (i == 0) errorMsg = prefix + errorMsg; + + DebugConsole.ThrowError(errorMsg); + +#if SERVER + if (GameMain.Server != null) + { + foreach (var c in GameMain.Server.ConnectedClients) + { + GameMain.Server.SendDirectChatMessage(ChatMessage.Create("", errorMsg, ChatMessageType.Console, null, textColor: Color.Red), c); + } + + GameServer.Log(errorMsg, ServerLog.MessageType.Error); + } +#endif + } + } + + // TODO: deprecate this (in an effort to get rid of as much global state as possible) + public void PrintError(object o, LuaCsMessageOrigin origin) + { + switch (origin) + { + case LuaCsMessageOrigin.LuaCs: + PrintGenericError(o); + break; + case LuaCsMessageOrigin.LuaMod: + PrintLuaError(o); + break; + case LuaCsMessageOrigin.CSharpMod: + PrintCsError(o); + break; + } + } + + private void DefaultExceptionHandler(Exception ex, LuaCsMessageOrigin origin) + { + switch (ex) + { + case NetRuntimeException netRuntimeException: + if (netRuntimeException.DecoratedMessage == null) + { + PrintError(netRuntimeException, origin); + } + else + { + // FIXME: netRuntimeException.ToString() doesn't print the InnerException's stack trace... + PrintError($"{netRuntimeException.DecoratedMessage}: {netRuntimeException}", origin); + } + break; + case InterpreterException interpreterException: + if (interpreterException.DecoratedMessage == null) + { + PrintError(interpreterException, origin); + } + else + { + PrintError(interpreterException.DecoratedMessage, origin); + } + break; + default: + var msg = ex.StackTrace != null + ? ex.ToString() + : $"{ex}\n{Environment.StackTrace}"; + PrintError(msg, origin); + break; + } + } + + private static void DefaultMessageLogger(string prefix, object o) + { + var message = o.ToString(); + for (int i = 0; i < message.Length; i += 1024) + { + var subStr = message.Substring(i, Math.Min(1024, message.Length - i)); + +#if SERVER + if (GameMain.Server != null) + { + foreach (var c in GameMain.Server.ConnectedClients) + { + GameMain.Server.SendDirectChatMessage(ChatMessage.Create("", subStr, ChatMessageType.Console, null, textColor: Color.MediumPurple), c); + } + + GameServer.Log(prefix + subStr, ServerLog.MessageType.ServerMessage); + } +#endif + } + +#if SERVER + DebugConsole.NewMessage(message.ToString(), Color.MediumPurple); +#else + DebugConsole.NewMessage(message.ToString(), Color.Purple); +#endif + } + + private void PrintMessageBase(string prefix, object message, string empty) => MessageLogger?.Invoke(prefix, message ?? empty); + internal void PrintMessage(object message) => PrintMessageBase("[LuaCs] ", message, "nil"); + + // TODO: deprecate this (in an effort to get rid of as much global state as possible) + public static void PrintCsMessage(object message) => GameMain.LuaCs.PrintMessage(message); + + } +} diff --git a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs index 81cba34a3..2ac23b482 100644 --- a/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs +++ b/Barotrauma/BarotraumaShared/SharedSource/LuaCs/LuaCsSetup.cs @@ -20,18 +20,6 @@ namespace Barotrauma public LuaCsSetupConfig() { } } - internal delegate void LuaCsMessageLogger(string prefix, object o); - - internal delegate void LuaCsExceptionHandler(Exception ex, LuaCsMessageOrigin origin); - - internal enum LuaCsMessageOrigin - { - LuaCs, - Unknown, - LuaMod, - CSharpMod, - } - partial class LuaCsSetup { public const string LuaSetupFile = "Lua/LuaSetup.lua"; @@ -70,6 +58,9 @@ namespace Barotrauma public CsScriptLoader CsScriptLoader { get; private set; } public LuaCsSetupConfig Config { get; private set; } + internal LuaCsExceptionHandler ExceptionHandler { get; set; } + internal LuaCsMessageLogger MessageLogger { get; set; } + public LuaCsSetup() { MessageLogger = DefaultMessageLogger; @@ -144,142 +135,11 @@ namespace Barotrauma return null; } - private void DefaultExceptionHandler(Exception ex, LuaCsMessageOrigin origin) - { - switch (ex) - { - case NetRuntimeException netRuntimeException: - if (netRuntimeException.DecoratedMessage == null) - { - PrintError(netRuntimeException, origin); - } - else - { - // FIXME: netRuntimeException.ToString() doesn't print the InnerException's stack trace... - PrintError($"{netRuntimeException.DecoratedMessage}: {netRuntimeException}", origin); - } - break; - case InterpreterException interpreterException: - if (interpreterException.DecoratedMessage == null) - { - PrintError(interpreterException, origin); - } - else - { - PrintError(interpreterException.DecoratedMessage, origin); - } - break; - default: - var msg = ex.StackTrace != null - ? ex.ToString() - : $"{ex}\n{Environment.StackTrace}"; - PrintError(msg, origin); - break; - } - } - - internal LuaCsExceptionHandler ExceptionHandler { get; set; } - - internal void HandleException(Exception ex, LuaCsMessageOrigin origin) { this.ExceptionHandler?.Invoke(ex, origin); } - private static void PrintErrorBase(string prefix, object message, string empty) - { - message ??= empty; - var str = message.ToString(); - - for (int i = 0; i < str.Length; i += 1024) - { - var subStr = str.Substring(i, Math.Min(1024, str.Length - i)); - - var errorMsg = subStr; - if (i == 0) errorMsg = prefix + errorMsg; - - DebugConsole.ThrowError(errorMsg); - -#if SERVER - if (GameMain.Server != null) - { - foreach (var c in GameMain.Server.ConnectedClients) - { - GameMain.Server.SendDirectChatMessage(ChatMessage.Create("", errorMsg, ChatMessageType.Console, null, textColor: Color.Red), c); - } - - GameServer.Log(errorMsg, ServerLog.MessageType.Error); - } -#endif - } - } - -#if SERVER - private const string LOG_PREFIX = "SV"; -#else - private const string LOG_PREFIX = "CL"; -#endif - - // TODO: deprecate this (in an effort to get rid of as much global state as possible) - public void PrintError(object o, LuaCsMessageOrigin origin) - { - switch (origin) - { - case LuaCsMessageOrigin.LuaCs: - PrintGenericError(o); - break; - case LuaCsMessageOrigin.LuaMod: - PrintLuaError(o); - break; - case LuaCsMessageOrigin.CSharpMod: - PrintCsError(o); - break; - } - } - - private static void PrintLuaError(object o) => PrintErrorBase($"[{LOG_PREFIX} LUA ERROR] ", o, "nil"); - - // TODO: deprecate this - // XXX: this is only public so that we don't break backward compat with C# mods - public static void PrintCsError(object o) => PrintErrorBase($"[{LOG_PREFIX} CS ERROR] ", o, "Null"); - - private static void PrintGenericError(object o) => PrintErrorBase($"[{LOG_PREFIX} ERROR] ", o, "Null"); - - internal LuaCsMessageLogger MessageLogger { get; set; } - - private static void DefaultMessageLogger(string prefix, object o) - { - var message = o.ToString(); - for (int i = 0; i < message.Length; i += 1024) - { - var subStr = message.Substring(i, Math.Min(1024, message.Length - i)); - -#if SERVER - if (GameMain.Server != null) - { - foreach (var c in GameMain.Server.ConnectedClients) - { - GameMain.Server.SendDirectChatMessage(ChatMessage.Create("", subStr, ChatMessageType.Console, null, textColor: Color.MediumPurple), c); - } - - GameServer.Log(prefix + subStr, ServerLog.MessageType.ServerMessage); - } -#endif - } - -#if SERVER - DebugConsole.NewMessage(message.ToString(), Color.MediumPurple); -#else - DebugConsole.NewMessage(message.ToString(), Color.Purple); -#endif - } - - private void PrintMessageBase(string prefix, object message, string empty) => MessageLogger?.Invoke(prefix, message ?? empty); - internal void PrintMessage(object message) => PrintMessageBase("[LuaCs] ", message, "nil"); - - // TODO: deprecate this (in an effort to get rid of as much global state as possible) - public static void PrintCsMessage(object message) => GameMain.LuaCs.PrintMessage(message); - private DynValue DoFile(string file, Table globalContext = null, string codeStringFriendly = null) { if (!LuaCsFile.CanReadFromPath(file))