From dd7e3d17ca679fab3e4fce27b2fff5508cf43550 Mon Sep 17 00:00:00 2001 From: EnderdracheLP Date: Sun, 25 Aug 2024 12:51:04 +0200 Subject: [PATCH 1/2] Bum core dependency, update platforms, add Pico and PS5 --- .../BeatTogether.MasterServer.Api.csproj | 2 +- .../GetMultiplayerInstanceController.cs | 39 +------------------ .../Implimentations/UserAuthenticator.cs | 1 + .../Util/UserIdHash.cs | 3 +- .../Properties/launchSettings.json | 13 +++++++ ...BeatTogether.MasterServer.Messaging.csproj | 1 + .../Enums/Platform.cs | 17 -------- .../Models/AuthenticationToken.cs | 2 +- .../HttpApi/GetMultiplayerInstanceRequest.cs | 2 +- ...ogether.MasterServer.NodeController.csproj | 2 +- 10 files changed, 22 insertions(+), 60 deletions(-) create mode 100644 BeatTogether.MasterServer.Kernel/Properties/launchSettings.json delete mode 100644 BeatTogether.MasterServer.Messaging/Enums/Platform.cs diff --git a/BeatTogether.MasterServer.Api/BeatTogether.MasterServer.Api.csproj b/BeatTogether.MasterServer.Api/BeatTogether.MasterServer.Api.csproj index dc32696..29fa6db 100644 --- a/BeatTogether.MasterServer.Api/BeatTogether.MasterServer.Api.csproj +++ b/BeatTogether.MasterServer.Api/BeatTogether.MasterServer.Api.csproj @@ -17,7 +17,7 @@ - + diff --git a/BeatTogether.MasterServer.Api/HttpControllers/GetMultiplayerInstanceController.cs b/BeatTogether.MasterServer.Api/HttpControllers/GetMultiplayerInstanceController.cs index 9cf6a42..0a47589 100644 --- a/BeatTogether.MasterServer.Api/HttpControllers/GetMultiplayerInstanceController.cs +++ b/BeatTogether.MasterServer.Api/HttpControllers/GetMultiplayerInstanceController.cs @@ -269,7 +269,7 @@ private static byte[] GetSessionTokenFromRequest(GetMultiplayerInstanceRequest r { byte[] sessionToken; - if (request.Platform == Messaging.Enums.Platform.Steam) + if (request.Platform == Core.Enums.Platform.Steam) sessionToken = AuthenticationToken.SessionTokenFromHex(request.SingleUseAuthToken); else sessionToken = AuthenticationToken.SessionTokenFromUtf8(request.SingleUseAuthToken); @@ -277,43 +277,6 @@ private static byte[] GetSessionTokenFromRequest(GetMultiplayerInstanceRequest r return sessionToken; } - public static byte[] SessionTokenFromHex(string str) - { - var array = new byte[str.Length / 2]; - var i = 0; - var num = 0; - var num2 = 1; - - while (i < array.Length) - { - array[i] = (byte)(GetHexVal(str[num]) << 4 | GetHexVal(str[num2])); - i++; - num += 2; - num2 += 2; - } - - return array; - } - - public static byte GetHexVal(char c) - { - if (c >= '0' && c <= '9') - return (byte)(c - '0'); - - if (c >= 'a' && c <= 'f') - return (byte)('\n' + c - 'a'); - - if (c >= 'A' && c <= 'F') - return (byte)('\n' + c - 'A'); - - throw new Exception($"Invalid Hex Char {c}"); - } - - public static byte[] SessionTokenFromUtf8(string str) - { - return Encoding.UTF8.GetBytes(str); - } - #nullable enable private static Version? TryParseGameVersion(string versionText) { diff --git a/BeatTogether.MasterServer.Api/Implimentations/UserAuthenticator.cs b/BeatTogether.MasterServer.Api/Implimentations/UserAuthenticator.cs index 05dfe76..ad2798e 100644 --- a/BeatTogether.MasterServer.Api/Implimentations/UserAuthenticator.cs +++ b/BeatTogether.MasterServer.Api/Implimentations/UserAuthenticator.cs @@ -96,6 +96,7 @@ private bool GetPlatformRequiresAuth(Platform platform) Platform.Steam => true, Platform.OculusQuest => true, Platform.Oculus => true, + Platform.Pico => false, // TODO: Pico auth, if possible _ => false, }; } diff --git a/BeatTogether.MasterServer.Api/Util/UserIdHash.cs b/BeatTogether.MasterServer.Api/Util/UserIdHash.cs index 8d96a0d..0e71891 100644 --- a/BeatTogether.MasterServer.Api/Util/UserIdHash.cs +++ b/BeatTogether.MasterServer.Api/Util/UserIdHash.cs @@ -15,7 +15,8 @@ public static string Generate(Platform platform, string platformUserId) Platform.Oculus => "Oculus#", Platform.OculusQuest => "OculusQuest#", Platform.Steam => "Steam#", - Platform.PS4 => "PSN#", + Platform.Pico => "Pico#", + Platform.PS4 or Platform.PS5 => "PSN#", _ => "" }; return Generate(platformStr, platformUserId); diff --git a/BeatTogether.MasterServer.Kernel/Properties/launchSettings.json b/BeatTogether.MasterServer.Kernel/Properties/launchSettings.json new file mode 100644 index 0000000..ce4f183 --- /dev/null +++ b/BeatTogether.MasterServer.Kernel/Properties/launchSettings.json @@ -0,0 +1,13 @@ +{ + "profiles": { + "BeatTogether.MasterServer.Kernel": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development", + "DOTNET_ENVIRONMENT": "Development" + }, + "applicationUrl": "https://localhost:58530;http://localhost:58531" + } + } +} \ No newline at end of file diff --git a/BeatTogether.MasterServer.Messaging/BeatTogether.MasterServer.Messaging.csproj b/BeatTogether.MasterServer.Messaging/BeatTogether.MasterServer.Messaging.csproj index 7ff035f..8783c96 100644 --- a/BeatTogether.MasterServer.Messaging/BeatTogether.MasterServer.Messaging.csproj +++ b/BeatTogether.MasterServer.Messaging/BeatTogether.MasterServer.Messaging.csproj @@ -7,6 +7,7 @@ + diff --git a/BeatTogether.MasterServer.Messaging/Enums/Platform.cs b/BeatTogether.MasterServer.Messaging/Enums/Platform.cs deleted file mode 100644 index f54feb3..0000000 --- a/BeatTogether.MasterServer.Messaging/Enums/Platform.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace BeatTogether.MasterServer.Messaging.Enums -{ - public enum Platform : byte - { - Test, - OculusRift, - OculusQuest, - Steam, - PS4, - PS4Dev, - PS4Cert, - PS5, - PS5Dev, - PS5Cert, - Oculus = 1 - } -} diff --git a/BeatTogether.MasterServer.Messaging/Models/AuthenticationToken.cs b/BeatTogether.MasterServer.Messaging/Models/AuthenticationToken.cs index cfb88d4..99a66e8 100644 --- a/BeatTogether.MasterServer.Messaging/Models/AuthenticationToken.cs +++ b/BeatTogether.MasterServer.Messaging/Models/AuthenticationToken.cs @@ -1,6 +1,6 @@ using System; using System.Text; -using BeatTogether.MasterServer.Messaging.Enums; +using BeatTogether.Core.Enums; namespace BeatTogether.MasterServer.Messaging.Models { diff --git a/BeatTogether.MasterServer.Messaging/Models/HttpApi/GetMultiplayerInstanceRequest.cs b/BeatTogether.MasterServer.Messaging/Models/HttpApi/GetMultiplayerInstanceRequest.cs index d5e3c1c..d4dafea 100644 --- a/BeatTogether.MasterServer.Messaging/Models/HttpApi/GetMultiplayerInstanceRequest.cs +++ b/BeatTogether.MasterServer.Messaging/Models/HttpApi/GetMultiplayerInstanceRequest.cs @@ -1,6 +1,6 @@ using System.Collections.Generic; using BeatTogether.MasterServer.HttpApi.Models.Enums; -using BeatTogether.MasterServer.Messaging.Enums; +using BeatTogether.Core.Enums; using Newtonsoft.Json; namespace BeatTogether.MasterServer.Messaging.Models.HttpApi diff --git a/BeatTogether.MasterServer.NodeController/BeatTogether.MasterServer.NodeController.csproj b/BeatTogether.MasterServer.NodeController/BeatTogether.MasterServer.NodeController.csproj index 0a4cc96..3f2ac91 100644 --- a/BeatTogether.MasterServer.NodeController/BeatTogether.MasterServer.NodeController.csproj +++ b/BeatTogether.MasterServer.NodeController/BeatTogether.MasterServer.NodeController.csproj @@ -19,7 +19,7 @@ - + From 6bcab5228de81a262c5521d1acc20a256510fa7b Mon Sep 17 00:00:00 2001 From: cubic Date: Wed, 22 Jan 2025 20:26:54 +0000 Subject: [PATCH 2/2] Fix quickplay matchmaking when there is a full lobby --- .../Repositories/MemoryServerRepository.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/BeatTogether.MasterServer.Data/Implementations/Repositories/MemoryServerRepository.cs b/BeatTogether.MasterServer.Data/Implementations/Repositories/MemoryServerRepository.cs index bb9c2d9..177f9c5 100644 --- a/BeatTogether.MasterServer.Data/Implementations/Repositories/MemoryServerRepository.cs +++ b/BeatTogether.MasterServer.Data/Implementations/Repositories/MemoryServerRepository.cs @@ -106,6 +106,7 @@ public Task GetAvailablePublicServer( { if (!_servers.Any()) return Task.FromResult(null); + //Search for public server that fits the filter var publicServers = _servers.Values.Where(server => server.GameplayServerConfiguration.DiscoveryPolicy == DiscoveryPolicy.Public && server.GameplayServerConfiguration.InvitePolicy == invitePolicy && @@ -114,20 +115,20 @@ public Task GetAvailablePublicServer( server.GameplayServerConfiguration.GameplayServerControlSettings == serverControlSettings && server.BeatmapDifficultyMask == difficultyMask && server.GameplayModifiersMask == modifiersMask && - server.SongPackMasks == SongPackMasks + server.SongPackMasks == SongPackMasks && + server.CurrentPlayerCount <= server.GameplayServerConfiguration.MaxPlayerCount ); if (!publicServers.Any()) return Task.FromResult(null); var server = publicServers.First(); + //Find server with most players. foreach (var publicServer in publicServers) { - if ((publicServer.CurrentPlayerCount < publicServer.GameplayServerConfiguration.MaxPlayerCount && publicServer.CurrentPlayerCount > server.CurrentPlayerCount)) + if(publicServer.CurrentPlayerCount > server.CurrentPlayerCount) { server = publicServer; } } - if (server.CurrentPlayerCount >= server.GameplayServerConfiguration.MaxPlayerCount) - return Task.FromResult(null); return Task.FromResult(server); }