From c91b6c44074044afd17dd5bd5378e73bd08f53d7 Mon Sep 17 00:00:00 2001 From: Chomp Date: Thu, 26 Jun 2025 11:14:24 +0100 Subject: [PATCH] Improved accuracy of `client/match/join` and `client/match/group/start_game` --- .../Callbacks/MatchCallbacks.cs | 21 ++++++++--- .../Controllers/MatchController.cs | 8 ++-- .../Models/Eft/Match/MatchGroupJoinRequest.cs | 37 +++++++++++++++++++ .../Routers/Static/MatchStaticRouter.cs | 6 +-- 4 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 Libraries/SPTarkov.Server.Core/Models/Eft/Match/MatchGroupJoinRequest.cs diff --git a/Libraries/SPTarkov.Server.Core/Callbacks/MatchCallbacks.cs b/Libraries/SPTarkov.Server.Core/Callbacks/MatchCallbacks.cs index 8a314a24..1a11c0e7 100644 --- a/Libraries/SPTarkov.Server.Core/Callbacks/MatchCallbacks.cs +++ b/Libraries/SPTarkov.Server.Core/Callbacks/MatchCallbacks.cs @@ -183,14 +183,10 @@ public class MatchCallbacks( /// Handle match/group/start_game /// /// - public ValueTask JoinMatch( - string url, - MatchGroupStartGameRequest info, - string sessionID - ) + public ValueTask JoinMatch(string url, MatchGroupJoinRequest request, string sessionID) { return new ValueTask( - _httpResponseUtil.GetBody(_matchController.JoinMatch(info, sessionID)) + _httpResponseUtil.GetBody(_matchController.JoinMatch(request, sessionID)) ); } @@ -332,4 +328,17 @@ public class MatchCallbacks( { return new ValueTask(_httpResponseUtil.GetBody(true)); } + + /// + /// Handle client/match/group/start_game + /// + public Task StartGameAsGroupLeader( + string url, + MatchGroupStartGameRequest? request, + string? sessionId + ) + { + // returns a ProfileStatusResponse object + throw new NotImplementedException(); + } } diff --git a/Libraries/SPTarkov.Server.Core/Controllers/MatchController.cs b/Libraries/SPTarkov.Server.Core/Controllers/MatchController.cs index 11a701f1..822022c6 100644 --- a/Libraries/SPTarkov.Server.Core/Controllers/MatchController.cs +++ b/Libraries/SPTarkov.Server.Core/Controllers/MatchController.cs @@ -2,7 +2,6 @@ using SPTarkov.DI.Annotations; using SPTarkov.Server.Core.Helpers; using SPTarkov.Server.Core.Models.Eft.Match; using SPTarkov.Server.Core.Models.Spt.Config; -using SPTarkov.Server.Core.Models.Spt.Services; using SPTarkov.Server.Core.Models.Utils; using SPTarkov.Server.Core.Servers; using SPTarkov.Server.Core.Services; @@ -14,7 +13,6 @@ namespace SPTarkov.Server.Core.Controllers; [Injectable] public class MatchController( ISptLogger _logger, - SaveServer _saveServer, MatchLocationService _matchLocationService, ConfigServer _configServer, LocationLifecycleService _locationLifecycleService, @@ -23,8 +21,8 @@ public class MatchController( ICloner _cloner ) { - protected MatchConfig _matchConfig = _configServer.GetConfig(); - protected PmcConfig _pmcConfig = _configServer.GetConfig(); + protected readonly MatchConfig _matchConfig = _configServer.GetConfig(); + protected readonly PmcConfig _pmcConfig = _configServer.GetConfig(); /// /// Handle client/match/available @@ -50,7 +48,7 @@ public class MatchController( /// Start game request /// Session/Player id /// ProfileStatusResponse - public ProfileStatusResponse JoinMatch(MatchGroupStartGameRequest request, string sessionId) + public ProfileStatusResponse JoinMatch(MatchGroupJoinRequest request, string sessionId) { var output = new ProfileStatusResponse { diff --git a/Libraries/SPTarkov.Server.Core/Models/Eft/Match/MatchGroupJoinRequest.cs b/Libraries/SPTarkov.Server.Core/Models/Eft/Match/MatchGroupJoinRequest.cs new file mode 100644 index 00000000..48088de9 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Models/Eft/Match/MatchGroupJoinRequest.cs @@ -0,0 +1,37 @@ +using System.Text.Json.Serialization; +using SPTarkov.Server.Core.Models.Utils; + +namespace SPTarkov.Server.Core.Models.Eft.Match; + +public record MatchGroupJoinRequest : IRequestData +{ + [JsonExtensionData] + public Dictionary? ExtensionData { get; set; } + + [JsonPropertyName("location")] + public string? Location { get; set; } + + [JsonPropertyName("savage")] + public bool? Savage { get; set; } + + [JsonPropertyName("dt")] + public string? Dt { get; set; } + + [JsonPropertyName("servers")] + public List? Servers { get; set; } + + [JsonPropertyName("keyId")] + public string? KeyId { get; set; } +} + +public record JoinServer +{ + [JsonPropertyName("ping")] + public int? Ping { get; set; } + + [JsonPropertyName("ip")] + public string? Ip { get; set; } + + [JsonPropertyName("port")] + public string? Port { get; set; } +} diff --git a/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs b/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs index e7de3fec..dd9d6743 100644 --- a/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs +++ b/Libraries/SPTarkov.Server.Core/Routers/Static/MatchStaticRouter.cs @@ -39,10 +39,10 @@ public class MatchStaticRouter : StaticRouter async (url, info, sessionID, output) => await matchCallbacks.JoinMatch( url, - info as MatchGroupStartGameRequest, + info as MatchGroupJoinRequest, sessionID ), - typeof(MatchGroupStartGameRequest) + typeof(MatchGroupJoinRequest) ), new RouteAction( "/client/match/exit", @@ -72,7 +72,7 @@ public class MatchStaticRouter : StaticRouter new RouteAction( "/client/match/group/start_game", async (url, info, sessionID, output) => - await matchCallbacks.JoinMatch( + await matchCallbacks.StartGameAsGroupLeader( url, info as MatchGroupStartGameRequest, sessionID