]> git.deb.at Git - rhonda/impostor.git/commitdiff
Add unsupported option to allow future versions
authorminiduikboot <mini@duikbo.at>
Sun, 28 Aug 2022 15:43:33 +0000 (17:43 +0200)
committerminiduikboot <mini@duikbo.at>
Mon, 29 Aug 2022 18:57:16 +0000 (20:57 +0200)
src/Impostor.Server/Config/CompatibilityConfig.cs
src/Impostor.Server/Net/Manager/ClientManager.cs

index 72098a63d01661c301e024d697a16941937eac5a..d9fea81fb9d1a4804a991f319ea99efec05b48a7 100644 (file)
@@ -4,6 +4,8 @@ namespace Impostor.Server.Config
     {
         public const string Section = "Compatibility";
 
+        public bool AllowFutureGameVersions { get; set; } = false;
+
         public bool AllowVersionMixing { get; set; } = false;
     }
 }
index 21b6ca321f31fd3953c312174994743c5333db75..34001de8668e653b66381d64a0514476aeb034d4 100644 (file)
@@ -13,6 +13,7 @@ using Impostor.Server.Config;
 using Impostor.Server.Events.Client;
 using Impostor.Server.Net.Factories;
 using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Options;
 
 namespace Impostor.Server.Net.Manager
 {
@@ -32,15 +33,17 @@ namespace Impostor.Server.Net.Manager
         private readonly ILogger<ClientManager> _logger;
         private readonly IEventManager _eventManager;
         private readonly ConcurrentDictionary<int, ClientBase> _clients;
+        private readonly CompatibilityConfig _compatibilityConfig;
         private readonly IClientFactory _clientFactory;
         private int _idLast;
 
-        public ClientManager(ILogger<ClientManager> logger, IEventManager eventManager, IClientFactory clientFactory)
+        public ClientManager(ILogger<ClientManager> logger, IEventManager eventManager, IClientFactory clientFactory, IOptions<CompatibilityConfig> compatibilityConfig)
         {
             _logger = logger;
             _eventManager = eventManager;
             _clientFactory = clientFactory;
             _clients = new ConcurrentDictionary<int, ClientBase>();
+            _compatibilityConfig = compatibilityConfig.Value;
         }
 
         private enum VersionCompareResult
@@ -72,7 +75,12 @@ namespace Impostor.Server.Net.Manager
         public async ValueTask RegisterConnectionAsync(IHazelConnection connection, string name, int clientVersion, Language language, QuickChatModes chatMode, PlatformSpecificData? platformSpecificData)
         {
             var versionCompare = CompareVersion(clientVersion);
-            if (versionCompare != VersionCompareResult.Compatible || platformSpecificData == null)
+            if (versionCompare == VersionCompareResult.ServerTooOld && _compatibilityConfig.AllowFutureGameVersions && platformSpecificData != null)
+            {
+                GameVersion.ParseVersion(clientVersion, out var year, out var month, out var day, out var revision);
+                _logger.LogWarning("Client connected using future version: {clientVersion} ({version}). Unsupported, continue at your own risk.", clientVersion, $"{year}.{month}.{day}{(revision == 0 ? string.Empty : "." + revision)}");
+            }
+            else if (versionCompare != VersionCompareResult.Compatible || platformSpecificData == null)
             {
                 GameVersion.ParseVersion(clientVersion, out var year, out var month, out var day, out var revision);
                 _logger.LogTrace("Client connected using unsupported version: {clientVersion} ({version})", clientVersion, $"{year}.{month}.{day}{(revision == 0 ? string.Empty : "." + revision)}");