Skip to content
Merged
159 changes: 77 additions & 82 deletions managed/src/SwiftlyS2.Core/Bootstrap.cs
Original file line number Diff line number Diff line change
@@ -1,102 +1,97 @@
using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Spectre.Console;
using SwiftlyS2.Core.Misc;
using SwiftlyS2.Core.Events;
using SwiftlyS2.Core.Hosting;
using SwiftlyS2.Core.Natives;
using SwiftlyS2.Core.Services;
using SwiftlyS2.Shared;
using SwiftlyS2.Core.Events;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Hosting;
using SwiftlyS2.Core.Misc;
using Microsoft.Extensions.Configuration;
using SwiftlyS2.Shared.Memory;
using SwiftlyS2.Shared.Services;
using System.Runtime.InteropServices;
using SwiftlyS2.Shared.SteamAPI;
using System.Reflection;

namespace SwiftlyS2.Core;

internal static class Bootstrap
{
// how tf i forgot services can be collected hahahahahahahhaahhahaa FUCK
private static IHost? sw2Host;

// how tf i forgot services can be collected hahahahahahahhaahhahaa FUCK
private static IHost? _host;

private static IntPtr SteamAPIDLLResolver( string libraryName, Assembly assembly, DllImportSearchPath? searchPath )
{
if (libraryName == "steam_api" || libraryName == "sdkencryptedappticket")
private static IntPtr SteamAPIDLLResolver( string libraryName, Assembly assembly, DllImportSearchPath? searchPath )
{
if (OperatingSystem.IsWindows())
{
libraryName += "64";
}

if (NativeLibrary.TryLoad(libraryName, out var handle))
{
return handle;
}
}
if (libraryName == "steam_api" || libraryName == "sdkencryptedappticket")
{
if (OperatingSystem.IsWindows())
{
libraryName += "64";
}

return IntPtr.Zero;
}
if (NativeLibrary.TryLoad(libraryName, out var handle))
{
return handle;
}
}

public static void Start( IntPtr nativeTable, int nativeTableSize, string basePath )
{
Environment.SetEnvironmentVariable("SWIFTLY_MANAGED_ROOT", basePath);

NativeBinding.BindNatives(nativeTable, nativeTableSize);

NativeLibrary.SetDllImportResolver(typeof(NativeMethods).Assembly, SteamAPIDLLResolver);

EventPublisher.Register();
GameFunctions.Initialize();
FileLogger.Initialize(basePath);
return IntPtr.Zero;
}

AnsiConsole.Write(new FigletText("SwiftlyS2").LeftJustified().Color(Spectre.Console.Color.LightSteelBlue1));
public static void Start( IntPtr nativeTable, int nativeTableSize, string basePath )
{
Environment.SetEnvironmentVariable("SWIFTLY_MANAGED_ROOT", basePath);
NativeBinding.BindNatives(nativeTable, nativeTableSize);
NativeLibrary.SetDllImportResolver(typeof(NativeMethods).Assembly, SteamAPIDLLResolver);

_host = Host.CreateDefaultBuilder()
.UseConsoleLifetime(options =>
{
options.SuppressStatusMessages = true;
})
.ConfigureServices(( context, services ) =>
{
services.AddHostedService<StartupService>();
})
.ConfigureLogging(( context, logging ) =>
{
logging.ClearProviders();
logging.AddProvider(new SwiftlyLoggerProvider("SwiftlyS2"));
})
.ConfigureAppConfiguration(( context, config ) =>
{
config.SetBasePath(Path.Combine(Environment.GetEnvironmentVariable("SWIFTLY_MANAGED_ROOT")!, "configs"));
config.AddJsonFile("permissions.jsonc", optional: false, reloadOnChange: true);
})
.ConfigureServices(( context, services ) =>
{
services
.AddProfileService()
.AddConfigurationService()
.AddTestService()
.AddRootDirService()
.AddDataDirectoryService()
.AddPlayerManagerService()
.AddPluginManager()
.AddHookManager()
.AddTraceManagerService()
.AddPermissionManager()
.AddCoreHookService()
.AddCoreCommandService()
.AddCommandTrackerManager()
.AddCommandTrackerService()
.AddSwiftlyCore(basePath);
})
.Build();
EventPublisher.Register();
GameFunctions.Initialize();
FileLogger.Initialize(basePath);

_host.Start();
AnsiConsole.Write(new FigletText("SwiftlyS2").LeftJustified().Color(Color.LightSteelBlue1));

// provider.UseTestService();
sw2Host = Host.CreateDefaultBuilder()
.UseConsoleLifetime(options =>
{
options.SuppressStatusMessages = true;
})
.ConfigureServices(( context, services ) =>
{
_ = services.AddHostedService<StartupService>();
})
.ConfigureLogging(( context, logging ) =>
{
_ = logging.ClearProviders();
_ = logging.AddProvider(new SwiftlyLoggerProvider("SwiftlyS2"));
})
.ConfigureAppConfiguration(( context, config ) =>
{
_ = config.SetBasePath(Path.Combine(Environment.GetEnvironmentVariable("SWIFTLY_MANAGED_ROOT")!, "configs"));
_ = config.AddJsonFile("permissions.jsonc", optional: false, reloadOnChange: true);
})
.ConfigureServices(( context, services ) =>
{
_ = services
.AddProfileService()
.AddConfigurationService()
.AddTestService()
.AddRootDirService()
.AddDataDirectoryService()
.AddPlayerManagerService()
.AddPluginManager()
.AddHookManager()
.AddTraceManagerService()
.AddPermissionManager()
.AddCoreHookService()
.AddCoreCommandService()
.AddCommandTrackerManager()
.AddCommandTrackerService()
.AddMenuManagerAPI()
.AddMenuManagerAPIService()
.AddSwiftlyCore(basePath);
})
.Build();

}
sw2Host.Start();
// provider.UseTestService();
}
}
12 changes: 12 additions & 0 deletions managed/src/SwiftlyS2.Core/Hosting/MenuManagerAPIInjection.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using Microsoft.Extensions.DependencyInjection;
using SwiftlyS2.Core.Menus;

namespace SwiftlyS2.Core.Hosting;

internal static class MenuManagerAPIInjection
{
public static IServiceCollection AddMenuManagerAPI( this IServiceCollection self )
{
return self.AddSingleton<MenuManagerAPI>();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Microsoft.Extensions.DependencyInjection;
using SwiftlyS2.Core.Services;

namespace SwiftlyS2.Core.Hosting;

internal static class MenuManagerAPIServiceInjection
{
public static IServiceCollection AddMenuManagerAPIService( this IServiceCollection self )
{
return self.AddSingleton<MenuManagerAPIService>();
}

public static void UseMenuManagerAPIService( this IServiceProvider self )
{
self.GetRequiredService<MenuManagerAPIService>();
}
}
Loading
Loading