Stream Chat Unreal SDK
Loading...
Searching...
No Matches
JsonEventSubscription.h
1// Copyright 2026 Stream.IO, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Dom/JsonObject.h"
7#include "StreamJson.h"
8
9template <class TEvent>
10using TEventMulticastDelegate = TMulticastDelegate<void(const TEvent& Event)>;
11template <class TEvent>
12using TEventDelegate = typename TEventMulticastDelegate<TEvent>::FDelegate;
13template <class TEvent, class UserClass>
14using TEventDelegateUObjectMethodPtr = typename TEventDelegate<TEvent>::template TMethodPtr<UserClass>;
15template <class TEvent, class UserClass>
16using TEventDelegateSpMethodPtr = typename TEventDelegate<TEvent>::template TMethodPtr<UserClass>;
17
18class IJsonEventSubscription
19{
20public:
21 virtual ~IJsonEventSubscription() = 0;
22 virtual bool OnMessage(const TSharedRef<FJsonObject>&) = 0;
23 virtual int32 Unsubscribe(UObject* Object) = 0;
24};
25
26inline IJsonEventSubscription::~IJsonEventSubscription() = default;
27
28template <class T>
29class TJsonEventSubscription final : public IJsonEventSubscription
30{
31public:
32 virtual bool OnMessage(const TSharedRef<FJsonObject>&) override;
33 virtual int32 Unsubscribe(UObject* Object) override;
34
35 TEventMulticastDelegate<T> Delegate;
36};
37
38using FEventSubscriptionPtr = TSharedPtr<IJsonEventSubscription>;
39
40template <class T>
41bool TJsonEventSubscription<T>::OnMessage(const TSharedRef<FJsonObject>& JsonObject)
42{
43 T OutStruct;
45 {
46 return false;
47 }
48 check(OutStruct.Type == T::StaticType());
49
50 Delegate.Broadcast(OutStruct);
51 return true;
52}
53
54template <class T>
55int32 TJsonEventSubscription<T>::Unsubscribe(UObject* Object)
56{
57 return Delegate.RemoveAll(Object);
58}
STREAMJSON_API bool JsonObjectToUStruct(const TSharedRef< FJsonObject > &JsonObject, const UStruct *StructDefinition, void *OutStruct)
Converts from a Json Object to a UStruct, using importText.
Definition JsonObjectDeserialization.cpp:684
Conversion to and from dynamic JSON objects.
Definition StreamJson.h:16