Skip to content

Commit

Permalink
Resolve runtime info at startup. Use console instead of nlog for cras…
Browse files Browse the repository at this point in the history
…h message. (#740)

* Resolve runtime info at startup. Use console instead of nlog for crash message.

* Cleanup usings.
  • Loading branch information
jhett12321 authored Dec 3, 2023
1 parent 1975c15 commit 7ff6d1d
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 18 deletions.
16 changes: 8 additions & 8 deletions NWN.Anvil/src/main/AnvilCore.FunctionHandlers.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using Anvil.API;
using Anvil.Internal;
using Anvil.Services;
using NWN.Core;
using NWN.Native.API;
Expand Down Expand Up @@ -138,7 +136,7 @@ private static void OnAssertFail(IntPtr messagePtr, IntPtr nativeStackTracePtr)
private static void OnServerCrash(int signal, IntPtr nativeStackTracePtr)
{
string stackTrace = nativeStackTracePtr.ReadNullTerminatedString();
Version serverVersion = NwServer.Instance.ServerVersion;
string managedTrace = new StackTrace(true).ToString();

string error = signal switch
{
Expand All @@ -149,14 +147,16 @@ private static void OnServerCrash(int signal, IntPtr nativeStackTracePtr)
_ => "Unknown error",
};

Log.Fatal("\n==============================================================\n" +
string message = "\n==============================================================\n" +
" Please file a bug at https://github.com/nwn-dotnet/Anvil/issues\n" +
$" {Assemblies.Anvil.GetName().Name} {AssemblyInfo.VersionInfo.InformationalVersion} has crashed. Fatal error: {error} ({signal})\n" +
$" Using: NWN {serverVersion}, NWN.Core {Assemblies.Core.GetName().Version}, NWN.Native {Assemblies.Native.GetName().Version}\n" +
$" {runtimeInfo.AssemblyName} {runtimeInfo.AssemblyVersion} has crashed. Fatal error: {error} ({signal})\n" +
$" Using: NWN {runtimeInfo.ServerVersion}, NWN.Core {runtimeInfo.CoreVersion}, NWN.Native {runtimeInfo.NativeVersion}\n" +
"==============================================================\n" +
" Managed Backtrace:\n" +
$"{new StackTrace(true)}" +
$"{stackTrace}");
$"{managedTrace}" +
$"{stackTrace}";

Console.WriteLine(message);
}
}
}
16 changes: 16 additions & 0 deletions NWN.Anvil/src/main/AnvilCore.RuntimeInfo.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace Anvil
{
public sealed partial class AnvilCore
{
private static RuntimeInfo runtimeInfo;

private struct RuntimeInfo
{
public string? AssemblyName;
public string? AssemblyVersion;
public string? ServerVersion;
public string? CoreVersion;
public string? NativeVersion;
}
}
}
21 changes: 11 additions & 10 deletions NWN.Anvil/src/main/AnvilCore.cs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,14 @@ private void CheckServerVersion()

private void Init()
{
runtimeInfo = new RuntimeInfo
{
AssemblyName = Assemblies.Anvil.GetName().Name,
AssemblyVersion = AssemblyInfo.VersionInfo.InformationalVersion,
CoreVersion = Assemblies.Core.GetName().Version?.ToString(),
NativeVersion = Assemblies.Native.GetName().Version?.ToString(),
};

serviceManager.Init();

try
Expand All @@ -110,20 +118,13 @@ private void Init()
}
catch (Exception e)
{
Log.Fatal(e, "Failed to load {Name:l} {Version:l} (NWN.Core: {CoreVersion}, NWN.Native: {NativeVersion})",
Assemblies.Anvil.GetName().Name,
AssemblyInfo.VersionInfo.InformationalVersion,
Assemblies.Core.GetName().Version,
Assemblies.Native.GetName().Version);
Log.Fatal(e, $"Failed to load {runtimeInfo.AssemblyName} {runtimeInfo.AssemblyVersion} (NWN.Core: {runtimeInfo.CoreVersion}, NWN.Native: {runtimeInfo.NativeVersion})");
throw;
}

Log.Info("Loading {Name:l} {Version:l} (NWN.Core: {CoreVersion}, NWN.Native: {NativeVersion})",
Assemblies.Anvil.GetName().Name,
AssemblyInfo.VersionInfo.InformationalVersion,
Assemblies.Core.GetName().Version,
Assemblies.Native.GetName().Version);
runtimeInfo.ServerVersion = NwServer.Instance.ServerVersion.ToString();

Log.Info($"Loading {runtimeInfo.AssemblyName} {runtimeInfo.AssemblyVersion} (NWN.Core: {runtimeInfo.CoreVersion}, NWN.Native: {runtimeInfo.NativeVersion})");
CheckServerVersion();
}

Expand Down

0 comments on commit 7ff6d1d

Please sign in to comment.