Move logging stuff to a separate file
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,18 +20,6 @@ namespace Barotrauma
|
|||||||
public LuaCsSetupConfig() { }
|
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
|
partial class LuaCsSetup
|
||||||
{
|
{
|
||||||
public const string LuaSetupFile = "Lua/LuaSetup.lua";
|
public const string LuaSetupFile = "Lua/LuaSetup.lua";
|
||||||
@@ -70,6 +58,9 @@ namespace Barotrauma
|
|||||||
public CsScriptLoader CsScriptLoader { get; private set; }
|
public CsScriptLoader CsScriptLoader { get; private set; }
|
||||||
public LuaCsSetupConfig Config { get; private set; }
|
public LuaCsSetupConfig Config { get; private set; }
|
||||||
|
|
||||||
|
internal LuaCsExceptionHandler ExceptionHandler { get; set; }
|
||||||
|
internal LuaCsMessageLogger MessageLogger { get; set; }
|
||||||
|
|
||||||
public LuaCsSetup()
|
public LuaCsSetup()
|
||||||
{
|
{
|
||||||
MessageLogger = DefaultMessageLogger;
|
MessageLogger = DefaultMessageLogger;
|
||||||
@@ -144,142 +135,11 @@ namespace Barotrauma
|
|||||||
return null;
|
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)
|
internal void HandleException(Exception ex, LuaCsMessageOrigin origin)
|
||||||
{
|
{
|
||||||
this.ExceptionHandler?.Invoke(ex, 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)
|
private DynValue DoFile(string file, Table globalContext = null, string codeStringFriendly = null)
|
||||||
{
|
{
|
||||||
if (!LuaCsFile.CanReadFromPath(file))
|
if (!LuaCsFile.CanReadFromPath(file))
|
||||||
|
|||||||
Reference in New Issue
Block a user