5#include "CoreMinimal.h"
6#include "Detail/ChatSocketDetail.h"
7#include "Detail/JsonEventSubscription.h"
17 template <
class TEvent>
18 FDelegateHandle
Subscribe(TEventDelegate<TEvent> Callback);
21 template <
class TEvent,
class UserClass>
22 FDelegateHandle
SubscribeUObject(UserClass* Obj, TEventDelegateUObjectMethodPtr<TEvent, UserClass> Method);
25 template <
class TEvent,
class UserClass>
26 FDelegateHandle
SubscribeSp(UserClass* Obj, TEventDelegateSpMethodPtr<TEvent, UserClass> Method);
29 template <
class TEvent,
typename FunctorType,
typename... VarTypes>
30 FDelegateHandle
SubscribeLambda(FunctorType&& InFunctor, VarTypes... Vars);
32 template <
class TEvent>
33 bool Unsubscribe(FDelegateHandle);
34 STREAMCHATWEBSOCKET_API int32 UnsubscribeAll(UObject* Object);
37 friend class FChatSocket;
39 template <
class TEvent>
40 void Broadcast(
const TEvent&);
42 void ProcessEvent(
const FName&
Type,
const TSharedRef<FJsonObject>);
44 TMap<FName, FEventSubscriptionPtr> Subscriptions;
47template <
class TEvent>
50 return Detail::SubscribeToEvent<TEvent>(Subscriptions, Callback);
53template <
class TEvent,
class UserClass>
56 return Detail::SubscribeToUObjectEvent<TEvent, UserClass>(Subscriptions, Obj, Method);
59template <
class TEvent,
class UserClass>
62 return Detail::SubscribeToSpEvent<TEvent, UserClass>(Subscriptions, Obj, Method);
65template <
class TEvent,
typename FunctorType,
typename... VarTypes>
68 return Detail::SubscribeToLambdaEvent<TEvent, FunctorType, VarTypes...>(Subscriptions, Forward<FunctorType>(InFunctor), Vars...);
71template <
class TEvent>
72bool FChatSocketEvents::Unsubscribe(
const FDelegateHandle DelegateHandle)
74 return Detail::UnsubscribeFromEvent<TEvent>(Subscriptions, DelegateHandle);
77template <
class TEvent>
78void FChatSocketEvents::Broadcast(
const TEvent& Event)
80 const FName EventType{TEvent::StaticType()};
81 const FEventSubscriptionPtr* SubPtr = Subscriptions.Find(EventType);
87 TJsonEventSubscription<TEvent>& Subscription = StaticCast<TJsonEventSubscription<TEvent>&>(**SubPtr);
88 Subscription.Delegate.Broadcast(Event);
Encapsulates subscribing and unsubscribing to and from Stream Chat WebSocket events.
Definition: ChatSocketEvents.h:14
FDelegateHandle Subscribe(TEventDelegate< TEvent > Callback)
Subscribe to a WebSocket event using your own delegate object.
Definition: ChatSocketEvents.h:48
FDelegateHandle SubscribeUObject(UserClass *Obj, TEventDelegateUObjectMethodPtr< TEvent, UserClass > Method)
Subscribe to a WebSocket event using a UObject-based member function delegate.
Definition: ChatSocketEvents.h:54
FDelegateHandle SubscribeLambda(FunctorType &&InFunctor, VarTypes... Vars)
Subscribe to a WebSocket event using a UObject-based member function delegate.
Definition: ChatSocketEvents.h:66
FDelegateHandle SubscribeSp(UserClass *Obj, TEventDelegateSpMethodPtr< TEvent, UserClass > Method)
Subscribe to a WebSocket event using a shared pointer-based (fast, not thread-safe) member function d...
Definition: ChatSocketEvents.h:60
@ Type
Type of the message.