5#include "ChatSocketEvents.h"
6#include "Containers/Ticker.h"
7#include "CoreMinimal.h"
8#include "IChatSocket.h"
9#include "Launch/Resources/Version.h"
18#if ENGINE_MAJOR_VERSION == 4 && ENGINE_MINOR_VERSION <= 27
19using FTickHandle = FDelegateHandle;
22using FTickHandle = FTSTicker::FDelegateHandle;
23using FTick = FTSTicker;
29 FChatSocket() =
delete;
30 explicit FChatSocket(
const TSharedRef<FTokenManager>&,
const FString& ApiKey,
const FString& Host,
const FUserObjectDto& User);
31 virtual ~FChatSocket()
override;
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;
41 enum class EConnectionState
50 void CreateUnderlyingWebSocket(
bool bRefreshToken);
51 void ConnectUnderlyingWebSocket();
52 void CloseUnderlyingWebSocket();
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);
66 void StartMonitoring();
67 void StopMonitoring();
68 bool KeepAlive(
float DeltaTime)
const;
69 bool CheckNeedToReconnect(
float DeltaTime);
70 void Reconnect(
bool bRefreshToken);
72 void SetConnectionState(EConnectionState);
74 FString BuildUrl(
bool bRefreshToken)
const;
76 TUniquePtr<FChatSocketEvents> ChatSocketEvents;
77 TSharedPtr<FTokenManager> TokenManager;
80 FString ConnectionRequestJson;
85 TSharedPtr<IWebSocket> WebSocket;
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;
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