5#include "ChatSocketEvents.h"
6#include "Containers/Ticker.h"
7#include "CoreMinimal.h"
8#include "IChatSocket.h"
17using FTickHandle = FTSTicker::FDelegateHandle;
18using FTick = FTSTicker;
23 FChatSocket() =
delete;
24 explicit FChatSocket(
const TSharedRef<FTokenManager>&,
const FString& ApiKey,
const FString& Host,
const FUserObjectDto& User);
25 virtual ~FChatSocket()
override;
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;
35 enum class EConnectionState
44 void CreateUnderlyingWebSocket(
bool bRefreshToken);
45 void ConnectUnderlyingWebSocket();
46 void CloseUnderlyingWebSocket();
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);
60 void StartMonitoring();
61 void StopMonitoring();
62 bool KeepAlive(
float DeltaTime)
const;
63 bool CheckNeedToReconnect(
float DeltaTime);
64 void Reconnect(
bool bRefreshToken);
66 void SetConnectionState(EConnectionState);
68 FString BuildUrl(
bool bRefreshToken)
const;
70 TUniquePtr<FChatSocketEvents> ChatSocketEvents;
71 TSharedPtr<FTokenManager> TokenManager;
74 FString ConnectionRequestJson;
79 TSharedPtr<IWebSocket> WebSocket;
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;
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