Introduce the LuaCsLogger class and make everything use that instead
This commit is contained in:
@@ -3314,7 +3314,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch(Exception ex)
|
catch(Exception ex)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.HandleException(ex, LuaCsMessageOrigin.LuaMod);
|
LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.LuaMod);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|||||||
@@ -1251,7 +1251,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.HandleException(ex, LuaCsMessageOrigin.LuaMod);
|
LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.LuaMod);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
commands.Add(new Command("cs", "cs: Runs a string.", (string[] args) =>
|
commands.Add(new Command("cs", "cs: Runs a string.", (string[] args) =>
|
||||||
|
|||||||
@@ -62,13 +62,13 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (UnauthorizedAccessException e)
|
catch (UnauthorizedAccessException e)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.PrintError("You seem to already have Client Side Lua installed, if you are trying to reinstall, make sure uninstall it first (mainmenu button located top left).", LuaCsMessageOrigin.LuaCs);
|
LuaCsLogger.LogError("You seem to already have Client Side Lua installed, if you are trying to reinstall, make sure uninstall it first (mainmenu button located top left).", LuaCsMessageOrigin.LuaCs);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.LuaCs);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.LuaCs);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.CSharpMod);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.CSharpMod);
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadedMods.Remove(this);
|
LoadedMods.Remove(this);
|
||||||
|
|||||||
@@ -52,12 +52,12 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (rtValue == RunType.Standard && isEnabled)
|
if (rtValue == RunType.Standard && isEnabled)
|
||||||
{
|
{
|
||||||
LuaCsSetup.PrintCsMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Standard)");
|
LuaCsLogger.LogMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Standard)");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (rtValue == RunType.Forced)
|
else if (rtValue == RunType.Forced)
|
||||||
{
|
{
|
||||||
LuaCsSetup.PrintCsMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Forced)");
|
LuaCsLogger.LogMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Forced)");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (rtValue == RunType.None)
|
else if (rtValue == RunType.None)
|
||||||
@@ -71,7 +71,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (isEnabled)
|
if (isEnabled)
|
||||||
{
|
{
|
||||||
LuaCsSetup.PrintCsMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Assumed)");
|
LuaCsLogger.LogMessage($"Added {cp.Name} {cp.ModVersion} to Cs compilation. (Assumed)");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -160,7 +160,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LuaCsSetup.PrintCsError("Error loading '" + folder + "':\n" + ex.Message + "\n" + ex.StackTrace);
|
LuaCsLogger.LogError("Error loading '" + folder + "':\n" + ex.Message + "\n" + ex.StackTrace, LuaCsMessageOrigin.CSharpMod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,7 +189,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
errStr += $"\n{diagnostic}";
|
errStr += $"\n{diagnostic}";
|
||||||
}
|
}
|
||||||
LuaCsSetup.PrintCsError(errStr);
|
LuaCsLogger.LogError(errStr, LuaCsMessageOrigin.CSharpMod);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -207,7 +207,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (ReflectionTypeLoadException re)
|
catch (ReflectionTypeLoadException re)
|
||||||
{
|
{
|
||||||
LuaCsSetup.PrintCsError($"Unable to load CsMod Types. {re.Message}");
|
LuaCsLogger.LogError($"Unable to load CsMod Types. {re.Message}", LuaCsMessageOrigin.CSharpMod);
|
||||||
throw re;
|
throw re;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
errStr += $"\n{idx}: {err}";
|
errStr += $"\n{idx}: {err}";
|
||||||
}
|
}
|
||||||
LuaCsSetup.PrintCsError(errStr);
|
LuaCsLogger.LogError(errStr, LuaCsMessageOrigin.CSharpMod);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -102,16 +102,16 @@ namespace Barotrauma
|
|||||||
UserData.UnregisterType(type, true);
|
UserData.UnregisterType(type, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else { LuaCsSetup.PrintCsError("Script Error - no run method detected"); }
|
else { LuaCsLogger.LogError("Script Error - no run method detected", LuaCsMessageOrigin.CSharpMod); }
|
||||||
}
|
}
|
||||||
else { LuaCsSetup.PrintCsError("Script Error - no runner class detected"); }
|
else { LuaCsLogger.LogError("Script Error - no runner class detected", LuaCsMessageOrigin.CSharpMod); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Unload();
|
Unload();
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
LuaCsSetup.PrintCsError("Error running script:\n" + ex.Message + "\n" + ex.StackTrace);
|
LuaCsLogger.LogError("Error running script:\n" + ex.Message + "\n" + ex.StackTrace, LuaCsMessageOrigin.CSharpMod);
|
||||||
}
|
}
|
||||||
|
|
||||||
return scriptResilt;
|
return scriptResilt;
|
||||||
|
|||||||
@@ -814,8 +814,8 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
argsSb.Append(arg + " ");
|
argsSb.Append(arg + " ");
|
||||||
}
|
}
|
||||||
luaCs.PrintError($"Error in Hook '{name}'->'{key}', with args '{argsSb}':\n{e}", LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.LogError($"Error in Hook '{name}'->'{key}', with args '{argsSb}':\n{e}", LuaCsMessageOrigin.Unknown);
|
||||||
luaCs.HandleException(e, LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.Unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1177,10 +1177,9 @@ namespace Barotrauma
|
|||||||
il.If((il) =>
|
il.If((il) =>
|
||||||
{
|
{
|
||||||
// IL: LuaCs.HandleException(exception, LuaCsMessageOrigin.LuaMod);
|
// IL: LuaCs.HandleException(exception, LuaCsMessageOrigin.LuaMod);
|
||||||
il.LoadField(luaCsField);
|
|
||||||
il.LoadLocal(exception);
|
il.LoadLocal(exception);
|
||||||
il.LoadConstant((int)LuaCsMessageOrigin.LuaMod); // underlying enum type is int
|
il.LoadConstant((int)LuaCsMessageOrigin.LuaMod); // underlying enum type is int
|
||||||
il.Call(typeof(LuaCsSetup).GetMethod(nameof(LuaCsSetup.HandleException), BindingFlags.NonPublic | BindingFlags.Instance));
|
il.Call(typeof(LuaCsLogger).GetMethod(nameof(LuaCsLogger.HandleException), BindingFlags.Public | BindingFlags.Static));
|
||||||
});
|
});
|
||||||
|
|
||||||
il.EndCatchBlock(catchBlock);
|
il.EndCatchBlock(catchBlock);
|
||||||
@@ -1227,7 +1226,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (methodPatches.Prefixes.Remove(identifier))
|
if (methodPatches.Prefixes.Remove(identifier))
|
||||||
{
|
{
|
||||||
luaCs.PrintMessage($"Replacing existing prefix: {identifier}");
|
LuaCsLogger.LogMessage($"Replacing existing prefix: {identifier}");
|
||||||
}
|
}
|
||||||
|
|
||||||
methodPatches.Prefixes.Add(identifier, new LuaCsPatch
|
methodPatches.Prefixes.Add(identifier, new LuaCsPatch
|
||||||
@@ -1240,7 +1239,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (methodPatches.Postfixes.Remove(identifier))
|
if (methodPatches.Postfixes.Remove(identifier))
|
||||||
{
|
{
|
||||||
luaCs.PrintMessage($"Replacing existing postfix: {identifier}");
|
LuaCsLogger.LogMessage($"Replacing existing postfix: {identifier}");
|
||||||
}
|
}
|
||||||
|
|
||||||
methodPatches.Postfixes.Add(identifier, new LuaCsPatch
|
methodPatches.Postfixes.Add(identifier, new LuaCsPatch
|
||||||
|
|||||||
@@ -83,8 +83,8 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.PrintError($"Error in {__originalMethod.Name}:", LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.LogError($"Error in {__originalMethod.Name}:", LuaCsMessageOrigin.Unknown);
|
||||||
GameMain.LuaCs.HandleException(ex, LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.Unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,7 +125,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (identifier == null || method == null || patch == null)
|
if (identifier == null || method == null || patch == null)
|
||||||
{
|
{
|
||||||
luaCs.HandleException(new ArgumentNullException("Identifier, Method and Patch arguments must not be null."), LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.HandleException(new ArgumentNullException("Identifier, Method and Patch arguments must not be null."), LuaCsMessageOrigin.Unknown);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ValidatePatchTarget(method);
|
ValidatePatchTarget(method);
|
||||||
|
|||||||
@@ -13,136 +13,159 @@ namespace Barotrauma
|
|||||||
CSharpMod,
|
CSharpMod,
|
||||||
}
|
}
|
||||||
|
|
||||||
internal delegate void LuaCsMessageLogger(string prefix, object o);
|
class LuaCsLogger
|
||||||
internal delegate void LuaCsExceptionHandler(Exception ex, LuaCsMessageOrigin origin);
|
|
||||||
|
|
||||||
// TODO: make it a separate class
|
|
||||||
partial class LuaCsSetup
|
|
||||||
{
|
{
|
||||||
|
|
||||||
#if SERVER
|
#if SERVER
|
||||||
private const string LOG_PREFIX = "SV";
|
private const string LogPrefix = "SV";
|
||||||
|
private const int NetMaxLength = 1024;
|
||||||
|
private const int NetMaxMessages = 60;
|
||||||
#else
|
#else
|
||||||
private const string LOG_PREFIX = "CL";
|
private const string LogPrefix = "CL";
|
||||||
#endif
|
#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");
|
|
||||||
|
|
||||||
|
public static LuaCsMessageLogger MessageLogger;
|
||||||
|
public static LuaCsExceptionHandler ExceptionHandler;
|
||||||
|
|
||||||
private static void PrintErrorBase(string prefix, object message, string empty)
|
public static void HandleException(Exception ex, LuaCsMessageOrigin origin)
|
||||||
{
|
|
||||||
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)
|
switch (ex)
|
||||||
{
|
{
|
||||||
case NetRuntimeException netRuntimeException:
|
case NetRuntimeException netRuntimeException:
|
||||||
if (netRuntimeException.DecoratedMessage == null)
|
if (netRuntimeException.DecoratedMessage == null)
|
||||||
{
|
{
|
||||||
PrintError(netRuntimeException, origin);
|
LogError(netRuntimeException.ToString(), origin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// FIXME: netRuntimeException.ToString() doesn't print the InnerException's stack trace...
|
// FIXME: netRuntimeException.ToString() doesn't print the InnerException's stack trace...
|
||||||
PrintError($"{netRuntimeException.DecoratedMessage}: {netRuntimeException}", origin);
|
LogError($"{netRuntimeException.DecoratedMessage}: {netRuntimeException}", origin);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case InterpreterException interpreterException:
|
case InterpreterException interpreterException:
|
||||||
if (interpreterException.DecoratedMessage == null)
|
if (interpreterException.DecoratedMessage == null)
|
||||||
{
|
{
|
||||||
PrintError(interpreterException, origin);
|
LogError(interpreterException.ToString(), origin);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PrintError(interpreterException.DecoratedMessage, origin);
|
LogError(interpreterException.DecoratedMessage, origin);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
var msg = ex.StackTrace != null
|
var msg = ex.StackTrace != null
|
||||||
? ex.ToString()
|
? ex.ToString()
|
||||||
: $"{ex}\n{Environment.StackTrace}";
|
: $"{ex}\n{Environment.StackTrace}";
|
||||||
PrintError(msg, origin);
|
LogError(msg, origin);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void DefaultMessageLogger(string prefix, object o)
|
public static void LogError(string message, LuaCsMessageOrigin origin)
|
||||||
{
|
{
|
||||||
var message = o.ToString();
|
switch (origin)
|
||||||
for (int i = 0; i < message.Length; i += 1024)
|
|
||||||
{
|
{
|
||||||
var subStr = message.Substring(i, Math.Min(1024, message.Length - i));
|
case LuaCsMessageOrigin.LuaCs:
|
||||||
|
LogError($"[{LogPrefix} ERROR] {message}");
|
||||||
#if SERVER
|
break;
|
||||||
if (GameMain.Server != null)
|
case LuaCsMessageOrigin.LuaMod:
|
||||||
{
|
LogError($"[{LogPrefix} LUA ERROR] {message}");
|
||||||
foreach (var c in GameMain.Server.ConnectedClients)
|
break;
|
||||||
{
|
case LuaCsMessageOrigin.CSharpMod:
|
||||||
GameMain.Server.SendDirectChatMessage(ChatMessage.Create("", subStr, ChatMessageType.Console, null, textColor: Color.MediumPurple), c);
|
LogError($"[{LogPrefix} CS ERROR] {message}");
|
||||||
}
|
break;
|
||||||
|
|
||||||
#if !DEBUG
|
|
||||||
GameServer.Log(prefix + subStr, ServerLog.MessageType.ServerMessage);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void LogError(string message)
|
||||||
|
{
|
||||||
|
Log($"{message}", Color.Red, ServerLog.MessageType.Error);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void LogMessage(string message, Color? serverColor = null, Color? clientColor = null)
|
||||||
|
{
|
||||||
|
if (serverColor == null) { serverColor = Color.MediumPurple; }
|
||||||
|
if (clientColor == null) { clientColor = Color.Purple; }
|
||||||
|
|
||||||
#if SERVER
|
#if SERVER
|
||||||
DebugConsole.NewMessage(message.ToString(), Color.MediumPurple);
|
Log(message, serverColor);
|
||||||
#else
|
#else
|
||||||
DebugConsole.NewMessage(message.ToString(), Color.Purple);
|
Log(message, clientColor);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PrintMessageBase(string prefix, object message, string empty) => MessageLogger?.Invoke(prefix, message ?? empty);
|
// This is used so its possible to call logging functions inside the serverLog
|
||||||
internal void PrintMessage(object message) => PrintMessageBase("[LuaCs] ", message, "nil");
|
// hook without creating an infinite loop
|
||||||
|
private static bool lockLog = false;
|
||||||
|
|
||||||
// TODO: deprecate this (in an effort to get rid of as much global state as possible)
|
public static void Log(string message, Color? color = null, ServerLog.MessageType messageType = ServerLog.MessageType.ServerMessage)
|
||||||
public static void PrintCsMessage(object message) => GameMain.LuaCs.PrintMessage(message);
|
{
|
||||||
|
MessageLogger?.Invoke(message);
|
||||||
|
|
||||||
|
DebugConsole.NewMessage(message, color);
|
||||||
|
|
||||||
|
#if SERVER
|
||||||
|
void broadcastMessage(string m)
|
||||||
|
{
|
||||||
|
foreach (var client in GameMain.Server.ConnectedClients)
|
||||||
|
{
|
||||||
|
//if (client.ChatMsgQueue.Count > NetMaxMessages)
|
||||||
|
//{
|
||||||
|
// If there's an error or message happening many times per second (inside Update loop for example)
|
||||||
|
// we will need to discart some messages so the client doesn't get overloaded by all
|
||||||
|
// those net messages.
|
||||||
|
// continue;
|
||||||
|
//}
|
||||||
|
|
||||||
|
ChatMessage consoleMessage = ChatMessage.Create("", m, ChatMessageType.Console, null, textColor: color);
|
||||||
|
GameMain.Server.SendDirectChatMessage(consoleMessage, client);
|
||||||
|
|
||||||
|
if (!GameMain.Server.ServerSettings.SaveServerLogs || !client.HasPermission(ClientPermissions.ServerLog))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatMessage logMessage = ChatMessage.Create(messageType.ToString(), "[LuaCs] " + m, ChatMessageType.ServerLog, null);
|
||||||
|
GameMain.Server.SendDirectChatMessage(logMessage, client);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GameMain.Server != null)
|
||||||
|
{
|
||||||
|
if (GameMain.Server.ServerSettings.SaveServerLogs)
|
||||||
|
{
|
||||||
|
string logMessage = "[LuaCs] " + message;
|
||||||
|
GameMain.Server.ServerSettings.ServerLog.WriteLine(logMessage, messageType, false);
|
||||||
|
|
||||||
|
if (!lockLog)
|
||||||
|
{
|
||||||
|
lockLog = true;
|
||||||
|
GameMain.LuaCs?.Hook?.Call("serverLog", logMessage, messageType);
|
||||||
|
lockLog = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < message.Length; i += NetMaxLength)
|
||||||
|
{
|
||||||
|
string subStr = message.Substring(i, Math.Min(1024, message.Length - i));
|
||||||
|
|
||||||
|
broadcastMessage(subStr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
partial class LuaCsSetup
|
||||||
|
{
|
||||||
|
// Compatibility with cs mods that use this method.
|
||||||
|
public void PrintLuaError(string message) => LuaCsLogger.LogError(message, LuaCsMessageOrigin.LuaMod);
|
||||||
|
public void PrintCsError(string message) => LuaCsLogger.LogError(message, LuaCsMessageOrigin.CSharpMod);
|
||||||
|
public void PrintGenericError(string message) => LuaCsLogger.LogError(message, LuaCsMessageOrigin.LuaCs);
|
||||||
|
|
||||||
|
internal void PrintMessage(string message) => LuaCsLogger.LogMessage(message);
|
||||||
|
|
||||||
|
public static void PrintCsMessage(string message) => LuaCsLogger.LogMessage(message);
|
||||||
|
|
||||||
|
internal void HandleException(Exception ex, LuaCsMessageOrigin origin) => LuaCsLogger.HandleException(ex, origin);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using MoonSharp.Interpreter;
|
using MoonSharp.Interpreter;
|
||||||
using MoonSharp.Interpreter.Interop;
|
using MoonSharp.Interpreter.Interop;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -73,7 +73,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (luaModInterface.Any(i => i.Equals(modName)))
|
if (luaModInterface.Any(i => i.Equals(modName)))
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.HandleException(new ArgumentException($"'{modName}' entry already registered"), LuaCsMessageOrigin.LuaMod);
|
LuaCsLogger.HandleException(new ArgumentException($"'{modName}' entry already registered"), LuaCsMessageOrigin.LuaMod);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,7 +86,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
if (csModInterface.Any(i => i.Equals(mod)))
|
if (csModInterface.Any(i => i.Equals(mod)))
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.HandleException(new ArgumentException($"'{mod.GetType().FullName}' entry already registered"), LuaCsMessageOrigin.CSharpMod);
|
LuaCsLogger.HandleException(new ArgumentException($"'{mod.GetType().FullName}' entry already registered"), LuaCsMessageOrigin.CSharpMod);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -96,8 +96,8 @@ namespace Barotrauma
|
|||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
// TODO: make LuaCsNetworking hold a reference to LuaCsSetup instead of using this global
|
// TODO: make LuaCsNetworking hold a reference to LuaCsSetup instead of using this global
|
||||||
GameMain.LuaCs.PrintError($"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.LogError($"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsMessageOrigin.Unknown);
|
||||||
GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.Unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -122,8 +122,8 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.PrintError($"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.LogError($"Exception thrown inside NetMessageReceive({netMessageName})", LuaCsMessageOrigin.Unknown);
|
||||||
GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.Unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,10 @@ namespace Barotrauma
|
|||||||
public LuaCsSetupConfig() { }
|
public LuaCsSetupConfig() { }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal delegate void LuaCsMessageLogger(string message);
|
||||||
|
internal delegate void LuaCsErrorHandler(Exception ex, LuaCsMessageOrigin origin);
|
||||||
|
internal delegate void LuaCsExceptionHandler(Exception ex, LuaCsMessageOrigin origin);
|
||||||
|
|
||||||
partial class LuaCsSetup
|
partial class LuaCsSetup
|
||||||
{
|
{
|
||||||
public const string LuaSetupFile = "Lua/LuaSetup.lua";
|
public const string LuaSetupFile = "Lua/LuaSetup.lua";
|
||||||
@@ -59,14 +63,8 @@ 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;
|
|
||||||
ExceptionHandler = DefaultExceptionHandler;
|
|
||||||
|
|
||||||
Hook = new LuaCsHook(this);
|
Hook = new LuaCsHook(this);
|
||||||
ModStore = new LuaCsModStore();
|
ModStore = new LuaCsModStore();
|
||||||
|
|
||||||
@@ -136,11 +134,6 @@ namespace Barotrauma
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void HandleException(Exception ex, LuaCsMessageOrigin origin)
|
|
||||||
{
|
|
||||||
this.ExceptionHandler?.Invoke(ex, origin);
|
|
||||||
}
|
|
||||||
|
|
||||||
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))
|
||||||
@@ -185,7 +178,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
HandleException(e, LuaCsMessageOrigin.LuaMod);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.LuaMod);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -257,7 +250,7 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
Stop();
|
Stop();
|
||||||
|
|
||||||
PrintMessage("Lua! Version " + AssemblyInfo.GitRevision);
|
LuaCsLogger.LogMessage("Lua! Version " + AssemblyInfo.GitRevision);
|
||||||
|
|
||||||
if (File.Exists(configFileName))
|
if (File.Exists(configFileName))
|
||||||
{
|
{
|
||||||
@@ -277,7 +270,7 @@ namespace Barotrauma
|
|||||||
RegisterLuaConverters();
|
RegisterLuaConverters();
|
||||||
|
|
||||||
Lua = new Script(CoreModules.Preset_SoftSandbox | CoreModules.Debug);
|
Lua = new Script(CoreModules.Preset_SoftSandbox | CoreModules.Debug);
|
||||||
Lua.Options.DebugPrint = PrintMessage;
|
Lua.Options.DebugPrint = (o) => { LuaCsLogger.LogMessage(o); };
|
||||||
Lua.Options.ScriptLoader = LuaScriptLoader;
|
Lua.Options.ScriptLoader = LuaScriptLoader;
|
||||||
Lua.Options.CheckThreadAccess = false;
|
Lua.Options.CheckThreadAccess = false;
|
||||||
Script.GlobalOptions.ShouldPCallCatchException = (Exception ex) => { return true; };
|
Script.GlobalOptions.ShouldPCallCatchException = (Exception ex) => { return true; };
|
||||||
@@ -309,7 +302,7 @@ namespace Barotrauma
|
|||||||
UserData.RegisterType<LuaCsPerformanceCounter>();
|
UserData.RegisterType<LuaCsPerformanceCounter>();
|
||||||
UserData.RegisterType<IUserDataDescriptor>();
|
UserData.RegisterType<IUserDataDescriptor>();
|
||||||
|
|
||||||
Lua.Globals["printerror"] = (Action<object>)PrintLuaError;
|
Lua.Globals["printerror"] = (DynValue o) => { LuaCsLogger.LogError(o.ToString(), LuaCsMessageOrigin.LuaMod); };
|
||||||
|
|
||||||
Lua.Globals["setmodulepaths"] = (Action<string[]>)SetModulePaths;
|
Lua.Globals["setmodulepaths"] = (Action<string[]>)SetModulePaths;
|
||||||
|
|
||||||
@@ -339,7 +332,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (csActive)
|
if (csActive)
|
||||||
{
|
{
|
||||||
PrintMessage("Cs! Version " + AssemblyInfo.GitRevision);
|
LuaCsLogger.LogMessage("Cs! Version " + AssemblyInfo.GitRevision);
|
||||||
|
|
||||||
if (Config.FirstTimeCsWarning)
|
if (Config.FirstTimeCsWarning)
|
||||||
{
|
{
|
||||||
@@ -366,15 +359,15 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
HandleException(ex, LuaCsMessageOrigin.CSharpMod);
|
LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.CSharpMod);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
compilationTime.Stop();
|
compilationTime.Stop();
|
||||||
PrintCsMessage($"Took {compilationTime.ElapsedMilliseconds}ms to compile and run Cs Scripts.");
|
LuaCsLogger.LogMessage($"Took {compilationTime.ElapsedMilliseconds}ms to compile and run Cs Scripts.");
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
HandleException(ex, LuaCsMessageOrigin.CSharpMod);
|
LuaCsLogger.HandleException(ex, LuaCsMessageOrigin.CSharpMod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -385,7 +378,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (File.Exists(LuaSetupFile))
|
if (File.Exists(LuaSetupFile))
|
||||||
{
|
{
|
||||||
PrintMessage("Using LuaSetup.lua from the Barotrauma Lua/ folder.");
|
LuaCsLogger.LogMessage("Using LuaSetup.lua from the Barotrauma Lua/ folder.");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -394,12 +387,12 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
HandleException(e, LuaCsMessageOrigin.LuaMod);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.LuaMod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (luaPackage != null)
|
else if (luaPackage != null)
|
||||||
{
|
{
|
||||||
PrintMessage("Using LuaSetup.lua from the content package.");
|
LuaCsLogger.LogMessage("Using LuaSetup.lua from the content package.");
|
||||||
|
|
||||||
string path = Path.GetDirectoryName(luaPackage.Path);
|
string path = Path.GetDirectoryName(luaPackage.Path);
|
||||||
|
|
||||||
@@ -410,12 +403,12 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
HandleException(e, LuaCsMessageOrigin.LuaMod);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.LuaMod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PrintLuaError("LuaSetup.lua not found! Lua/LuaSetup.lua, no Lua scripts will be executed or work.");
|
LuaCsLogger.LogError("LuaSetup.lua not found! Lua/LuaSetup.lua, no Lua scripts will be executed or work.", LuaCsMessageOrigin.LuaMod);
|
||||||
}
|
}
|
||||||
|
|
||||||
executionNumber++;
|
executionNumber++;
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.CSharpMod);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.CSharpMod);
|
||||||
}
|
}
|
||||||
|
|
||||||
timedActionsToRemove.Add(timedAction);
|
timedActionsToRemove.Add(timedAction);
|
||||||
@@ -99,8 +99,8 @@ namespace Barotrauma
|
|||||||
}
|
}
|
||||||
catch (NullReferenceException e)
|
catch (NullReferenceException e)
|
||||||
{
|
{
|
||||||
GameMain.LuaCs.PrintError("Error while executing timers... This shouldn't happen... Why do we a NRE here???", LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.LogError("Error while executing timers... This shouldn't happen... Why do we a NRE here???", LuaCsMessageOrigin.Unknown);
|
||||||
GameMain.LuaCs.HandleException(e, LuaCsMessageOrigin.Unknown);
|
LuaCsLogger.HandleException(e, LuaCsMessageOrigin.Unknown);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,14 +106,17 @@ namespace Barotrauma.Networking
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void WriteLine(string line, MessageType messageType)
|
public void WriteLine(string line, MessageType messageType, bool logToConsole = true)
|
||||||
{
|
{
|
||||||
//string logLine = "[" + DateTime.Now.ToLongTimeString() + "] " + line;
|
//string logLine = "[" + DateTime.Now.ToLongTimeString() + "] " + line;
|
||||||
|
|
||||||
var newText = new LogMessage(line, messageType);
|
var newText = new LogMessage(line, messageType);
|
||||||
|
|
||||||
#if SERVER
|
#if SERVER
|
||||||
DebugConsole.NewMessage(newText.Text.SanitizedValue, messageColor[messageType]); //TODO: REMOVE
|
if (logToConsole)
|
||||||
|
{
|
||||||
|
DebugConsole.NewMessage(newText.Text.SanitizedValue, messageColor[messageType]); //TODO: REMOVE
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
lines.Enqueue(newText);
|
lines.Enqueue(newText);
|
||||||
|
|||||||
@@ -18,10 +18,9 @@ namespace TestProject.LuaCs
|
|||||||
// same methods, otherwise we get script ownership exceptions.
|
// same methods, otherwise we get script ownership exceptions.
|
||||||
luaCs = luaCsFixture.LuaCs;
|
luaCs = luaCsFixture.LuaCs;
|
||||||
|
|
||||||
luaCs.MessageLogger = (prefix, o) =>
|
LuaCsLogger.MessageLogger = (o) =>
|
||||||
{
|
{
|
||||||
o ??= "null";
|
output?.WriteLine($"{o}");
|
||||||
output?.WriteLine(prefix + o);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
UserData.RegisterType<TestValueType>();
|
UserData.RegisterType<TestValueType>();
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ namespace TestProject.LuaCs
|
|||||||
{
|
{
|
||||||
public LuaCsFixture()
|
public LuaCsFixture()
|
||||||
{
|
{
|
||||||
LuaCs.ExceptionHandler = (ex, _) =>
|
LuaCsLogger.ExceptionHandler = (ex, _) =>
|
||||||
{
|
{
|
||||||
// Pretend we never caught the exception in the first place
|
// Pretend we never caught the exception in the first place
|
||||||
// (this allows us to preserve the stack trace)
|
// (this allows us to preserve the stack trace)
|
||||||
|
|||||||
Reference in New Issue
Block a user