]> git.deb.at Git - rhonda/impostor.git/commitdiff
Remove reactor stuff
authorjs6pak <kubastaron@hotmail.com>
Thu, 25 Mar 2021 21:17:31 +0000 (22:17 +0100)
committerjs6pak <kubastaron@hotmail.com>
Fri, 2 Apr 2021 22:12:15 +0000 (00:12 +0200)
27 files changed:
src/Impostor.Api/Net/IClient.cs
src/Impostor.Api/Net/Inner/RpcCalls.cs
src/Impostor.Api/Net/Messages/C2S/HandshakeC2S.cs [new file with mode: 0644]
src/Impostor.Api/Reactor/Mod.cs [deleted file]
src/Impostor.Api/Reactor/ModList.cs [deleted file]
src/Impostor.Api/Reactor/ModdedHandshakeC2S.cs [deleted file]
src/Impostor.Api/Reactor/ModdedHandshakeS2C.cs [deleted file]
src/Impostor.Api/Reactor/PluginSide.cs [deleted file]
src/Impostor.Server/Net/Client.cs
src/Impostor.Server/Net/ClientBase.cs
src/Impostor.Server/Net/Factories/ClientFactory.cs
src/Impostor.Server/Net/Factories/IClientFactory.cs
src/Impostor.Server/Net/Inner/InnerNetObject.cs
src/Impostor.Server/Net/Inner/Objects/Components/InnerPlayerPhysics.cs
src/Impostor.Server/Net/Inner/Objects/InnerGameData.cs
src/Impostor.Server/Net/Inner/Objects/InnerMeetingHud.cs
src/Impostor.Server/Net/Inner/Objects/InnerPlayerControl.cs
src/Impostor.Server/Net/Inner/Objects/InnerShipStatus.cs
src/Impostor.Server/Net/Manager/ClientManager.cs
src/Impostor.Server/Net/Matchmaker.cs
src/Impostor.Server/Net/Redirector/ClientRedirector.cs
src/Impostor.Server/Net/State/Game.Incoming.cs
src/Impostor.Server/Program.cs
src/Impostor.Server/Recorder/ClientRecorder.cs
src/Impostor.Server/Recorder/PacketRecorder.cs
src/Impostor.Server/Utils/DotnetUtils.cs
src/Impostor.Tools.ServerReplay/Program.cs

index d9631d7d6c74bbb30403ea0b6de95567f3a07107..66ab9c5efdfd97e416c5c934488effc814a6be02 100644 (file)
@@ -2,7 +2,6 @@
 using System.Threading.Tasks;
 using Impostor.Api.Innersloth;
 using Impostor.Api.Net.Messages;
-using Impostor.Api.Reactor;
 
 namespace Impostor.Api.Net
 {
@@ -28,11 +27,6 @@ namespace Impostor.Api.Net
         /// </remarks>
         string Name { get; }
 
-        /// <summary>
-        ///     Gets mods sent by client in modded handshake.
-        /// </summary>
-        ISet<Mod> Mods { get; }
-
         /// <summary>
         ///     Gets the connection of the client.
         /// </summary>
index e75f80ec228323a78159ac5f50e0f562f1079357..506017d1a864f00e8a6da67d98b5b460782b4f15 100644 (file)
@@ -33,6 +33,5 @@
         RepairSystem = 28,
         SetTasks = 29,
         UpdateGameData = 30,
-        CustomRpc = byte.MaxValue,
     }
 }
diff --git a/src/Impostor.Api/Net/Messages/C2S/HandshakeC2S.cs b/src/Impostor.Api/Net/Messages/C2S/HandshakeC2S.cs
new file mode 100644 (file)
index 0000000..649e5ee
--- /dev/null
@@ -0,0 +1,12 @@
+namespace Impostor.Api.Net.Messages.C2S
+{
+    public static class HandshakeC2S
+    {
+        public static void Deserialize(IMessageReader reader, out int clientVersion, out string name, out uint lastNonceReceived)
+        {
+            clientVersion = reader.ReadInt32();
+            name = reader.ReadString();
+            lastNonceReceived = reader.ReadUInt32();
+        }
+    }
+}
diff --git a/src/Impostor.Api/Reactor/Mod.cs b/src/Impostor.Api/Reactor/Mod.cs
deleted file mode 100644 (file)
index 2654c5f..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-namespace Impostor.Api.Reactor
-{
-    public readonly struct Mod
-    {
-        public readonly string Id;
-        public readonly string Version;
-        public readonly PluginSide Side;
-
-        public Mod(string id, string version, PluginSide side)
-        {
-            Id = id;
-            Version = version;
-            Side = side;
-        }
-
-        public override string ToString()
-        {
-            return $"{Id} ({Version})";
-        }
-    }
-}
diff --git a/src/Impostor.Api/Reactor/ModList.cs b/src/Impostor.Api/Reactor/ModList.cs
deleted file mode 100644 (file)
index 047c8b4..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-using System.Collections.Generic;
-using Impostor.Api.Net.Messages;
-
-namespace Impostor.Api.Reactor
-{
-    public static class ModList
-    {
-        public static void Deserialize(IMessageReader reader, out ISet<Mod> mods)
-        {
-            var length = reader.ReadPackedInt32();
-
-            mods = new HashSet<Mod>(length);
-
-            for (var i = 0; i < length; i++)
-            {
-                var id = reader.ReadString();
-                var version = reader.ReadString();
-                var pluginSide = (PluginSide)reader.ReadByte();
-
-                mods.Add(new Mod(id, version, pluginSide));
-            }
-        }
-    }
-}
diff --git a/src/Impostor.Api/Reactor/ModdedHandshakeC2S.cs b/src/Impostor.Api/Reactor/ModdedHandshakeC2S.cs
deleted file mode 100644 (file)
index a796712..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-using System.Collections.Generic;
-using Impostor.Api.Net.Messages;
-
-namespace Impostor.Api.Reactor
-{
-    public static class ModdedHandshakeC2S
-    {
-        public static void Deserialize(IMessageReader reader, out int clientVersion, out string name, out ISet<Mod>? mods)
-        {
-            clientVersion = reader.ReadInt32();
-            name = reader.ReadString();
-
-            if (reader.Length > reader.Position)
-            {
-                ModList.Deserialize(reader, out mods);
-            }
-            else
-            {
-                mods = null;
-            }
-        }
-    }
-}
diff --git a/src/Impostor.Api/Reactor/ModdedHandshakeS2C.cs b/src/Impostor.Api/Reactor/ModdedHandshakeS2C.cs
deleted file mode 100644 (file)
index 07f4f9c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-using Impostor.Api.Net.Messages;
-
-namespace Impostor.Api.Reactor
-{
-    public static class ModdedHandshakeS2C
-    {
-        public static void Serialize(IMessageWriter writer, string serverBrand)
-        {
-            writer.StartMessage(byte.MaxValue);
-            writer.Write(serverBrand);
-            writer.EndMessage();
-        }
-    }
-}
diff --git a/src/Impostor.Api/Reactor/PluginSide.cs b/src/Impostor.Api/Reactor/PluginSide.cs
deleted file mode 100644 (file)
index 4523dfc..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-namespace Impostor.Api.Reactor
-{
-    /// <summary>
-    ///     Plugin side used in modded handshake.
-    /// </summary>
-    public enum PluginSide : byte
-    {
-        /// <summary>
-        ///     Required by both sides, reject connection if missing on the other side
-        /// </summary>
-        Both,
-
-        /// <summary>
-        ///     Required only by client
-        /// </summary>
-        ClientOnly,
-
-        /// <summary>
-        ///     Required only by server
-        /// </summary>
-        ServerOnly,
-    }
-}
index 45718e5830182a9659834b1b38c0b38548ef02d3..6c5547ec00cbbf18adbadfdcd2239fb55e030baa 100644 (file)
@@ -1,5 +1,4 @@
 using System;
-using System.Collections.Generic;
 using System.Threading.Tasks;
 using Impostor.Api;
 using Impostor.Api.Games;
@@ -8,7 +7,6 @@ using Impostor.Api.Net;
 using Impostor.Api.Net.Messages;
 using Impostor.Api.Net.Messages.C2S;
 using Impostor.Api.Net.Messages.S2C;
-using Impostor.Api.Reactor;
 using Impostor.Hazel;
 using Impostor.Server.Config;
 using Impostor.Server.Net.Manager;
@@ -24,8 +22,8 @@ namespace Impostor.Server.Net
         private readonly ClientManager _clientManager;
         private readonly GameManager _gameManager;
 
-        public Client(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, string name, int gameVersion, IHazelConnection connection, ISet<Mod> mods)
-            : base(name, gameVersion, connection, mods)
+        public Client(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, string name, int gameVersion, IHazelConnection connection)
+            : base(name, gameVersion, connection)
         {
             _logger = logger;
             _antiCheatConfig = antiCheatOptions.Value;
index 78bcb9ec5807ba0d887933af8470598bf94c0e81..9874a71716934b3f41fef7e5d1142c33e69e2843 100644 (file)
@@ -1,14 +1,12 @@
 using System;
 using System.Collections.Concurrent;
 using System.Collections.Generic;
-using System.Linq;
 using System.Threading.Tasks;
 using Impostor.Api;
 using Impostor.Api.Innersloth;
 using Impostor.Api.Net;
 using Impostor.Api.Net.Messages;
 using Impostor.Api.Net.Messages.S2C;
-using Impostor.Api.Reactor;
 using Impostor.Hazel;
 using Impostor.Server.Net.State;
 
@@ -16,25 +14,12 @@ namespace Impostor.Server.Net
 {
     internal abstract class ClientBase : IClient
     {
-        protected ClientBase(string name, int gameVersion, IHazelConnection connection, ISet<Mod> mods)
+        protected ClientBase(string name, int gameVersion, IHazelConnection connection)
         {
             Name = name;
             GameVersion = gameVersion;
             Connection = connection;
-            Mods = mods;
             Items = new ConcurrentDictionary<object, object>();
-
-            ModIdMap = new Dictionary<int, string>();
-
-            var i = -1;
-
-            foreach (var mod in mods.OrderBy(x => x.Id))
-            {
-                if (mod.Side == PluginSide.Both)
-                {
-                    ModIdMap[i--] = mod.Id;
-                }
-            }
         }
 
         public int Id { get; set; }
@@ -43,10 +28,6 @@ namespace Impostor.Server.Net
 
         public int GameVersion { get; }
 
-        public ISet<Mod> Mods { get; }
-
-        public Dictionary<int, string> ModIdMap { get; }
-
         public IHazelConnection Connection { get; }
 
         public IDictionary<object, object> Items { get; }
index 985ab4e0ecdeb438ea811b1d2141c740c25259b4..e7d3e668f26cc51862e170b1b02732232b6fe7bf 100644 (file)
@@ -1,7 +1,5 @@
 using System;
-using System.Collections.Generic;
 using Impostor.Api.Net;
-using Impostor.Api.Reactor;
 using Microsoft.Extensions.DependencyInjection;
 
 namespace Impostor.Server.Net.Factories
@@ -16,9 +14,9 @@ namespace Impostor.Server.Net.Factories
             _serviceProvider = serviceProvider;
         }
 
-        public ClientBase Create(IHazelConnection connection, string name, int clientVersion, ISet<Mod> mods)
+        public ClientBase Create(IHazelConnection connection, string name, int clientVersion)
         {
-            var client = ActivatorUtilities.CreateInstance<TClient>(_serviceProvider, name, clientVersion, connection, mods);
+            var client = ActivatorUtilities.CreateInstance<TClient>(_serviceProvider, name, clientVersion, connection);
             connection.Client = client;
             return client;
         }
index a72a23bab026eb93c63763358bc64536265f06d8..11a1ddc958b21a2bf91b7b47b9a9c741e9f34cb1 100644 (file)
@@ -1,11 +1,9 @@
-using System.Collections.Generic;
-using Impostor.Api.Net;
-using Impostor.Api.Reactor;
+using Impostor.Api.Net;
 
 namespace Impostor.Server.Net.Factories
 {
     internal interface IClientFactory
     {
-        ClientBase Create(IHazelConnection connection, string name, int clientVersion, ISet<Mod> mods);
+        ClientBase Create(IHazelConnection connection, string name, int clientVersion);
     }
 }
index 8cbea9a26ed0a04cd853884be70f0a1f08ec571e..073e5811f424e969aabc1762c4617f76859450c5 100644 (file)
@@ -27,19 +27,5 @@ namespace Impostor.Server.Net.Inner
         public abstract ValueTask DeserializeAsync(IClientPlayer sender, IClientPlayer? target, IMessageReader reader, bool initialState);
 
         public abstract ValueTask<bool> HandleRpcAsync(ClientPlayer sender, ClientPlayer? target, RpcCalls call, IMessageReader reader);
-
-        // TODO move to Reactor.Impostor plugin
-        protected ValueTask<bool> HandleCustomRpc(IMessageReader reader, Game game)
-        {
-            var lengthOrShortId = reader.ReadPackedInt32();
-
-            var pluginId = lengthOrShortId < 0
-                ? game.Host!.Client.ModIdMap[lengthOrShortId]
-                : reader.ReadString(lengthOrShortId);
-
-            var id = reader.ReadPackedInt32();
-
-            return ValueTask.FromResult(true);
-        }
     }
 }
index 4eb5f8a1ab9b27987f9c5f1ea5e86b5220372c22..14e8690c7ab77ac235ba3d497aafe2e26cbbaf58 100644 (file)
@@ -55,9 +55,6 @@ namespace Impostor.Server.Net.Inner.Objects.Components
                     Rpc19EnterVent.Deserialize(reader, out ventId);
                     break;
 
-                case RpcCalls.CustomRpc:
-                    return await HandleCustomRpc(reader, _game);
-
                 default:
                     return await UnregisteredCall(call, sender);
             }
index 011af37b0aabed70ed67c5f6818463dc1a97b7b9..d6a16fdad6d4e70f2e5e441ee63f4e61a9cf097f 100644 (file)
@@ -121,9 +121,6 @@ namespace Impostor.Server.Net.Inner.Objects
                     break;
                 }
 
-                case RpcCalls.CustomRpc:
-                    return await HandleCustomRpc(reader, _game);
-
                 default:
                     return await UnregisteredCall(call, sender);
             }
index a2d6f0e79fab132c9833394a5799804317112765..f41680b166ae95700fdcbe661f1b4bf26de64257 100644 (file)
@@ -122,9 +122,6 @@ namespace Impostor.Server.Net.Inner.Objects
                     break;
                 }
 
-                case RpcCalls.CustomRpc:
-                    return await HandleCustomRpc(reader, _game);
-
                 default:
                     return await UnregisteredCall(call, sender);
             }
index 8cd808dbbb1ca409ed0a909356b19f71902c4568..7bbf8e78a713af997d3e9920d2a0b9f9aa610007 100644 (file)
@@ -285,9 +285,6 @@ namespace Impostor.Server.Net.Inner.Objects
                     return await HandleSetStartCounter(sender, sequenceId, startCounter);
                 }
 
-                case RpcCalls.CustomRpc:
-                    return await HandleCustomRpc(reader, _game);
-
                 default:
                     return await UnregisteredCall(call, sender);
             }
index 3725c8faa5fe08563b9d918b9e5187c468c6f9f0..d51c0b8d23918f6e69f8f103a5379695266a62fc 100644 (file)
@@ -117,9 +117,6 @@ namespace Impostor.Server.Net.Inner.Objects
                     break;
                 }
 
-                case RpcCalls.CustomRpc:
-                    return await HandleCustomRpc(reader, _game);
-
                 default:
                     return await UnregisteredCall(call, sender);
             }
index e7ec17189831717b3590e24f6bdfe3aa5680095a..d5355ddc70e3663053a26ec6b93676584cdd6423 100644 (file)
@@ -3,15 +3,14 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
+using Impostor.Api.Events.Managers;
 using Impostor.Api.Innersloth;
 using Impostor.Api.Net;
 using Impostor.Api.Net.Messages;
 using Impostor.Api.Net.Messages.S2C;
-using Impostor.Api.Reactor;
 using Impostor.Hazel;
 using Impostor.Server.Config;
 using Impostor.Server.Net.Factories;
-using Impostor.Server.Utils;
 using Microsoft.Extensions.Logging;
 
 namespace Impostor.Server.Net.Manager
@@ -23,8 +22,6 @@ namespace Impostor.Server.Net.Manager
             GameVersion.GetVersion(2021, 3, 25), // 2021.3.31s
         };
 
-        private static readonly string ServerBrand = $"Impostor {DotnetUtils.GetVersion()}";
-
         private readonly ILogger<ClientManager> _logger;
         private readonly ConcurrentDictionary<int, ClientBase> _clients;
         private readonly IClientFactory _clientFactory;
@@ -55,7 +52,7 @@ namespace Impostor.Server.Net.Manager
             return clientId;
         }
 
-        public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion, ISet<Mod>? mods)
+        public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion)
         {
             if (!SupportedVersions.Contains(clientVersion))
             {
@@ -81,16 +78,12 @@ namespace Impostor.Server.Net.Manager
                 return;
             }
 
-            var client = _clientFactory.Create(connection, name, clientVersion, mods ?? new HashSet<Mod>(0));
+            var client = _clientFactory.Create(connection, name, clientVersion);
             var id = NextId();
 
             client.Id = id;
             _logger.LogTrace("Client connected.");
             _clients.TryAdd(id, client);
-
-            using var writer = MessageWriter.Get(MessageType.Reliable);
-            ModdedHandshakeS2C.Serialize(writer, ServerBrand);
-            await connection.SendAsync(writer);
         }
 
         public void Remove(IClient client)
index a5518dc37f6245372ce4e03151cd002cbe06750a..e7ce3ace06c7893add9baa77c8fe4a3f2ab9e7f3 100644 (file)
@@ -2,7 +2,8 @@
 using System.Net;
 using System.Net.Sockets;
 using System.Threading.Tasks;
-using Impostor.Api.Reactor;
+using Impostor.Api.Events.Managers;
+using Impostor.Api.Net.Messages.C2S;
 using Impostor.Hazel;
 using Impostor.Hazel.Udp;
 using Impostor.Server.Net.Hazel;
@@ -60,12 +61,12 @@ namespace Impostor.Server.Net
         private async ValueTask OnNewConnection(NewConnectionEventArgs e)
         {
             // Handshake.
-            ModdedHandshakeC2S.Deserialize(e.HandshakeData, out var clientVersion, out var name, out var mods);
+            HandshakeC2S.Deserialize(e.HandshakeData, out var clientVersion, out var name);
 
             var connection = new HazelConnection(e.Connection, _connectionLogger);
 
             // Register client
-            await _clientManager.RegisterConnectionAsync(connection, name, clientVersion, mods);
+            await _clientManager.RegisterConnectionAsync(connection, name, clientVersion);
         }
     }
 }
index 0cfa76d0fb3e7e3b2e8cbcb768f927d0336bd9b3..22dc0a7d111836ce0e9c9df7e3ec8d05729d303f 100644 (file)
@@ -1,10 +1,8 @@
-using System.Collections.Generic;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
 using Impostor.Api.Innersloth;
 using Impostor.Api.Net.Messages;
 using Impostor.Api.Net.Messages.C2S;
 using Impostor.Api.Net.Messages.S2C;
-using Impostor.Api.Reactor;
 using Impostor.Hazel;
 using Impostor.Server.Config;
 using Impostor.Server.Net.Hazel;
@@ -25,11 +23,10 @@ namespace Impostor.Server.Net.Redirector
             string name,
             int gameVersion,
             HazelConnection connection,
-            ISet<Mod> mods,
             ClientManager clientManager,
             INodeProvider nodeProvider,
             INodeLocator nodeLocator)
-            : base(name, gameVersion, connection, mods)
+            : base(name, gameVersion, connection)
         {
             _clientManager = clientManager;
             _nodeProvider = nodeProvider;
index 8f9df6263c21df81b8af2cd749ccce3e12796d35..6e1620803c90e9cf04af7f1433153a7374ce84ac 100644 (file)
@@ -1,12 +1,10 @@
 using System;
-using System.Linq;
 using System.Threading;
 using System.Threading.Tasks;
 using Impostor.Api.Games;
 using Impostor.Api.Innersloth;
 using Impostor.Api.Net;
 using Impostor.Api.Net.Messages;
-using Impostor.Api.Reactor;
 using Impostor.Hazel;
 using Impostor.Server.Events;
 using Microsoft.Extensions.DependencyInjection;
@@ -173,25 +171,6 @@ namespace Impostor.Server.Net.State
                 return GameJoinResult.FromError(GameJoinError.GameDestroyed);
             }
 
-            if (Host != null)
-            {
-                foreach (var hostMod in Host.Client.Mods)
-                {
-                    if (hostMod.Side == PluginSide.Both && client.Mods.All(clientMod => hostMod.Id != clientMod.Id))
-                    {
-                        return GameJoinResult.CreateCustomError($"You are missing {hostMod.Id} - {hostMod.Version}");
-                    }
-                }
-
-                foreach (var clientMod in client.Mods)
-                {
-                    if (clientMod.Side == PluginSide.Both && Host.Client.Mods.All(hostMod => clientMod.Id != hostMod.Id))
-                    {
-                        return GameJoinResult.CreateCustomError($"Host of this game is missing {clientMod.Id} - {clientMod.Version}");
-                    }
-                }
-            }
-
             var isNew = false;
 
             if (player == null || player.Game != this)
index ab582caaaf962ee22217b5a29c9d0e9f768b4704..03514d9020ab8611cab9370ac4587404d41fee88 100644 (file)
@@ -59,7 +59,7 @@ namespace Impostor.Server
 
             try
             {
-                Log.Information("Starting Impostor v{0}", DotnetUtils.GetVersion());
+                Log.Information("Starting Impostor v{0}", DotnetUtils.Version);
                 CreateHostBuilder(args).Build().Run();
                 return 0;
             }
index fe9d94cc670bcf2f6a161d7a07fc0f209aa1c224..31af22a5dbcbd726917d68fc27fc85272da30b02 100644 (file)
@@ -1,7 +1,5 @@
-using System.Collections.Generic;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
 using Impostor.Api.Net.Messages;
-using Impostor.Api.Reactor;
 using Impostor.Server.Config;
 using Impostor.Server.Net;
 using Impostor.Server.Net.Hazel;
@@ -18,8 +16,8 @@ namespace Impostor.Server.Recorder
         private bool _createdGame;
         private bool _recordAfter;
 
-        public ClientRecorder(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, string name, int gameVersion, HazelConnection connection, ISet<Mod> mods, PacketRecorder recorder)
-            : base(logger, antiCheatOptions, clientManager, gameManager, name, gameVersion, connection, mods)
+        public ClientRecorder(ILogger<Client> logger, IOptions<AntiCheatConfig> antiCheatOptions, ClientManager clientManager, GameManager gameManager, string name, int gameVersion, HazelConnection connection, PacketRecorder recorder)
+            : base(logger, antiCheatOptions, clientManager, gameManager, name, gameVersion, connection)
         {
             _recorder = recorder;
             _isFirst = true;
index 905e026284c455b43bd531993e24da0b189cbc0a..12985f1a211ac960148b63978218b137e894cf27 100644 (file)
@@ -161,7 +161,7 @@ namespace Impostor.Server.Recorder
             {
                 context.Writer.Write((uint)ServerReplayVersion.Initial);
                 context.Writer.Write(_startTime.ToUnixTimeMilliseconds());
-                context.Writer.Write(DotnetUtils.GetVersion());
+                context.Writer.Write(DotnetUtils.Version);
 
                 await WriteAsync(context.Stream!);
             }
index 48a0ac0a8cb807577579b051107e52ff4f77b5b7..25a4c7cc9120cd8787b3da1df5241aa52716bec2 100644 (file)
@@ -2,19 +2,22 @@
 
 namespace Impostor.Server.Utils
 {
-    internal static class DotnetUtils
+    public static class DotnetUtils
     {
-        private const string DefaultUnknownBuild = "UNKNOWN";
+        private static string? _version;
 
-        public static string GetVersion()
+        public static string Version
         {
-            var attribute = typeof(DotnetUtils).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
-            if (attribute != null)
+            get
             {
-                return attribute.InformationalVersion;
-            }
+                if (_version == null)
+                {
+                    var attribute = typeof(DotnetUtils).Assembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();
+                    _version = attribute != null ? attribute.InformationalVersion : "UNKNOWN";
+                }
 
-            return DefaultUnknownBuild;
+                return _version;
+            }
         }
     }
 }
index 65401efa09b1844474e6d4ed70f5862d060afb51..16b756eafb5520d71a88c8c19fde84ca47c1447b 100644 (file)
@@ -166,7 +166,7 @@ namespace Impostor.Tools.ServerReplay
                     // Create and register connection.
                     var connection = new MockHazelConnection(address);
 
-                    await _clientManager.RegisterConnectionAsync(connection, name, gameVersion, null);
+                    await _clientManager.RegisterConnectionAsync(connection, name, gameVersion);
 
                     // Store reference for ourselfs.
                     Connections.Add(clientId, connection);