Files
Torch/Torch/Utils/TorchLauncher.cs
zznty 0a40b1fe0f move some parts of main class to other
fix poorly implemented features
2022-06-05 15:50:03 +07:00

52 lines
1.7 KiB
C#

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using Torch.Event;
using Torch.Managers.PatchManager;
using VRage.Collections;
namespace Torch.Utils
{
public static class TorchLauncher
{
private static readonly MyConcurrentHashSet<Assembly> RegisteredAssemblies = new();
private static readonly Dictionary<string, string> Assemblies = new();
public static void Launch(params string[] binaryPaths)
{
foreach (var file in binaryPaths.SelectMany(path => Directory.EnumerateFiles(path, "*.dll")))
{
try
{
var name = AssemblyName.GetAssemblyName(file);
var key = name.Name ?? name.FullName[..','];
Assemblies.TryAdd(key, file);
}
catch (BadImageFormatException)
{
// if we are trying to load native image
}
}
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomainOnAssemblyResolve;
}
public static void RegisterAssembly(Assembly assembly)
{
if (!RegisteredAssemblies.Add(assembly))
return;
ReflectedManager.Process(assembly);
EventManager.AddDispatchShims(assembly);
PatchManager.AddPatchShims(assembly);
}
private static Assembly CurrentDomainOnAssemblyResolve(object sender, ResolveEventArgs args)
{
var name = args.Name;
return Assemblies.TryGetValue(name.IndexOf(',') > 0 ? name[..','] : name, out var path) ? Assembly.LoadFrom(path) : null;
}
}
}