Stream Chat Unreal SDK
Loading...
Searching...
No Matches
ChatSocketEvents.h
1// Copyright 2022 Stream.IO, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "Detail/ChatSocketDetail.h"
7#include "Detail/JsonEventSubscription.h"
8
14{
15public:
17 template <class TEvent>
18 FDelegateHandle Subscribe(TEventDelegate<TEvent> Callback);
19
21 template <class TEvent, class UserClass>
22 FDelegateHandle SubscribeUObject(UserClass* Obj, TEventDelegateUObjectMethodPtr<TEvent, UserClass> Method);
23
25 template <class TEvent, class UserClass>
26 FDelegateHandle SubscribeSp(UserClass* Obj, TEventDelegateSpMethodPtr<TEvent, UserClass> Method);
27
29 template <class TEvent, typename FunctorType, typename... VarTypes>
30 FDelegateHandle SubscribeLambda(FunctorType&& InFunctor, VarTypes... Vars);
31
32 template <class TEvent>
33 bool Unsubscribe(FDelegateHandle);
34 STREAMCHATWEBSOCKET_API int32 UnsubscribeAll(UObject* Object);
35
36private:
37 friend class FChatSocket;
38
39 template <class TEvent>
40 void Broadcast(const TEvent&);
41
42 void ProcessEvent(const FName& Type, const TSharedRef<FJsonObject>);
43
44 TMap<FName, FEventSubscriptionPtr> Subscriptions;
45};
46
47template <class TEvent>
48FDelegateHandle FChatSocketEvents::Subscribe(TEventDelegate<TEvent> Callback)
49{
50 return Detail::SubscribeToEvent<TEvent>(Subscriptions, Callback);
51}
52
53template <class TEvent, class UserClass>
54FDelegateHandle FChatSocketEvents::SubscribeUObject(UserClass* Obj, TEventDelegateUObjectMethodPtr<TEvent, UserClass> Method)
55{
56 return Detail::SubscribeToUObjectEvent<TEvent, UserClass>(Subscriptions, Obj, Method);
57}
58
59template <class TEvent, class UserClass>
60FDelegateHandle FChatSocketEvents::SubscribeSp(UserClass* Obj, TEventDelegateSpMethodPtr<TEvent, UserClass> Method)
61{
62 return Detail::SubscribeToSpEvent<TEvent, UserClass>(Subscriptions, Obj, Method);
63}
64
65template <class TEvent, typename FunctorType, typename... VarTypes>
66FDelegateHandle FChatSocketEvents::SubscribeLambda(FunctorType&& InFunctor, VarTypes... Vars)
67{
68 return Detail::SubscribeToLambdaEvent<TEvent, FunctorType, VarTypes...>(Subscriptions, Forward<FunctorType>(InFunctor), Vars...);
69}
70
71template <class TEvent>
72bool FChatSocketEvents::Unsubscribe(const FDelegateHandle DelegateHandle)
73{
74 return Detail::UnsubscribeFromEvent<TEvent>(Subscriptions, DelegateHandle);
75}
76
77template <class TEvent>
78void FChatSocketEvents::Broadcast(const TEvent& Event)
79{
80 const FName EventType{TEvent::StaticType()};
81 const FEventSubscriptionPtr* SubPtr = Subscriptions.Find(EventType);
82 if (!SubPtr)
83 {
84 return;
85 }
86
87 TJsonEventSubscription<TEvent>& Subscription = StaticCast<TJsonEventSubscription<TEvent>&>(**SubPtr);
88 Subscription.Delegate.Broadcast(Event);
89}
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.