diff --git a/.github/workflows/nuget.yml b/.github/workflows/nuget.yml index b00c21b..e921f11 100644 --- a/.github/workflows/nuget.yml +++ b/.github/workflows/nuget.yml @@ -4,6 +4,7 @@ on: branches: - master - Net6.0 + - dev jobs: nuget-1: diff --git a/BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs b/BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs index 37ba779..ec0da5f 100644 --- a/BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs +++ b/BeatTogether.Core.ServerMessaging/Abstractions/ILayer2.cs @@ -1,4 +1,5 @@ using BeatTogether.Core.Enums; +using BeatTogether.Core.Models; namespace BeatTogether.Core.Abstractions { @@ -24,6 +25,7 @@ public interface ILayer2 //Layer 1 calls these to control layer 2 GameplayServerControlSettings serverControlSettings, BeatmapDifficultyMask difficultyMask, GameplayModifiersMask modifiersMask, - string songPackMasks); + string songPackMasks, + VersionRange versionRange); } } diff --git a/BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs b/BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs index 3ec73aa..b537324 100644 --- a/BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs +++ b/BeatTogether.Core.ServerMessaging/Abstractions/IServerInstance.cs @@ -29,6 +29,7 @@ public interface IServerInstance public bool AllowChroma { get; set; } public bool AllowME { get; set; } public bool AllowNE { get; set; } - } + public VersionRange SupportedVersionRange { get; set; } + } } diff --git a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj index 5603ede..7bfb8f1 100644 --- a/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj +++ b/BeatTogether.Core.ServerMessaging/BeatTogether.Core.csproj @@ -4,7 +4,7 @@ net6.0 enable enable - 1.1.0 + 1.2.0 icon.png BeatTogether BeatTogether diff --git a/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferReaderExtensions.cs b/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferReaderExtensions.cs index d42f8cf..d94c672 100644 --- a/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferReaderExtensions.cs +++ b/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferReaderExtensions.cs @@ -50,6 +50,9 @@ public static Server ReadServer(this ref BinaryBufferReader bufferReader) server.AllowME = bufferReader.ReadBool(); server.AllowNE = bufferReader.ReadBool(); + server.SupportedVersionRange.MinVersion = bufferReader.ReadUTF16String(); + server.SupportedVersionRange.MaxVersion = bufferReader.ReadUTF16String(); + return server; } } diff --git a/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferWriterExtensions.cs b/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferWriterExtensions.cs index febefdb..3eb7999 100644 --- a/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferWriterExtensions.cs +++ b/BeatTogether.Core.ServerMessaging/Extensions/BinaryBufferWriterExtensions.cs @@ -48,6 +48,9 @@ public static void WriteServer(this ref BinaryBufferWriter bufferWriter, Server bufferWriter.WriteBool(server.AllowChroma); bufferWriter.WriteBool(server.AllowME); bufferWriter.WriteBool(server.AllowNE); - } - } + + bufferWriter.WriteUTF16String(server.SupportedVersionRange.MinVersion); + bufferWriter.WriteUTF16String(server.SupportedVersionRange.MaxVersion); + } + } } diff --git a/BeatTogether.Core.ServerMessaging/Models/VersionRange.cs b/BeatTogether.Core.ServerMessaging/Models/VersionRange.cs new file mode 100644 index 0000000..384e42b --- /dev/null +++ b/BeatTogether.Core.ServerMessaging/Models/VersionRange.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BeatTogether.Core.Models +{ + public class VersionRange + { + public string MinVersion { get; set; } = "0.0.0"; + public string MaxVersion { get; set; } = new Version(int.MaxValue, int.MaxValue, int.MaxValue, int.MaxValue).ToString(); + + public static VersionRange? FindVersionRange(List versionRanges, Version version) + { + foreach (var range in versionRanges) + if (VersionRangeSatisfies(range, version)) + return range; + return null; + } + + public static VersionRange? FindVersionRange(List versionRanges, string version) + { + return FindVersionRange(versionRanges, version); + } + public static bool VersionRangeSatisfies(VersionRange range, Version version) + { + var minVersion = Version.Parse(range.MinVersion); + var maxVersion = Version.Parse(range.MaxVersion); + return version >= minVersion && version <= maxVersion; + } + + public static bool VersionRangeSatisfies(VersionRange range, string version) + { + return VersionRangeSatisfies(range, Version.Parse(version)); + } + + public static VersionStatus CheckVersionRange(VersionRange range, Version version) + { + var minVersion = Version.Parse(range.MinVersion); + var maxVersion = Version.Parse(range.MaxVersion); + if (version < minVersion) return VersionStatus.TooLow; + if (version > maxVersion) return VersionStatus.TooHigh; + return VersionStatus.Ok; + } + + public enum VersionStatus + { + Ok, + TooHigh, + TooLow + } + } +} diff --git a/BeatTogether.Core.ServerMessaging/ServerMessaging/ServerAutobusMessage.cs b/BeatTogether.Core.ServerMessaging/ServerMessaging/ServerAutobusMessage.cs index 17e7206..4582690 100644 --- a/BeatTogether.Core.ServerMessaging/ServerMessaging/ServerAutobusMessage.cs +++ b/BeatTogether.Core.ServerMessaging/ServerMessaging/ServerAutobusMessage.cs @@ -32,8 +32,10 @@ public Server(IServerInstance instance) AllowChroma = instance.AllowChroma; AllowME = instance.AllowME; AllowNE = instance.AllowNE; - } - public Server() { } + + SupportedVersionRange = instance.SupportedVersionRange; + } + public Server() { } public string ServerName { get; set; } = string.Empty; public string Secret { get; set; } = string.Empty; @@ -58,5 +60,6 @@ public Server() { } public bool AllowChroma { get; set; } public bool AllowME { get ; set ; } public bool AllowNE { get; set; } - } + public VersionRange SupportedVersionRange { get; set; } = new(); + } }