From adc7ea43567d0326bbb87c74e6d2727abce0ed4c Mon Sep 17 00:00:00 2001 From: JoKeRZH429 <83122870+JoKeRZH429@users.noreply.github.com> Date: Tue, 11 Aug 2026 12:37:36 +0500 Subject: [PATCH] fix: expect Elo ratings response for all lobby types --- .../ExternalLeaderboardsClient.cs | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/GenOnlineService/ExternalLeaderboardsClient.cs b/GenOnlineService/ExternalLeaderboardsClient.cs index ab67d71..de5f264 100644 --- a/GenOnlineService/ExternalLeaderboardsClient.cs +++ b/GenOnlineService/ExternalLeaderboardsClient.cs @@ -176,42 +176,38 @@ await retryPolicy.ExecuteAsync(async () => return; } - // Only QuickMatch responses are expected to carry a ratings body. - if (lobby.LobbyType == ELobbyType.QuickMatch) + string responseBody = await response.Content.ReadAsStringAsync(); + var refreshResponse = JsonSerializer.Deserialize(responseBody); + if (refreshResponse?.data == null) { - string responseBody = await response.Content.ReadAsStringAsync(); - var refreshResponse = JsonSerializer.Deserialize(responseBody); - if (refreshResponse?.data == null) - { - Console.WriteLine($"[WARNING] External Match Ingest response body contains no data or could not be deserialized: {responseBody}"); - return; - } + Console.WriteLine($"[WARNING] External Match Ingest response body contains no data or could not be deserialized: {responseBody}"); + return; + } - // Only player IDs that were actually part of this match are valid recipients of an ELO update. - var expectedPlayerIds = new HashSet(matchEntry.members.Where(m => m.HasValue).Select(m => m.Value.user_id)); + // Only player IDs that were actually part of this match are valid recipients of an ELO update. + var expectedPlayerIds = new HashSet(matchEntry.members.Where(m => m.HasValue).Select(m => m.Value.user_id)); - foreach (var (userId, updatedPlayer) in refreshResponse.data) + foreach (var (userId, updatedPlayer) in refreshResponse.data) + { + if (!expectedPlayerIds.Contains(userId)) { - if (!expectedPlayerIds.Contains(userId)) - { - Console.WriteLine($"[WARNING] External Match Ingest response for match {lobby.MatchID} contained unexpected player_id {userId}; skipping (ELO left unchanged)."); - continue; - } - - int newRating = updatedPlayer.rating; - int newMatches = updatedPlayer.matches; + Console.WriteLine($"[WARNING] External Match Ingest response for match {lobby.MatchID} contained unexpected player_id {userId}; skipping (ELO left unchanged)."); + continue; + } - // Update in-memory session cache if the player is online - var sharedData = WebSocketManager.GetSharedDataForUser(userId); - if (sharedData?.GameStats != null) - { - sharedData.GameStats.EloRating = newRating; - sharedData.GameStats.EloMatches = newMatches; - } + int newRating = updatedPlayer.rating; + int newMatches = updatedPlayer.matches; - // Call SaveELOData to persist as fallback - await Database.Users.SaveELOData(db, userId, new EloData(newRating, newMatches)); + // Update in-memory session cache if the player is online + var sharedData = WebSocketManager.GetSharedDataForUser(userId); + if (sharedData?.GameStats != null) + { + sharedData.GameStats.EloRating = newRating; + sharedData.GameStats.EloMatches = newMatches; } + + // Call SaveELOData to persist as fallback + await Database.Users.SaveELOData(db, userId, new EloData(newRating, newMatches)); } } catch (Exception ex)