return null;
}
+ private CompatibilityGroup GetCompatibilityGroupOrDefault(GameVersion clientVersion)
+ {
+ // If the compatibility group is not defined, we assume it is not compatible with anything else than itself
+ return TryGetCompatibilityGroup(clientVersion) ?? new CompatibilityGroup(new[] { clientVersion.Normalize() });
+ }
+
public VersionCompareResult CanConnectToServer(GameVersion clientVersion)
{
if (this.TryGetCompatibilityGroup(clientVersion) != null)
return GameJoinError.None;
}
- var hostCompatGroup = this.TryGetCompatibilityGroup(hostVersion);
- var playerCompatGroup = this.TryGetCompatibilityGroup(clientVersion);
-
- if (hostCompatGroup == null || playerCompatGroup == null)
- {
- return GameJoinError.InvalidClient;
- }
+ var hostCompatGroup = GetCompatibilityGroupOrDefault(hostVersion);
+ var playerCompatGroup = GetCompatibilityGroupOrDefault(clientVersion);
if (hostCompatGroup != playerCompatGroup)
{
public static IEnumerable<object[]> CanJoinGameData =>
new List<object[]>
{
+ // Same version -> can join
new object[] { GameJoinError.None, new GameVersion(1, 0, 0), new GameVersion(1, 0, 0) },
- new object[] { GameJoinError.InvalidClient, new GameVersion(1, 0, 0), new GameVersion(100, 0, 0) },
+
+ // Compatible versions -> can join
+ new object[] { GameJoinError.None, new GameVersion(2, 0, 0), new GameVersion(2, 1, 0) },
+
+ // Different incompatible versions -> show correct error
new object[] { GameJoinError.ClientOutdated, new GameVersion(2, 0, 0), new GameVersion(1, 0, 0) },
new object[] { GameJoinError.ClientTooNew, new GameVersion(1, 0, 0), new GameVersion(2, 0, 0) },
- new object[] { GameJoinError.None, new GameVersion(2, 0, 0), new GameVersion(2, 1, 0) },
+
+ // Versions unknown to Impostor -> also show correct errors
+ new object[] { GameJoinError.ClientTooNew, new GameVersion(0, 0, 1), new GameVersion(1, 0, 0) },
+ new object[] { GameJoinError.ClientOutdated, new GameVersion(1, 0, 0), new GameVersion(0, 0, 1) },
+ new object[] { GameJoinError.ClientTooNew, new GameVersion(1, 0, 0), new GameVersion(100, 0, 0) },
+ new object[] { GameJoinError.ClientOutdated, new GameVersion(100, 0, 0), new GameVersion(1, 0, 0) },
+ new object[] { GameJoinError.ClientTooNew, new GameVersion(0, 0, 1), new GameVersion(100, 0, 0) },
+
};
[Theory]