Compare commits

...

12 Commits

Author SHA1 Message Date
zznty
6bcd2ea58e windows moment 2023-01-24 16:27:31 +07:00
zznty
b8a06f7bd7 publish nuget package on release 2023-01-24 16:25:10 +07:00
zznty
d44b1a592c rewrite torch mod because casitard broke original 2023-01-24 16:09:19 +07:00
zznty
d7d556d2f2 fix for restart on crash too 2023-01-12 23:37:43 +07:00
zznty
850b313269 fix updates again 2023-01-12 23:29:37 +07:00
zznty
fe985e1a9c fix restart again 2023-01-12 23:20:44 +07:00
zznty
aeea192860 exit on restart 2023-01-09 22:02:54 +07:00
zznty
b8be5b2dce fix auto-updates 2023-01-05 00:48:11 +07:00
zznty
ea08d60d58 update protobuf 2023-01-05 00:41:49 +07:00
zznty
6493a305f7 remove retarded assembly version checks 2023-01-04 23:59:33 +07:00
zznty
bc0a2b89b8 fix entity updates and steam errors on game exit 2022-12-14 19:57:14 +07:00
zznty
846c2aa42e remove cache from ci 2022-12-12 13:29:40 +03:00
19 changed files with 162 additions and 461 deletions

View File

@@ -21,12 +21,6 @@ jobs:
name: Setup dotnet name: Setup dotnet
with: with:
dotnet-version: '7.0.x' dotnet-version: '7.0.x'
- uses: actions/cache@v1
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
restore-keys: |
${{ runner.os }}-nuget-
- name: Add Gh Packages Nuget Source - name: Add Gh Packages Nuget Source
run: dotnet nuget add source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github run: dotnet nuget add source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" --username ${{ github.actor }} --password ${{ secrets.GITHUB_TOKEN }} --store-password-in-clear-text --name github
- name: Restore dependencies - name: Restore dependencies
@@ -73,3 +67,9 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with: with:
id: ${{ steps.create_release.outputs.id }} id: ${{ steps.create_release.outputs.id }}
- run: dotnet pack -c Release ./Torch.API/Torch.API.csproj -o pack --include-symbols -p:SymbolPackageFormat=snupkg --no-build
- run: dotnet pack -c Release ./Torch/Torch.csproj -o pack --include-symbols -p:SymbolPackageFormat=snupkg --no-build
- run: dotnet pack -c Release ./Torch.Server/Torch.Server.csproj -o pack --include-symbols -p:SymbolPackageFormat=snupkg -p:Version=${{ env.TORCH_VERSION }} --no-build
- run: dotnet nuget push ./pack/*.nupkg -s github

View File

@@ -1,26 +0,0 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Torch.Mod.Messages
{
/// <summary>
/// shim to store incoming message data
/// </summary>
internal class IncomingMessage : MessageBase
{
public IncomingMessage()
{
}
public override void ProcessClient()
{
throw new Exception();
}
public override void ProcessServer()
{
throw new Exception();
}
}
}

View File

@@ -32,11 +32,6 @@ namespace Torch.Mod.Messages
public override void ProcessClient() public override void ProcessClient()
{ {
if (TorchModCore.Debug)
{
MyAPIGateway.Utilities.ShowMessage("Torch", $"Joining server {Address} with delay {Delay}");
}
if (Delay <= 0) if (Delay <= 0)
{ {
MyAPIGateway.Multiplayer.JoinServer(Address); MyAPIGateway.Multiplayer.JoinServer(Address);

View File

@@ -1,9 +1,4 @@
using System; using ProtoBuf;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ProtoBuf;
namespace Torch.Mod.Messages namespace Torch.Mod.Messages
{ {
@@ -17,36 +12,9 @@ namespace Torch.Mod.Messages
[ProtoContract] [ProtoContract]
public abstract class MessageBase public abstract class MessageBase
{ {
[ProtoMember(101)]
public ulong SenderId; public ulong SenderId;
public abstract void ProcessClient(); public abstract void ProcessClient();
public abstract void ProcessServer(); public abstract void ProcessServer();
//members below not serialized, they're just metadata about the intended target(s) of this message
internal MessageTarget TargetType;
internal ulong Target;
internal ulong[] Ignore;
internal byte[] CompressedData;
}
public enum MessageTarget
{
/// <summary>
/// Send to Target
/// </summary>
Single,
/// <summary>
/// Send to Server
/// </summary>
Server,
/// <summary>
/// Send to all Clients (only valid from server)
/// </summary>
AllClients,
/// <summary>
/// Send to all except those steam ID listed in Ignore
/// </summary>
AllExcept,
} }
} }

View File

@@ -1,161 +1,50 @@
using System; using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Sandbox.ModAPI; using Sandbox.ModAPI;
using Torch.Mod.Messages; using Torch.Mod.Messages;
using VRage; using VRage.Game.Components;
using VRage.Collections;
using VRage.Game.ModAPI; using VRage.Game.ModAPI;
using VRage.Network; #if TORCH
using VRage.Utils; using Torch.Utils;
using Task = ParallelTasks.Task; using VRage.Library.Collections;
using System.Reflection;
#endif
namespace Torch.Mod namespace Torch.Mod
{ {
public static class ModCommunication [MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)]
public class ModCommunication : MySessionComponentBase
{ {
public const ushort NET_ID = 4352; public const ulong MOD_ID = 2915950488;
private static bool _closing = false; private const ushort CHANNEL = 7654;
private static BlockingCollection<MessageBase> _processing;
private static MyConcurrentPool<IncomingMessage> _messagePool;
private static List<IMyPlayer> _playerCache;
public static void Register() public override void BeforeStart()
{ {
MyLog.Default.WriteLineAndConsole("TORCH MOD: Registering mod communication."); base.BeforeStart();
_processing = new BlockingCollection<MessageBase>(new ConcurrentQueue<MessageBase>()); MyAPIGateway.Multiplayer.RegisterSecureMessageHandler(CHANNEL, MessageHandler);
_playerCache = new List<IMyPlayer>();
_messagePool = new MyConcurrentPool<IncomingMessage>(8);
MyAPIGateway.Multiplayer.RegisterMessageHandler(NET_ID, MessageHandler);
//background thread to handle de/compression and processing
_closing = false;
MyAPIGateway.Parallel.StartBackground(DoProcessing);
MyLog.Default.WriteLineAndConsole("TORCH MOD: Mod communication registered successfully.");
} }
public static void Unregister() private void MessageHandler(ushort channel, byte[] data, ulong sender, bool fromServer)
{ {
MyLog.Default.WriteLineAndConsole("TORCH MOD: Unregistering mod communication."); if (!fromServer)
MyAPIGateway.Multiplayer?.UnregisterMessageHandler(NET_ID, MessageHandler); return;
_processing?.CompleteAdding();
_closing = true; var message = MyAPIGateway.Utilities.SerializeFromBinary<MessageBase>(data);
//_task.Wait(); message.SenderId = sender;
if (MyAPIGateway.Multiplayer.IsServer) message.ProcessServer();
else message.ProcessClient();
} }
private static void MessageHandler(byte[] bytes)
{
var m = _messagePool.Get();
m.CompressedData = bytes;
#if TORCH #if TORCH
m.SenderId = MyEventContext.Current.Sender.Value; [ReflectedMethodInfo(typeof(MyAPIUtilities), "VRage.Game.ModAPI.IMyUtilities.SerializeToBinary")]
#endif private static MethodInfo _serializeMethod = null!;
_processing.Add(m); private static readonly CacheList<IMyPlayer> Players = new();
}
public static void DoProcessing() private static byte[] Serialize(MessageBase message)
{ {
while (!_closing) return (byte[])_serializeMethod.MakeGenericMethod(message.GetType())
{ .Invoke(MyAPIGateway.Utilities, new object[] { message });
try
{
MessageBase m;
try
{
m = _processing.Take();
}
catch
{
continue;
}
MyLog.Default.WriteLineAndConsole($"Processing message: {m.GetType().Name}");
if (m is IncomingMessage) //process incoming messages
{
MessageBase i;
try
{
var o = MyCompression.Decompress(m.CompressedData);
m.CompressedData = null;
_messagePool.Return((IncomingMessage)m);
i = MyAPIGateway.Utilities.SerializeFromBinary<MessageBase>(o);
}
catch (Exception ex)
{
MyLog.Default.WriteLineAndConsole($"TORCH MOD: Failed to deserialize message! {ex}");
continue;
}
if (TorchModCore.Debug)
MyAPIGateway.Utilities.ShowMessage("Torch", $"Received message of type {i.GetType().Name}");
if (MyAPIGateway.Multiplayer.IsServer)
i.ProcessServer();
else
i.ProcessClient();
}
else //process outgoing messages
{
if (TorchModCore.Debug)
MyAPIGateway.Utilities.ShowMessage("Torch", $"Sending message of type {m.GetType().Name}");
var b = MyAPIGateway.Utilities.SerializeToBinary(m);
m.CompressedData = MyCompression.Compress(b);
switch (m.TargetType)
{
case MessageTarget.Single:
MyAPIGateway.Multiplayer.SendMessageTo(NET_ID, m.CompressedData, m.Target);
break;
case MessageTarget.Server:
MyAPIGateway.Multiplayer.SendMessageToServer(NET_ID, m.CompressedData);
break;
case MessageTarget.AllClients:
MyAPIGateway.Players.GetPlayers(_playerCache);
foreach (var p in _playerCache)
{
if (p.SteamUserId == MyAPIGateway.Multiplayer.MyId)
continue;
MyAPIGateway.Multiplayer.SendMessageTo(NET_ID, m.CompressedData, p.SteamUserId);
}
break;
case MessageTarget.AllExcept:
MyAPIGateway.Players.GetPlayers(_playerCache);
foreach (var p in _playerCache)
{
if (p.SteamUserId == MyAPIGateway.Multiplayer.MyId || m.Ignore.Contains(p.SteamUserId))
continue;
MyAPIGateway.Multiplayer.SendMessageTo(NET_ID, m.CompressedData, p.SteamUserId);
}
break;
default:
throw new Exception();
}
_playerCache.Clear();
}
}
catch (Exception ex)
{
MyLog.Default.WriteLineAndConsole($"TORCH MOD: Exception occurred in communication thread! {ex}");
}
}
MyLog.Default.WriteLineAndConsole("TORCH MOD: INFO: Communication thread shut down successfully! THIS IS NOT AN ERROR");
//exit signal received. Clean everything and GTFO
_processing?.Dispose();
_processing = null;
_messagePool?.Clean();
_messagePool = null;
_playerCache = null;
} }
public static void SendMessageTo(MessageBase message, ulong target) public static void SendMessageTo(MessageBase message, ulong target)
@@ -163,12 +52,7 @@ namespace Torch.Mod
if (!MyAPIGateway.Multiplayer.IsServer) if (!MyAPIGateway.Multiplayer.IsServer)
throw new Exception("Only server can send targeted messages"); throw new Exception("Only server can send targeted messages");
if (_closing) MyAPIGateway.Multiplayer.SendMessageTo(CHANNEL, Serialize(message), target);
return;
message.Target = target;
message.TargetType = MessageTarget.Single;
_processing.Add(message);
} }
public static void SendMessageToClients(MessageBase message) public static void SendMessageToClients(MessageBase message)
@@ -176,11 +60,7 @@ namespace Torch.Mod
if (!MyAPIGateway.Multiplayer.IsServer) if (!MyAPIGateway.Multiplayer.IsServer)
throw new Exception("Only server can send targeted messages"); throw new Exception("Only server can send targeted messages");
if (_closing) MyAPIGateway.Multiplayer.SendMessageToOthers(CHANNEL, Serialize(message));
return;
message.TargetType = MessageTarget.AllClients;
_processing.Add(message);
} }
public static void SendMessageExcept(MessageBase message, params ulong[] ignoredUsers) public static void SendMessageExcept(MessageBase message, params ulong[] ignoredUsers)
@@ -188,21 +68,20 @@ namespace Torch.Mod
if (!MyAPIGateway.Multiplayer.IsServer) if (!MyAPIGateway.Multiplayer.IsServer)
throw new Exception("Only server can send targeted messages"); throw new Exception("Only server can send targeted messages");
if (_closing) using var players = Players;
return; MyAPIGateway.Multiplayer.Players.GetPlayers(players, player => !ignoredUsers.Contains(player.SteamUserId));
message.TargetType = MessageTarget.AllExcept; var data = Serialize(message);
message.Ignore = ignoredUsers; foreach (var player in players)
_processing.Add(message); {
MyAPIGateway.Multiplayer.SendMessageTo(CHANNEL, data, player.SteamUserId);
}
} }
public static void SendMessageToServer(MessageBase message) public static void SendMessageToServer(MessageBase message)
{ {
if (_closing) throw new NotSupportedException();
return;
message.TargetType = MessageTarget.Server;
_processing.Add(message);
} }
#endif
} }
} }

View File

@@ -9,13 +9,11 @@
<Import_RootNamespace>Torch.Mod</Import_RootNamespace> <Import_RootNamespace>Torch.Mod</Import_RootNamespace>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="$(MSBuildThisFileDirectory)Messages\IncomingMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\JoinServerMessage.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Messages\JoinServerMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\NotificationMessage.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Messages\NotificationMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\DialogMessage.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Messages\DialogMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\MessageBase.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Messages\MessageBase.cs" />
<Compile Include="$(MSBuildThisFileDirectory)Messages\VoxelResetMessage.cs" /> <Compile Include="$(MSBuildThisFileDirectory)Messages\VoxelResetMessage.cs" />
<Compile Include="$(MSBuildThisFileDirectory)ModCommunication.cs" /> <Compile Include="$(MSBuildThisFileDirectory)ModCommunication.cs" />
<Compile Include="$(MSBuildThisFileDirectory)TorchModCore.cs" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -1,51 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sandbox.ModAPI;
using VRage.Game.Components;
namespace Torch.Mod
{
[MySessionComponentDescriptor(MyUpdateOrder.AfterSimulation)]
public class TorchModCore : MySessionComponentBase
{
public const ulong MOD_ID = 2722000298;
private static bool _init;
public static bool Debug;
public override void UpdateAfterSimulation()
{
if (_init)
return;
_init = true;
ModCommunication.Register();
MyAPIGateway.Utilities.MessageEntered += Utilities_MessageEntered;
}
private void Utilities_MessageEntered(string messageText, ref bool sendToOthers)
{
if (messageText == "@!debug")
{
Debug = !Debug;
MyAPIGateway.Utilities.ShowMessage("Torch", $"Debug: {Debug}");
sendToOthers = false;
}
}
protected override void UnloadData()
{
try
{
MyAPIGateway.Utilities.MessageEntered -= Utilities_MessageEntered;
ModCommunication.Unregister();
}
catch
{
//session unloading, don't care
}
}
}
}

View File

@@ -146,7 +146,7 @@ namespace Torch.Server.Managers
{ {
DedicatedConfig.Mods.Clear(); DedicatedConfig.Mods.Clear();
//remove the Torch mod to avoid running multiple copies of it //remove the Torch mod to avoid running multiple copies of it
DedicatedConfig.SelectedWorld.WorldConfiguration.Mods.RemoveAll(m => m.PublishedFileId == TorchModCore.MOD_ID); DedicatedConfig.SelectedWorld.WorldConfiguration.Mods.RemoveAll(m => m.PublishedFileId == ModCommunication.MOD_ID);
foreach (var m in DedicatedConfig.SelectedWorld.WorldConfiguration.Mods) foreach (var m in DedicatedConfig.SelectedWorld.WorldConfiguration.Mods)
DedicatedConfig.Mods.Add(new ModItemInfo(m)); DedicatedConfig.Mods.Add(new ModItemInfo(m));
Task.Run(() => DedicatedConfig.UpdateAllModInfosAsync()); Task.Run(() => DedicatedConfig.UpdateAllModInfosAsync());
@@ -161,7 +161,7 @@ namespace Torch.Server.Managers
{ {
DedicatedConfig.Mods.Clear(); DedicatedConfig.Mods.Clear();
//remove the Torch mod to avoid running multiple copies of it //remove the Torch mod to avoid running multiple copies of it
DedicatedConfig.SelectedWorld.WorldConfiguration.Mods.RemoveAll(m => m.PublishedFileId == TorchModCore.MOD_ID); DedicatedConfig.SelectedWorld.WorldConfiguration.Mods.RemoveAll(m => m.PublishedFileId == ModCommunication.MOD_ID);
foreach (var m in DedicatedConfig.SelectedWorld.WorldConfiguration.Mods) foreach (var m in DedicatedConfig.SelectedWorld.WorldConfiguration.Mods)
DedicatedConfig.Mods.Add(new ModItemInfo(m)); DedicatedConfig.Mods.Add(new ModItemInfo(m));
Task.Run(() => DedicatedConfig.UpdateAllModInfosAsync()); Task.Run(() => DedicatedConfig.UpdateAllModInfosAsync());

View File

@@ -3,11 +3,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using System.Linq; using System.Linq;
using System.Reflection;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
using Microsoft.Diagnostics.Runtime; using Microsoft.Diagnostics.Runtime;
using NLog; using NLog;
using PropertyChanged; using PropertyChanged;
@@ -21,8 +20,6 @@ using Torch.API.Session;
using Torch.Commands; using Torch.Commands;
using Torch.Managers.PatchManager; using Torch.Managers.PatchManager;
using Torch.Mod; using Torch.Mod;
using Torch.Mod.Messages;
using Torch.Patches;
using Torch.Server.Commands; using Torch.Server.Commands;
using Torch.Server.Managers; using Torch.Server.Managers;
using Torch.Utils; using Torch.Utils;
@@ -211,7 +208,7 @@ namespace Torch.Server
Environment.Exit(0); Environment.Exit(0);
#endif #endif
var exe = Assembly.GetExecutingAssembly().Location.Replace("dll", "exe"); var exe = Path.Combine(AppContext.BaseDirectory, "Torch.Server.exe");
var args = Environment.GetCommandLineArgs(); var args = Environment.GetCommandLineArgs();
@@ -229,6 +226,8 @@ namespace Torch.Server
} }
Process.Start(exe, $"--waitForPid {Environment.ProcessId} --tempAutostart true {string.Join(" ", args)}"); Process.Start(exe, $"--waitForPid {Environment.ProcessId} --tempAutostart true {string.Join(" ", args)}");
Environment.Exit(0);
}) })
{ {
Name = "Restart thread" Name = "Restart thread"
@@ -243,14 +242,12 @@ namespace Torch.Server
case TorchSessionState.Unloading: case TorchSessionState.Unloading:
_watchdog?.Dispose(); _watchdog?.Dispose();
_watchdog = null; _watchdog = null;
ModCommunication.Unregister();
break; break;
case TorchSessionState.Loaded: case TorchSessionState.Loaded:
_multiplayerManagerDedicated = CurrentSession.Managers.GetManager<MultiplayerManagerDedicated>(); _multiplayerManagerDedicated = CurrentSession.Managers.GetManager<MultiplayerManagerDedicated>();
_multiplayerManagerDedicated.PlayerJoined += MultiplayerManagerDedicatedOnPlayerJoined; _multiplayerManagerDedicated.PlayerJoined += MultiplayerManagerDedicatedOnPlayerJoined;
_multiplayerManagerDedicated.PlayerLeft += MultiplayerManagerDedicatedOnPlayerLeft; _multiplayerManagerDedicated.PlayerLeft += MultiplayerManagerDedicatedOnPlayerLeft;
CurrentSession.Managers.GetManager<CommandManager>().RegisterCommandModule(typeof(WhitelistCommands)); CurrentSession.Managers.GetManager<CommandManager>().RegisterCommandModule(typeof(WhitelistCommands));
ModCommunication.Register();
break; break;
case TorchSessionState.Loading: case TorchSessionState.Loading:
case TorchSessionState.Unloaded: case TorchSessionState.Unloaded:

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using System.Threading; using System.Threading;
using NLog; using NLog;
using VRage; using VRage;
@@ -31,7 +32,7 @@ internal class UnhandledExceptionHandler
{ {
Console.WriteLine("Restarting in 5 seconds."); Console.WriteLine("Restarting in 5 seconds.");
Thread.Sleep(5000); Thread.Sleep(5000);
var exe = typeof(Program).Assembly.Location; var exe = Path.Combine(AppContext.BaseDirectory, "Torch.Server.exe");
Process.Start(exe, $"-waitForPid {Environment.ProcessId} {_config}"); Process.Start(exe, $"-waitForPid {Environment.ProcessId} {_config}");
} }

View File

@@ -162,10 +162,10 @@
}, },
"HarmonyX": { "HarmonyX": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.10.2-prerelease", "resolved": "2.10.2-prerelease.1",
"contentHash": "a9wXURpkmi5aGTHEQiNCWv9DSKugpQLgT315wC1+zcnuxy5iUqgm7y7seH9IGDsWv7I33o6sGCUcGFAECsKusw==", "contentHash": "5hbH0ENhQ+JV7tk63fQ2ab7MtplRHKJYH1JfIjG39rlltHNXxAcGJh05an+SQbVRV4EoP/+Qm9w9BrLc3RwRMA==",
"dependencies": { "dependencies": {
"MonoModReorg.RuntimeDetour": "22.11.17-prerelease.1", "MonoModReorg.RuntimeDetour": "22.11.21-prerelease.2",
"System.Reflection.Emit": "4.7.0", "System.Reflection.Emit": "4.7.0",
"System.Reflection.Emit.Lightweight": "4.7.0" "System.Reflection.Emit.Lightweight": "4.7.0"
} }
@@ -308,11 +308,6 @@
"resolved": "7.0.0", "resolved": "7.0.0",
"contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==" "contentHash": "um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q=="
}, },
"Microsoft.NETCore.Platforms": {
"type": "Transitive",
"resolved": "2.1.0",
"contentHash": "ok+RPAtESz/9MUXeIEz6Lv5XAGQsaNmEYXMsgVALj4D7kqC8gveKWXWXbufLySR2fWrwZf8smyN5RmHu0e4BHA=="
},
"Microsoft.Xaml.Behaviors.Wpf": { "Microsoft.Xaml.Behaviors.Wpf": {
"type": "Transitive", "type": "Transitive",
"resolved": "1.1.31", "resolved": "1.1.31",
@@ -325,58 +320,63 @@
}, },
"MonoModReorg.Backports": { "MonoModReorg.Backports": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "MZXad6VJQgkFd5d4MqRcBI0EPhSDFlCl590L1rFKBJC2BqZR6DO2ZjAsRNtP8JyomFp+JzDJIqOIR+YgoWkhAg==", "contentHash": "69T6jjA5nx29jLkdqtfXKlJ8sMqIlc6czNDTomy0rbM68W0xo2JRJBgsu2mroBuqx7nvUdX+zIU6k1edS/pPbw==",
"dependencies": { "dependencies": {
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1" "MonoModReorg.ILHelpers": "22.11.21-prerelease.2"
} }
}, },
"MonoModReorg.Core": { "MonoModReorg.Core": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "2I3CRne3mAPW+z46/fmallENRCBD6ufa4sZnF7V5FleKFEwSxLkejZQfuvB/Jt4DaHo8b9ktly5UGpgcYpAOIQ==", "contentHash": "gDoxu4aAF6TeOo8rsrj5prq2X36i12ch6NeRHu/Ct0H3qoPDHuEQ6JMJN/Eiy45YrLNEN7C5+Ku4BrNX4nwVQg==",
"dependencies": { "dependencies": {
"Mono.Cecil": "0.11.4", "Mono.Cecil": "0.11.4",
"MonoModReorg.Backports": "22.11.17-prerelease.1", "MonoModReorg.Backports": "22.11.21-prerelease.2",
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1", "MonoModReorg.ILHelpers": "22.11.21-prerelease.2",
"MonoModReorg.Utils": "22.11.17-prerelease.1" "MonoModReorg.Utils": "22.11.21-prerelease.2"
} }
}, },
"MonoModReorg.ILHelpers": { "MonoModReorg.ILHelpers": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "waeN4kdsQf2cXnXJd6SpqEfp4p+8kvcftcwijkSpq8I4fPGOagfCKNKRtDo5raRsi6PuCTK+dpljRsSOYQX6vg==" "contentHash": "JtOKHJR4DEyq3HxmdEVXIxhqNQnu1KmjGFXuEQrNHoPbzi8Yr9465VKVXdsoAF0Lm8StdyJHQ03efjv3+OlonA=="
}, },
"MonoModReorg.RuntimeDetour": { "MonoModReorg.RuntimeDetour": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "gOFDFz88Lr/H5G6pQOejjvyq2lh63jLS8Fmajk0s3bt54BlW4v0pa+b3rI4ZPDOTmGdxAi1yZtREX20j6ewzqQ==", "contentHash": "Qv1h4rW03LrHwxwVuw5R6hbL8X78l8Lfnxe5tMlyVAe+AK0HnwsRzjsTwzFF57wxWUwq12NbLflkzV6T+hIhJw==",
"dependencies": { "dependencies": {
"Mono.Cecil": "0.11.4", "Mono.Cecil": "0.11.4",
"MonoModReorg.Backports": "22.11.17-prerelease.1", "MonoModReorg.Backports": "22.11.21-prerelease.2",
"MonoModReorg.Core": "22.11.17-prerelease.1", "MonoModReorg.Core": "22.11.21-prerelease.2",
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1", "MonoModReorg.ILHelpers": "22.11.21-prerelease.2",
"MonoModReorg.Utils": "22.11.17-prerelease.1" "MonoModReorg.Utils": "22.11.21-prerelease.2"
} }
}, },
"MonoModReorg.Utils": { "MonoModReorg.Utils": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "i/F1vekXLt7jHGWqM05naWIsp5cQ5L3tCP4efcpAT3O/lrtPL6nmL7/9u+FV4Ip/jp5HNKqMHR67CdMWNh9aOA==", "contentHash": "TX+vlgg2/x8rzEOqwiAy2qv61FjlJsr4u10WGTekCkulZVmmC+xxDmK+4Do9noXF/4RlgFN6sR3m9/W8KvJq3g==",
"dependencies": { "dependencies": {
"Mono.Cecil": "0.11.4", "Mono.Cecil": "0.11.4",
"MonoModReorg.Backports": "22.11.17-prerelease.1", "MonoModReorg.Backports": "22.11.21-prerelease.2",
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1" "MonoModReorg.ILHelpers": "22.11.21-prerelease.2"
} }
}, },
"protobuf-net": { "protobuf-net": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.4.7", "resolved": "3.1.26",
"contentHash": "0+zS9IjL7DIcnJ1tz0KQ3luhS4BlmvGzX04dju7ejhX3P91AZ33AMF3nL6z3Hh2bB5+JW6U/Fmo8PrmheKnm4g==", "contentHash": "iy+VROYtWZEqDvkUjS6FfzKZNpWRoVGc5h0cupGQT/37Ox0LxPblRKLnw6V0RT1MPclLo8nZp7E2M0f7PNn/Tw==",
"dependencies": { "dependencies": {
"System.ServiceModel.Primitives": "4.5.3" "protobuf-net.Core": "3.1.26"
} }
}, },
"protobuf-net.Core": {
"type": "Transitive",
"resolved": "3.1.26",
"contentHash": "fuKoDWgAf5ju+ixbJoasVFhnUaT0oWUgrWh1AZ5D0Y5keKHpA93vQB5g6aQNtB4zgeQ4hGEeh0MY9bIbAUPgEw=="
},
"SemanticVersioning": { "SemanticVersioning": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.2", "resolved": "2.0.2",
@@ -413,21 +413,6 @@
"resolved": "4.5.5", "resolved": "4.5.5",
"contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==" "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw=="
}, },
"System.Private.ServiceModel": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "ancrQgJagx+yC4SZbuE+eShiEAUIF0E1d21TRSoy1C/rTwafAVcBr/fKibkq5TQzyy9uNil2tx2/iaUxsy0S9g==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.1.0",
"System.Reflection.DispatchProxy": "4.5.0",
"System.Security.Principal.Windows": "4.5.0"
}
},
"System.Reflection.DispatchProxy": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "+UW1hq11TNSeb+16rIk8hRQ02o339NFyzMc4ma/FqmxBzM30l1c2IherBB4ld1MNcenS48fz8tbt50OW4rVULA=="
},
"System.Reflection.Emit": { "System.Reflection.Emit": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "4.7.0",
@@ -464,22 +449,6 @@
"System.Security.Cryptography.Pkcs": "7.0.0" "System.Security.Cryptography.Pkcs": "7.0.0"
} }
}, },
"System.Security.Principal.Windows": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.0.0"
}
},
"System.ServiceModel.Primitives": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "Wc9Hgg4Cmqi416zvEgq2sW1YYCGuhwWzspDclJWlFZqY6EGhFUPZU+kVpl5z9kAgrSOQP7/Uiik+PtSQtmq+5A==",
"dependencies": {
"System.Private.ServiceModel": "4.5.3"
}
},
"System.Text.Encoding.CodePages": { "System.Text.Encoding.CodePages": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "6.0.0",
@@ -511,16 +480,16 @@
"type": "Project", "type": "Project",
"dependencies": { "dependencies": {
"ControlzEx": "[5.0.2, )", "ControlzEx": "[5.0.2, )",
"HarmonyX": "[2.10.2-prerelease, )", "HarmonyX": "[2.10.2-prerelease.1, )",
"MahApps.Metro": "[2.4.9, )", "MahApps.Metro": "[2.4.9, )",
"Microsoft.CodeAnalysis.CSharp": "[4.4.0, )", "Microsoft.CodeAnalysis.CSharp": "[4.4.0, )",
"Microsoft.CodeAnalysis.Common": "[4.4.0, )", "Microsoft.CodeAnalysis.Common": "[4.4.0, )",
"MonoModReorg.RuntimeDetour": "[22.11.17-prerelease.1, )", "MonoModReorg.RuntimeDetour": "[22.11.21-prerelease.2, )",
"NLog": "[5.1.0, )", "NLog": "[5.1.0, )",
"System.ComponentModel.Annotations": "[5.0.0, )", "System.ComponentModel.Annotations": "[5.0.0, )",
"Torch.API": "[1.0.0, )", "Torch.API": "[1.0.0, )",
"Torch.SixLabors.ImageSharp": "[1.0.0-beta6, )", "Torch.SixLabors.ImageSharp": "[1.0.0-beta6, )",
"protobuf-net": "[2.4.7, )" "protobuf-net": "[3.1.26, )"
} }
}, },
"torch.api": { "torch.api": {
@@ -548,16 +517,6 @@
"System.CodeDom": "7.0.0" "System.CodeDom": "7.0.0"
} }
}, },
"System.Private.ServiceModel": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "ancrQgJagx+yC4SZbuE+eShiEAUIF0E1d21TRSoy1C/rTwafAVcBr/fKibkq5TQzyy9uNil2tx2/iaUxsy0S9g==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.1.0",
"System.Reflection.DispatchProxy": "4.5.0",
"System.Security.Principal.Windows": "4.5.0"
}
},
"System.Security.Cryptography.Pkcs": { "System.Security.Cryptography.Pkcs": {
"type": "Transitive", "type": "Transitive",
"resolved": "7.0.0", "resolved": "7.0.0",
@@ -566,14 +525,6 @@
"System.Formats.Asn1": "7.0.0" "System.Formats.Asn1": "7.0.0"
} }
}, },
"System.Security.Principal.Windows": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.0.0"
}
},
"System.Text.Encoding.CodePages": { "System.Text.Encoding.CodePages": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "6.0.0",

View File

@@ -2,6 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using NLog; using NLog;
@@ -9,7 +10,7 @@ using Torch.API;
namespace Torch.Managers namespace Torch.Managers
{ {
public class FilesystemManager : Manager public partial class FilesystemManager : Manager
{ {
private static readonly Logger _log = LogManager.GetCurrentClassLogger(); private static readonly Logger _log = LogManager.GetCurrentClassLogger();
/// <summary> /// <summary>
@@ -51,19 +52,27 @@ namespace Torch.Managers
} }
} }
/// <summary>
/// Move the given file (if it exists) to a temporary directory that will be cleared the next time the application starts.
/// </summary>
public void SoftDelete(string path, string file) public void SoftDelete(string path, string file)
{ {
string source = Path.Combine(path, file); var source = Path.Combine(path, file);
if (!File.Exists(source)) if (!File.Exists(source))
return; return;
var rand = Path.GetRandomFileName();
var dest = Path.Combine(TempDirectory, rand); var tempFilePath = Path.Combine(path, file + ".old");
File.Move(source, rand); if (File.Exists(tempFilePath))
string rsource = Path.Combine(path, rand); File.Delete(tempFilePath);
File.Move(rsource, dest);
var errorCode = Rename(source, tempFilePath);
if (Marshal.GetExceptionForHR(errorCode) is { } exception)
throw exception;
} }
[LibraryImport("msvcrt", SetLastError = true, EntryPoint = "rename")]
[UnmanagedCallConv(CallConvs = new[] { typeof(System.Runtime.CompilerServices.CallConvCdecl) })]
private static partial int Rename(
[MarshalAs(UnmanagedType.LPWStr)]
string oldpath,
[MarshalAs(UnmanagedType.LPWStr)]
string newpath);
} }
} }

View File

@@ -100,8 +100,17 @@ namespace Torch.Managers
_log.Debug($"Unzipping {file.FullName}"); _log.Debug($"Unzipping {file.FullName}");
var targetFile = Path.Combine(extractPath, file.FullName); var targetFile = Path.Combine(extractPath, file.FullName);
_fsManager.SoftDelete(extractPath, file.FullName);
file.ExtractToFile(targetFile, true); // if its a directory
if (Path.GetFileName(targetFile).Length == 0)
{
Directory.CreateDirectory(targetFile);
}
else
{
_fsManager.SoftDelete(extractPath, file.FullName);
file.ExtractToFile(targetFile, true);
}
} }
//zip.ExtractToDirectory(extractPath); //throws exceptions sometimes? //zip.ExtractToDirectory(extractPath); //throws exceptions sometimes?

View File

@@ -1,10 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using Sandbox; using Sandbox;
using Sandbox.Game.Entities; using Sandbox.Game.Entities;
using Torch.Utils; using Torch.Utils;
@@ -69,6 +66,8 @@ namespace Torch.Patches
} }
} }
MyEntities.Orchestrator = new MyParallelEntityUpdateOrchestrator();
// static MyObjectPoolManager() // static MyObjectPoolManager()
// Render, so should be fine. // Render, so should be fine.
} }

View File

@@ -429,7 +429,7 @@ namespace Torch.Managers
if (a.Version is null || b.Version is null) if (a.Version is null || b.Version is null)
return a.Name == b.Name; return a.Name == b.Name;
return a.Name == b.Name && a.Version.Major == b.Version.Major && a.Version.Minor == b.Version.Minor; return a.Name == b.Name && b.Version >= a.Version;
} }
private void InstantiatePlugin(PluginManifest manifest, IEnumerable<Assembly> assemblies) private void InstantiatePlugin(PluginManifest manifest, IEnumerable<Assembly> assemblies)

View File

@@ -50,7 +50,7 @@ namespace Torch.Session
{ {
_overrideMods = new Dictionary<ulong, MyObjectBuilder_Checkpoint.ModItem>(); _overrideMods = new Dictionary<ulong, MyObjectBuilder_Checkpoint.ModItem>();
if (Torch.Config.UgcServiceType == UGCServiceType.Steam) if (Torch.Config.UgcServiceType == UGCServiceType.Steam)
_overrideMods.Add(TorchModCore.MOD_ID, ModItemUtils.Create(TorchModCore.MOD_ID)); _overrideMods.Add(ModCommunication.MOD_ID, ModItemUtils.Create(ModCommunication.MOD_ID));
} }
/// <inheritdoc/> /// <inheritdoc/>

View File

@@ -13,6 +13,7 @@
<Platforms>AnyCPU</Platforms> <Platforms>AnyCPU</Platforms>
<EnableWindowsTargeting>true</EnableWindowsTargeting> <EnableWindowsTargeting>true</EnableWindowsTargeting>
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile> <RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
<DefineConstants>TRACE;TORCH</DefineConstants>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="$(Configuration) == 'Release'"> <PropertyGroup Condition="$(Configuration) == 'Release'">
@@ -23,15 +24,15 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="ControlzEx" Version="5.0.2" /> <PackageReference Include="ControlzEx" Version="5.0.2" />
<PackageReference Include="HarmonyX" Version="2.10.2-prerelease" /> <PackageReference Include="HarmonyX" Version="2.10.2-prerelease.1" />
<PackageReference Include="InfoOf.Fody" Version="2.1.1" PrivateAssets="all" /> <PackageReference Include="InfoOf.Fody" Version="2.1.1" PrivateAssets="all" />
<PackageReference Include="MahApps.Metro" Version="2.4.9" /> <PackageReference Include="MahApps.Metro" Version="2.4.9" />
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.4.0" /> <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.4.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.4.0" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.4.0" />
<PackageReference Include="MonoModReorg.RuntimeDetour" Version="22.11.17-prerelease.1" /> <PackageReference Include="MonoModReorg.RuntimeDetour" Version="22.11.21-prerelease.2" />
<PackageReference Include="NLog" Version="5.1.0" /> <PackageReference Include="NLog" Version="5.1.0" />
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0" PrivateAssets="all" /> <PackageReference Include="PropertyChanged.Fody" Version="4.1.0" PrivateAssets="all" />
<PackageReference Include="protobuf-net" Version="2.4.7" /> <PackageReference Include="protobuf-net" Version="3.1.26" />
<PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" /> <PackageReference Include="System.ComponentModel.Annotations" Version="5.0.0" />
<PackageReference Include="Torch.SixLabors.ImageSharp" Version="1.0.0-beta6" /> <PackageReference Include="Torch.SixLabors.ImageSharp" Version="1.0.0-beta6" />
<PackageReference Include="SpaceEngineersDedicated.ReferenceAssemblies" Version="1.201.13"> <PackageReference Include="SpaceEngineersDedicated.ReferenceAssemblies" Version="1.201.13">

View File

@@ -240,6 +240,7 @@ namespace Torch
_log.Info("Services initialized"); _log.Info("Services initialized");
MySandboxGame.InitMultithreading(); MySandboxGame.InitMultithreading();
MyVRage.Platform.System.OnThreadpoolInitialized();
// MyInitializer.InitCheckSum(); // MyInitializer.InitCheckSum();
@@ -309,6 +310,7 @@ namespace Torch
_getVRagePluginList().Remove(_torch); _getVRagePluginList().Remove(_torch);
MyInitializer.InvokeAfterRun(); MyInitializer.InvokeAfterRun();
MyVRage.Done();
} }
private void DoStart() private void DoStart()

View File

@@ -14,11 +14,11 @@
}, },
"HarmonyX": { "HarmonyX": {
"type": "Direct", "type": "Direct",
"requested": "[2.10.2-prerelease, )", "requested": "[2.10.2-prerelease.1, )",
"resolved": "2.10.2-prerelease", "resolved": "2.10.2-prerelease.1",
"contentHash": "a9wXURpkmi5aGTHEQiNCWv9DSKugpQLgT315wC1+zcnuxy5iUqgm7y7seH9IGDsWv7I33o6sGCUcGFAECsKusw==", "contentHash": "5hbH0ENhQ+JV7tk63fQ2ab7MtplRHKJYH1JfIjG39rlltHNXxAcGJh05an+SQbVRV4EoP/+Qm9w9BrLc3RwRMA==",
"dependencies": { "dependencies": {
"MonoModReorg.RuntimeDetour": "22.11.17-prerelease.1", "MonoModReorg.RuntimeDetour": "22.11.21-prerelease.2",
"System.Reflection.Emit": "4.7.0", "System.Reflection.Emit": "4.7.0",
"System.Reflection.Emit.Lightweight": "4.7.0" "System.Reflection.Emit.Lightweight": "4.7.0"
} }
@@ -67,15 +67,15 @@
}, },
"MonoModReorg.RuntimeDetour": { "MonoModReorg.RuntimeDetour": {
"type": "Direct", "type": "Direct",
"requested": "[22.11.17-prerelease.1, )", "requested": "[22.11.21-prerelease.2, )",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "gOFDFz88Lr/H5G6pQOejjvyq2lh63jLS8Fmajk0s3bt54BlW4v0pa+b3rI4ZPDOTmGdxAi1yZtREX20j6ewzqQ==", "contentHash": "Qv1h4rW03LrHwxwVuw5R6hbL8X78l8Lfnxe5tMlyVAe+AK0HnwsRzjsTwzFF57wxWUwq12NbLflkzV6T+hIhJw==",
"dependencies": { "dependencies": {
"Mono.Cecil": "0.11.4", "Mono.Cecil": "0.11.4",
"MonoModReorg.Backports": "22.11.17-prerelease.1", "MonoModReorg.Backports": "22.11.21-prerelease.2",
"MonoModReorg.Core": "22.11.17-prerelease.1", "MonoModReorg.Core": "22.11.21-prerelease.2",
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1", "MonoModReorg.ILHelpers": "22.11.21-prerelease.2",
"MonoModReorg.Utils": "22.11.17-prerelease.1" "MonoModReorg.Utils": "22.11.21-prerelease.2"
} }
}, },
"NLog": { "NLog": {
@@ -95,11 +95,11 @@
}, },
"protobuf-net": { "protobuf-net": {
"type": "Direct", "type": "Direct",
"requested": "[2.4.7, )", "requested": "[3.1.26, )",
"resolved": "2.4.7", "resolved": "3.1.26",
"contentHash": "0+zS9IjL7DIcnJ1tz0KQ3luhS4BlmvGzX04dju7ejhX3P91AZ33AMF3nL6z3Hh2bB5+JW6U/Fmo8PrmheKnm4g==", "contentHash": "iy+VROYtWZEqDvkUjS6FfzKZNpWRoVGc5h0cupGQT/37Ox0LxPblRKLnw6V0RT1MPclLo8nZp7E2M0f7PNn/Tw==",
"dependencies": { "dependencies": {
"System.ServiceModel.Primitives": "4.5.3" "protobuf-net.Core": "3.1.26"
} }
}, },
"SpaceEngineersDedicated.ReferenceAssemblies": { "SpaceEngineersDedicated.ReferenceAssemblies": {
@@ -142,11 +142,6 @@
"resolved": "3.3.3", "resolved": "3.3.3",
"contentHash": "j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ==" "contentHash": "j/rOZtLMVJjrfLRlAMckJLPW/1rze9MT1yfWqSIbUPGRu1m1P0fuo9PmqapwsmePfGB5PJrudQLvmUOAMF0DqQ=="
}, },
"Microsoft.NETCore.Platforms": {
"type": "Transitive",
"resolved": "2.1.0",
"contentHash": "ok+RPAtESz/9MUXeIEz6Lv5XAGQsaNmEYXMsgVALj4D7kqC8gveKWXWXbufLySR2fWrwZf8smyN5RmHu0e4BHA=="
},
"Microsoft.Xaml.Behaviors.Wpf": { "Microsoft.Xaml.Behaviors.Wpf": {
"type": "Transitive", "type": "Transitive",
"resolved": "1.1.31", "resolved": "1.1.31",
@@ -159,38 +154,43 @@
}, },
"MonoModReorg.Backports": { "MonoModReorg.Backports": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "MZXad6VJQgkFd5d4MqRcBI0EPhSDFlCl590L1rFKBJC2BqZR6DO2ZjAsRNtP8JyomFp+JzDJIqOIR+YgoWkhAg==", "contentHash": "69T6jjA5nx29jLkdqtfXKlJ8sMqIlc6czNDTomy0rbM68W0xo2JRJBgsu2mroBuqx7nvUdX+zIU6k1edS/pPbw==",
"dependencies": { "dependencies": {
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1" "MonoModReorg.ILHelpers": "22.11.21-prerelease.2"
} }
}, },
"MonoModReorg.Core": { "MonoModReorg.Core": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "2I3CRne3mAPW+z46/fmallENRCBD6ufa4sZnF7V5FleKFEwSxLkejZQfuvB/Jt4DaHo8b9ktly5UGpgcYpAOIQ==", "contentHash": "gDoxu4aAF6TeOo8rsrj5prq2X36i12ch6NeRHu/Ct0H3qoPDHuEQ6JMJN/Eiy45YrLNEN7C5+Ku4BrNX4nwVQg==",
"dependencies": { "dependencies": {
"Mono.Cecil": "0.11.4", "Mono.Cecil": "0.11.4",
"MonoModReorg.Backports": "22.11.17-prerelease.1", "MonoModReorg.Backports": "22.11.21-prerelease.2",
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1", "MonoModReorg.ILHelpers": "22.11.21-prerelease.2",
"MonoModReorg.Utils": "22.11.17-prerelease.1" "MonoModReorg.Utils": "22.11.21-prerelease.2"
} }
}, },
"MonoModReorg.ILHelpers": { "MonoModReorg.ILHelpers": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "waeN4kdsQf2cXnXJd6SpqEfp4p+8kvcftcwijkSpq8I4fPGOagfCKNKRtDo5raRsi6PuCTK+dpljRsSOYQX6vg==" "contentHash": "JtOKHJR4DEyq3HxmdEVXIxhqNQnu1KmjGFXuEQrNHoPbzi8Yr9465VKVXdsoAF0Lm8StdyJHQ03efjv3+OlonA=="
}, },
"MonoModReorg.Utils": { "MonoModReorg.Utils": {
"type": "Transitive", "type": "Transitive",
"resolved": "22.11.17-prerelease.1", "resolved": "22.11.21-prerelease.2",
"contentHash": "i/F1vekXLt7jHGWqM05naWIsp5cQ5L3tCP4efcpAT3O/lrtPL6nmL7/9u+FV4Ip/jp5HNKqMHR67CdMWNh9aOA==", "contentHash": "TX+vlgg2/x8rzEOqwiAy2qv61FjlJsr4u10WGTekCkulZVmmC+xxDmK+4Do9noXF/4RlgFN6sR3m9/W8KvJq3g==",
"dependencies": { "dependencies": {
"Mono.Cecil": "0.11.4", "Mono.Cecil": "0.11.4",
"MonoModReorg.Backports": "22.11.17-prerelease.1", "MonoModReorg.Backports": "22.11.21-prerelease.2",
"MonoModReorg.ILHelpers": "22.11.17-prerelease.1" "MonoModReorg.ILHelpers": "22.11.21-prerelease.2"
} }
}, },
"protobuf-net.Core": {
"type": "Transitive",
"resolved": "3.1.26",
"contentHash": "fuKoDWgAf5ju+ixbJoasVFhnUaT0oWUgrWh1AZ5D0Y5keKHpA93vQB5g6aQNtB4zgeQ4hGEeh0MY9bIbAUPgEw=="
},
"SemanticVersioning": { "SemanticVersioning": {
"type": "Transitive", "type": "Transitive",
"resolved": "2.0.2", "resolved": "2.0.2",
@@ -217,21 +217,6 @@
"resolved": "4.5.5", "resolved": "4.5.5",
"contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==" "contentHash": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw=="
}, },
"System.Private.ServiceModel": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "ancrQgJagx+yC4SZbuE+eShiEAUIF0E1d21TRSoy1C/rTwafAVcBr/fKibkq5TQzyy9uNil2tx2/iaUxsy0S9g==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.1.0",
"System.Reflection.DispatchProxy": "4.5.0",
"System.Security.Principal.Windows": "4.5.0"
}
},
"System.Reflection.DispatchProxy": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "+UW1hq11TNSeb+16rIk8hRQ02o339NFyzMc4ma/FqmxBzM30l1c2IherBB4ld1MNcenS48fz8tbt50OW4rVULA=="
},
"System.Reflection.Emit": { "System.Reflection.Emit": {
"type": "Transitive", "type": "Transitive",
"resolved": "4.7.0", "resolved": "4.7.0",
@@ -252,22 +237,6 @@
"resolved": "6.0.0", "resolved": "6.0.0",
"contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==" "contentHash": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg=="
}, },
"System.Security.Principal.Windows": {
"type": "Transitive",
"resolved": "4.5.0",
"contentHash": "U77HfRXlZlOeIXd//Yoj6Jnk8AXlbeisf1oq1os+hxOGVnuG+lGSfGqTwTZBoORFF6j/0q7HXIl8cqwQ9aUGqQ==",
"dependencies": {
"Microsoft.NETCore.Platforms": "2.0.0"
}
},
"System.ServiceModel.Primitives": {
"type": "Transitive",
"resolved": "4.5.3",
"contentHash": "Wc9Hgg4Cmqi416zvEgq2sW1YYCGuhwWzspDclJWlFZqY6EGhFUPZU+kVpl5z9kAgrSOQP7/Uiik+PtSQtmq+5A==",
"dependencies": {
"System.Private.ServiceModel": "4.5.3"
}
},
"System.Text.Encoding.CodePages": { "System.Text.Encoding.CodePages": {
"type": "Transitive", "type": "Transitive",
"resolved": "6.0.0", "resolved": "6.0.0",