From 2ea61288155e03030a7e1c753cb0c3b2208e3d18 Mon Sep 17 00:00:00 2001 From: Chomp Date: Sun, 4 May 2025 23:09:13 +0100 Subject: [PATCH] Improved how `ConvertToCorrectType` handles `/moving` actions Reduced number of times JSON is parsed into an object --- .../BaseInteractionRequestDataConverter.cs | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs index b8d56b66..1ea78cd8 100644 --- a/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs +++ b/Libraries/SPTarkov.Server.Core/Utils/Json/Converters/BaseInteractionRequestDataConverter.cs @@ -21,15 +21,26 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText); - return ConvertToCorrectType(value, jsonText); + + // Get the underlying 'type' of action the client is requesting we do + var action = jsonDocument.RootElement.GetProperty("Action").GetString(); + + return ConvertToCorrectType(action, jsonDocument.RootElement, jsonText); } - private BaseInteractionRequestData? ConvertToCorrectType(BaseInteractionRequestData? value, string jsonText) + /// + /// Handle the players action from received from client + /// + /// e.g. "Eat" + /// Root json element of client request + /// Raw JSON request text + /// BaseInteractionRequestData + private static BaseInteractionRequestData? ConvertToCorrectType(string action, JsonElement jsonDocumentRoot, string jsonText) { - switch (value.Action) + switch (action) { case ItemEventActions.CUSTOMIZATION_BUY: return JsonSerializer.Deserialize(jsonText); @@ -82,9 +93,7 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText); case ItemEventActions.TRADING_CONFIRM: { - var json = JsonSerializer.Deserialize(jsonText); - - switch (json.Type) + switch (jsonDocumentRoot.GetProperty("type").GetString()) { case ItemEventActions.BUY_FROM_TRADER: return JsonSerializer.Deserialize(jsonText); @@ -92,7 +101,7 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText); default: throw new Exception( - $"Unhandled action type {value.Action}, make sure the BaseInteractionRequestDataConverter has the deserialization for this action handled." + $"Unhandled action type: {action}, make sure BaseInteractionRequestDataConverter has deserialization for this action." ); } } @@ -169,7 +178,7 @@ public class BaseInteractionRequestDataConverter : JsonConverter(jsonText); default: throw new Exception( - $"Unhandled action type {value.Action}, make sure the BaseInteractionRequestDataConverter has the deserialization for this action handled." + $"Unhandled action type {action}, make sure the BaseInteractionRequestDataConverter has the deserialization for this action handled." ); } }