Stream Chat Unreal SDK
Loading...
Searching...
No Matches
ChatSocket.h
1// Copyright 2022 Stream.IO, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "ChatSocketEvents.h"
6#include "Containers/Ticker.h"
7#include "CoreMinimal.h"
8#include "IChatSocket.h"
9#include "Launch/Resources/Version.h"
10
11class FTokenManager;
12class IWebSocket;
15struct FOwnUserDto;
16struct FUserObjectDto;
17
18#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION <= 27
19using FTickHandle = FDelegateHandle;
20using FTick = FTicker;
21#else
22using FTickHandle = FTSTicker::FDelegateHandle;
23using FTick = FTSTicker;
24#endif
25
26class FChatSocket final : public IChatSocket
27{
28public:
29 FChatSocket() = delete;
30 explicit FChatSocket(const TSharedRef<FTokenManager>&, const FString& ApiKey, const FString& Host, const FUserObjectDto& User);
31 virtual ~FChatSocket() override;
32
33 virtual void Connect(TFunction<void(const FOwnUserDto&)> Callback) override;
34 virtual void Disconnect() override;
35 virtual bool IsConnected() const override;
36 virtual const FString& GetConnectionId() const override;
37
38 virtual FChatSocketEvents& Events() override;
39
40private:
41 enum class EConnectionState
42 {
43 NotConnected,
44 Connecting,
45 Connected,
46 Disconnecting,
47 Reconnecting,
48 };
49
50 void CreateUnderlyingWebSocket(bool bRefreshToken);
51 void ConnectUnderlyingWebSocket();
52 void CloseUnderlyingWebSocket();
53
54 // WS event handlers
55 void BindEventHandlers();
56 void UnbindEventHandlers();
57 void HandleWebSocketConnected();
58 void HandleWebSocketConnectionError(const FString& Error);
59 void HandleWebSocketConnectionClosed(int32 Status, const FString& Reason, bool bWasClean);
60 void HandleWebSocketMessage(const FString& JsonString);
61 void HandleChatError(const FErrorResponseDto& Error);
62
63 void OnHealthCheckEvent(const FHealthCheckEvent&);
64 void OnHealthyConnect(const FOwnUserDto&);
65
66 void StartMonitoring();
67 void StopMonitoring();
68 bool KeepAlive(float DeltaTime) const;
69 bool CheckNeedToReconnect(float DeltaTime);
70 void Reconnect(bool bRefreshToken);
71
72 void SetConnectionState(EConnectionState);
73
74 FString BuildUrl(bool bRefreshToken) const;
75
76 TUniquePtr<FChatSocketEvents> ChatSocketEvents;
77 TSharedPtr<FTokenManager> TokenManager;
78 FString ApiKey;
79 FString Host;
80 FString ConnectionRequestJson;
81
83 FString ConnectionId;
84
85 TSharedPtr<IWebSocket> WebSocket;
86
87 DECLARE_DELEGATE_OneParam(FOnConnectDelegate, const FOwnUserDto&);
88 FOnConnectDelegate PendingOnConnectCallback;
89 EConnectionState ConnectionState = EConnectionState::NotConnected;
90 FDelegateHandle HealthCheckEventDelegateHandle;
91 FTickHandle KeepAliveTickerHandle;
92 FTickHandle ReconnectTickerHandle;
93 TOptional<FDateTime> LastEventTime;
94 uint32 ReconnectAttempt = 0;
95};
Encapsulates subscribing and unsubscribing to and from Stream Chat WebSocket events.
Definition: ChatSocketEvents.h:14
Interface to a Stream Chat WebSocket connection.
Definition: IChatSocket.h:17
#/components/schemas/APIError
Definition: ErrorResponseDto.h:15
Sent periodically from the API to indicate a healthy connection.
Definition: HealthCheckEvent.h:18
#/components/schemas/OwnUser
Definition: OwnUserDto.h:17
#/components/schemas/UserObject Used in both requests and responses
Definition: UserObjectDto.h:17