Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
6bcd2ea58e | ||
![]() |
b8a06f7bd7 | ||
![]() |
d44b1a592c | ||
![]() |
d7d556d2f2 | ||
![]() |
850b313269 | ||
![]() |
fe985e1a9c | ||
![]() |
aeea192860 | ||
![]() |
b8be5b2dce | ||
![]() |
ea08d60d58 | ||
![]() |
6493a305f7 | ||
![]() |
bc0a2b89b8 | ||
![]() |
846c2aa42e |
12
.github/workflows/release.yaml
vendored
12
.github/workflows/release.yaml
vendored
@@ -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
|
||||||
|
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -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);
|
||||||
|
@@ -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,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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;
|
}
|
||||||
|
#endif
|
||||||
message.TargetType = MessageTarget.Server;
|
|
||||||
_processing.Add(message);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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>
|
@@ -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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@@ -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());
|
||||||
|
@@ -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:
|
||||||
|
@@ -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}");
|
||||||
}
|
}
|
||||||
|
@@ -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",
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -100,9 +100,18 @@ 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);
|
||||||
|
|
||||||
|
// if its a directory
|
||||||
|
if (Path.GetFileName(targetFile).Length == 0)
|
||||||
|
{
|
||||||
|
Directory.CreateDirectory(targetFile);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
_fsManager.SoftDelete(extractPath, file.FullName);
|
_fsManager.SoftDelete(extractPath, file.FullName);
|
||||||
file.ExtractToFile(targetFile, true);
|
file.ExtractToFile(targetFile, true);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//zip.ExtractToDirectory(extractPath); //throws exceptions sometimes?
|
//zip.ExtractToDirectory(extractPath); //throws exceptions sometimes?
|
||||||
}
|
}
|
||||||
|
@@ -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.
|
||||||
}
|
}
|
||||||
|
@@ -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)
|
||||||
|
@@ -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/>
|
||||||
|
@@ -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">
|
||||||
|
@@ -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()
|
||||||
|
@@ -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",
|
||||||
|
Reference in New Issue
Block a user