Stream Chat Unreal SDK
Loading...
Searching...
No Matches
ChatSocket.h
1// Copyright 2026 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
10class FTokenManager;
11class IWebSocket;
14struct FOwnUserDto;
15struct FUserObjectDto;
16
17using FTickHandle = FTSTicker::FDelegateHandle;
18using FTick = FTSTicker;
19
20class FChatSocket final : public IChatSocket
21{
22public:
23 FChatSocket() = delete;
24 explicit FChatSocket(const TSharedRef<FTokenManager>&, const FString& ApiKey, const FString& Host, const FUserObjectDto& User);
25 virtual ~FChatSocket() override;
26
27 virtual void Connect(TFunction<void(const FOwnUserDto&)> Callback) override;
28 virtual void Disconnect() override;
29 virtual bool IsConnected() const override;
30 virtual const FString& GetConnectionId() const override;
31
32 virtual FChatSocketEvents& Events() override;
33
34private:
35 enum class EConnectionState
36 {
37 NotConnected,
38 Connecting,
39 Connected,
40 Disconnecting,
41 Reconnecting,
42 };
43
44 void CreateUnderlyingWebSocket(bool bRefreshToken);
45 void ConnectUnderlyingWebSocket();
46 void CloseUnderlyingWebSocket();
47
48 // WS event handlers
49 void BindEventHandlers();
50 void UnbindEventHandlers();
51 void HandleWebSocketConnected();
52 void HandleWebSocketConnectionError(const FString& Error);
53 void HandleWebSocketConnectionClosed(int32 Status, const FString& Reason, bool bWasClean);
54 void HandleWebSocketMessage(const FString& JsonString);
55 void HandleChatError(const FErrorResponseDto& Error);
56
57 void OnHealthCheckEvent(const FHealthCheckEvent&);
58 void OnHealthyConnect(const FOwnUserDto&);
59
60 void StartMonitoring();
61 void StopMonitoring();
62 bool KeepAlive(float DeltaTime) const;
63 bool CheckNeedToReconnect(float DeltaTime);
64 void Reconnect(bool bRefreshToken);
65
66 void SetConnectionState(EConnectionState);
67
68 FString BuildUrl(bool bRefreshToken) const;
69
70 TUniquePtr<FChatSocketEvents> ChatSocketEvents;
71 TSharedPtr<FTokenManager> TokenManager;
72 FString ApiKey;
73 FString Host;
74 FString ConnectionRequestJson;
75
77 FString ConnectionId;
78
79 TSharedPtr<IWebSocket> WebSocket;
80
81 DECLARE_DELEGATE_OneParam(FOnConnectDelegate, const FOwnUserDto&);
82 FOnConnectDelegate PendingOnConnectCallback;
83 EConnectionState ConnectionState = EConnectionState::NotConnected;
84 FDelegateHandle HealthCheckEventDelegateHandle;
85 FTickHandle KeepAliveTickerHandle;
86 FTickHandle ReconnectTickerHandle;
87 TOptional<FDateTime> LastEventTime;
88 uint32 ReconnectAttempt = 0;
89};
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