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();
+ }
}