5#include "CoreMinimal.h"
6#include "Dom/JsonObject.h"
7#include "Launch/Resources/Version.h"
10template <
class TEvent>
11using TEventMulticastDelegate = TMulticastDelegate<void(
const TEvent& Event)>;
12template <
class TEvent>
13using TEventDelegate =
typename TEventMulticastDelegate<TEvent>::FDelegate;
14#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION <= 27
15template <
class TEvent,
class UserClass>
16using TEventDelegateUObjectMethodPtr =
typename TEventDelegate<TEvent>::template TUObjectMethodDelegate<UserClass>::FMethodPtr;
17template <
class TEvent,
class UserClass>
18using TEventDelegateSpMethodPtr =
typename TEventDelegate<TEvent>::template TSPMethodDelegate<UserClass>::FMethodPtr;
20template <
class TEvent,
class UserClass>
21using TEventDelegateUObjectMethodPtr =
typename TEventDelegate<TEvent>::template TMethodPtr<UserClass>;
22template <
class TEvent,
class UserClass>
23using TEventDelegateSpMethodPtr =
typename TEventDelegate<TEvent>::template TMethodPtr<UserClass>;
26class IJsonEventSubscription
29 virtual ~IJsonEventSubscription() = 0;
30 virtual bool OnMessage(
const TSharedRef<FJsonObject>&) = 0;
31 virtual int32 Unsubscribe(UObject* Object) = 0;
34inline IJsonEventSubscription::~IJsonEventSubscription() =
default;
37class TJsonEventSubscription final :
public IJsonEventSubscription
40 virtual bool OnMessage(
const TSharedRef<FJsonObject>&)
override;
41 virtual int32 Unsubscribe(UObject* Object)
override;
43 TEventMulticastDelegate<T> Delegate;
46using FEventSubscriptionPtr = TSharedPtr<IJsonEventSubscription>;
49bool TJsonEventSubscription<T>::OnMessage(
const TSharedRef<FJsonObject>&
JsonObject)
52 if (!JsonObjectDeserialization::JsonObjectToUStruct<T>(
JsonObject, &OutStruct))
56 check(OutStruct.Type == T::StaticType());
58 Delegate.Broadcast(OutStruct);
63int32 TJsonEventSubscription<T>::Unsubscribe(UObject* Object)
65 return Delegate.RemoveAll(Object);
Conversion to and from dynamic JSON objects.
Definition: StreamJson.h:16