diff --git a/Plugins/LuckyDataTransfer/Source/LuckyDataTransfer/Private/LuckyDataTransferSubsystem.cpp b/Plugins/LuckyDataTransfer/Source/LuckyDataTransfer/Private/LuckyDataTransferSubsystem.cpp index c0a62a36..07997124 100644 --- a/Plugins/LuckyDataTransfer/Source/LuckyDataTransfer/Private/LuckyDataTransferSubsystem.cpp +++ b/Plugins/LuckyDataTransfer/Source/LuckyDataTransfer/Private/LuckyDataTransferSubsystem.cpp @@ -130,9 +130,9 @@ void ULuckyDataTransferSubsystem::SendMessage(const FString& Message) UE_LOG(LogTemp, Warning, TEXT("WebSocket outgoing message failed")); } -FPayload ULuckyDataTransferSubsystem::InterpretData(const FString& Message) +FObservationPayload ULuckyDataTransferSubsystem::InterpretData(const FString& Message) { - FPayload Payload = FPayload(); + FObservationPayload Payload = FObservationPayload(); if (!Message.IsEmpty()) { @@ -141,13 +141,33 @@ FPayload ULuckyDataTransferSubsystem::InterpretData(const FString& Message) if (FJsonSerializer::Deserialize(Reader, JsonObj) && JsonObj.IsValid()) { - for (auto& Elem : JsonObj->Values) - { - FCommand Command = FCommand(); - Command.Key = FString(Elem.Key); - Command.Value = Elem.Value->AsNumber(); + Payload.type = JsonObj->GetStringField("type"); + Payload.request_id = JsonObj->GetStringField("request_id"); + Payload.message = JsonObj->GetStringField("message"); + Payload.timeStamp = JsonObj->GetStringField("timeStamp"); - Payload.Commands.Add(Command); + const TArray>* StateArray; + + if (JsonObj->TryGetArrayField("ObservationState", StateArray)) + { + for (const TSharedPtr& ObservationValue : *StateArray) + { + TSharedPtr ObservationObject = ObservationValue->AsObject(); + if (ObservationObject.IsValid()) + { + TMap State = TMap(); + + for (const TPair>& Pair : ObservationObject->Values) + { + FString Key = Pair.Key; + float Value = Pair.Value->AsNumber(); + + State.Add(Key, Value); + } + + Payload.ObservationState = State; + } + } } } } @@ -161,7 +181,7 @@ void IncomingMessage(const FString& Message) UE_LOG(LogTemp, Warning, TEXT("Incoming message: %s"), *outMessage); } -void ULuckyDataTransferSubsystem::CommandReady(const FPayload& Payload) +void ULuckyDataTransferSubsystem::CommandReady(const FObservationPayload& Payload) { if (OnCommandReady.IsBound()) { diff --git a/Plugins/LuckyDataTransfer/Source/LuckyDataTransfer/Public/LuckyDataTransferSubsystem.h b/Plugins/LuckyDataTransfer/Source/LuckyDataTransfer/Public/LuckyDataTransferSubsystem.h index 120913ad..cc6d3982 100644 --- a/Plugins/LuckyDataTransfer/Source/LuckyDataTransfer/Public/LuckyDataTransferSubsystem.h +++ b/Plugins/LuckyDataTransfer/Source/LuckyDataTransfer/Public/LuckyDataTransferSubsystem.h @@ -38,7 +38,7 @@ public: int32 Index = 0; }; -DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FCommandReady, const FPayload&, Payload); +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FCommandReady, const FObservationPayload&, Payload); DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FSocketReady, bool, bSuccessful); UCLASS() @@ -61,7 +61,7 @@ public: void Internal_OpenWebsocket(const FString& URL, const FString& Protocol); - FPayload InterpretData(const FString& Message); + FObservationPayload InterpretData(const FString& Message); UPROPERTY(BlueprintAssignable) FCommandReady OnCommandReady; @@ -93,7 +93,7 @@ public: void SendMessage(const FString& Message); UFUNCTION() - void CommandReady(const FPayload& Payload); + void CommandReady(const FObservationPayload& Payload); //---Observations (Sent to server from Unreal)--------------// //Feature Data declarations