UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StorageServerConnection.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
9#include "IO/IoChunkId.h"
10#include "Misc/StringBuilder.h"
11#include "Memory/MemoryFwd.h"
13#include "SocketTypes.h"
14#include "HAL/PlatformTime.h"
15#include "HAL/Runnable.h"
18#include "Cache/CacheStrategy.h"
19
20#ifndef PLATFORM_SUPPORTS_STORAGE_SERVER_CACHE
21 #define PLATFORM_SUPPORTS_STORAGE_SERVER_CACHE (PLATFORM_WINDOWS || PLATFORM_ANDROID || PLATFORM_IOS)
22#endif
23
24#if PLATFORM_SUPPORTS_STORAGE_SERVER_CACHE && PLATFORM_ANDROID
25 #define PLATFORM_ENABLES_STORAGE_SERVER_CACHE_BY_DEFAULT 1
26#endif
27
28#ifndef PLATFORM_ENABLES_STORAGE_SERVER_CACHE_BY_DEFAULT
29 #define PLATFORM_ENABLES_STORAGE_SERVER_CACHE_BY_DEFAULT 0
30#endif
31
32#ifndef PLATFORM_HAS_CUSTOM_STORAGE_SERVER_CACHE_STRATEGY
33 #define PLATFORM_HAS_CUSTOM_STORAGE_SERVER_CACHE_STRATEGY 0
34#endif
35
36#ifndef HAS_STORAGE_SERVER_RPC_GETCHUNKS_API // zen server 5.5.16 introduced a new API to request chunks
37 #define HAS_STORAGE_SERVER_RPC_GETCHUNKS_API 1
38#endif
39
40#if !UE_BUILD_SHIPPING
41
43
45
47{
48public:
51
53
55 {
56 struct Share
57 {
58 FString Id;
59 FString Path;
60 FString Alias;
61 };
62
63 struct Workspace
64 {
65 FString Id;
66 FString Root;
68
70 };
72 };
73
75 TIoStatusOr<FString> CreateShare(const FString& WorkspaceId, const FString& SharePath, const FString& Alias);
77 {
78 return bIsUsingZenWorkspace;
79 }
80
82 void FileManifestRequest(TFunctionRef<void(FIoChunkId Id, FStringView Path, int64 RawSize)> Callback);
83 void ChunkInfosRequest(TFunctionRef<void(FIoChunkId Id, FIoHash RawHash, int64 RawSize)> Callback);
84 int64 ChunkSizeRequest(const FIoChunkId& ChunkId);
86 const FIoChunkId& ChunkId,
87 const uint64 Offset,
88 const uint64 Size,
90 const bool bHardwareTargetBuffer
91 );
92
94 const FIoChunkId& ChunkId,
95 const uint64 Offset,
96 const uint64 Size,
98 const bool bHardwareTargetBuffer,
99 TFunctionRef<void(TIoStatusOr<FIoBuffer> Data)> OnResponse
100 );
101
102#if HAS_STORAGE_SERVER_RPC_GETCHUNKS_API
103 // Matches input parameters for ProjectStore::GetChunks in zen server
121
124 TFunctionRef<void(FIoChunkId Id, EStorageServerContentType MimeType, FIoBuffer Data, const TOptional<uint64>& ModTag)> OnResponse,
125 bool bSkipData = false // if bSkipData is true, then OnResponse will only be called for requested chunks that have either empty or different modtags
126 );
127#endif
128
130 {
131 return CurrentHostAddr;
132 }
133
135
136private:
139 FAnsiString BaseURI;
140 FString CurrentHostAddr;
141 bool bIsUsingZenWorkspace = false; // is the connection to the /ws/ endpoint
142
143 // Stats
144 std::atomic<uint64> AccumulatedBytes = 0;
145 std::atomic<uint32> RequestCount = 0;
146 std::atomic<double> MinRequestThroughput = DBL_MAX;
147 std::atomic<double> MaxRequestThroughput = -DBL_MAX;
148
149 TArray<FString> SortHostAddressesByLocalSubnet(TArrayView<const FString> HostAddresses, const int32 Port);
150 static bool IsPlatformSocketAddress(const FString Address);
151 static bool IsHostnameAddress(const FString Address);
152 TUniquePtr<IStorageServerHttpClient> CreateHttpClient(const FString Address, const int32 Port);
153 TSharedPtr<FInternetAddr> StringToInternetAddr(const FString Address, const int32 Port);
154 bool HandshakeRequest();
155
156 struct FCacheConfiguration
157 {
158 bool bEnable = false; // set to true to enable cache
159 bool bForceInvalidate = false; // invalidate cache if set to true
160 int32 CacheSizeKB = 0; // total size of cache in kb
161 float FlushInterval = 0.f; // interval at which to flush cache in seconds
162 int32 FlushEveryNEntries = 0; // set to >0 to flush journal every N new entries
163 int32 AbandonSizeKB = 0; // set to >0 to abandon cache if amount of invalid data goes over threshold
164 bool bUseSectionedJournal = false; // use the sectioned journal instead of the simple TMap variant
165 bool bUseMemoryMappedStorage = false; // use mmapped cache storage backend
166 };
167 void GetDefaultCacheConfiguration(FCacheConfiguration& OutConfiguration);
168 void SetupCacheStrategy();
169 bool FinalizeSetupCacheStrategy();
170 void BuildReadChunkRequestUrl(FAnsiStringBuilderBase& Builder, const FIoChunkId& ChunkId, const uint64 Offset, const uint64 Size);
171 static TIoStatusOr<FIoBuffer> ReadChunkRequestProcessHttpResult(
173 const uint64 Offset,
174 const uint64 Size,
176 const bool bHardwareTargetBuffer
177 );
178 static uint64 GetCompressedOffset(const FCompressedBuffer& Buffer, uint64 RawOffset);
179 void AddTimingInstance(const double Duration, const uint64 Bytes);
180
181 class FAsyncQueryLatestServerChunkInfo : public FRunnable
182 {
183 public:
184 FAsyncQueryLatestServerChunkInfo(FStorageServerConnection& InOwner);
185 virtual ~FAsyncQueryLatestServerChunkInfo();
186
187 bool IsFinished() const;
188 void Wait();
189 private:
190 virtual uint32 Run() override;
191
193 class FEvent* IsCompleted;
194 };
195
197};
198
199#endif
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
EStorageServerContentType
Definition StorageServerHttpClient.h:13
uint32 Offset
Definition VulkanMemory.cpp:4033
uint32 Size
Definition VulkanMemory.cpp:4034
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition CompressedBuffer.h:50
Definition Event.h:21
Definition IoBuffer.h:15
Definition IoChunkId.h:64
Definition IoStatus.h:60
Definition Runnable.h:20
Definition StorageServerConnection.h:47
~FStorageServerConnection()=default
void PackageStoreRequest(TFunctionRef< void(FPackageStoreEntryResource &&)> Callback)
Definition StorageServerConnection.cpp:228
FIoStatus ReadChunkBatchRequest(const TArray< FChunkBatchRequestEntry > &Chunks, TFunctionRef< void(FIoChunkId Id, EStorageServerContentType MimeType, FIoBuffer Data, const TOptional< uint64 > &ModTag)> OnResponse, bool bSkipData=false)
Definition StorageServerConnection.cpp:467
void ChunkInfosRequest(TFunctionRef< void(FIoChunkId Id, FIoHash RawHash, int64 RawSize)> Callback)
Definition StorageServerConnection.cpp:289
void GetAndResetStats(IStorageServerPlatformFile::FConnectionStats &OutStats)
Definition StorageServerConnection.cpp:695
TIoStatusOr< FString > CreateShare(const FString &WorkspaceId, const FString &SharePath, const FString &Alias)
Definition StorageServerConnection.cpp:203
TIoStatusOr< FIoBuffer > ReadChunkRequest(const FIoChunkId &ChunkId, const uint64 Offset, const uint64 Size, const TOptional< FIoBuffer > OptDestination, const bool bHardwareTargetBuffer)
Definition StorageServerConnection.cpp:366
bool IsConnectedToWorkspace() const
Definition StorageServerConnection.h:76
FStorageServerConnection()=default
void FileManifestRequest(TFunctionRef< void(FIoChunkId Id, FStringView Path, int64 RawSize)> Callback)
Definition StorageServerConnection.cpp:255
int64 ChunkSizeRequest(const FIoChunkId &ChunkId)
Definition StorageServerConnection.cpp:321
void ReadChunkRequestAsync(const FIoChunkId &ChunkId, const uint64 Offset, const uint64 Size, const TOptional< FIoBuffer > OptDestination, const bool bHardwareTargetBuffer, TFunctionRef< void(TIoStatusOr< FIoBuffer > Data)> OnResponse)
Definition StorageServerConnection.cpp:663
FStringView GetHostAddr() const
Definition StorageServerConnection.h:129
TIoStatusOr< Workspaces > GetWorkspaces()
Definition StorageServerConnection.cpp:124
Definition ArrayView.h:139
Definition Array.h:670
Definition AssetRegistryState.h:50
Definition IoStatus.h:101
Definition SharedPointer.h:692
Definition StringBuilder.h:79
Definition UniquePtr.h:107
bool IsFinished(const EHttpRequestStatus::Type Value)
Definition IHttpBase.h:49
@ Owner
Definition XmppMultiUserChat.h:25
void Run(FMassRuntimePipeline &RuntimePipeline, FProcessingContext &ProcessingContext)
Definition MassExecutor.cpp:25
UE_AUTORTFM_NOAUTORTFM FWaitState Wait(const void *Address, bool(*CanWait)(void *), void *CanWaitContext, void(*BeforeWait)(void *), void *BeforeWaitContext)
Definition ParkingLot.cpp:504
bool IsCompleted(const HigherLevelTaskType &Prerequisite)
Definition Task.h:351
Definition IoHash.h:33
Definition PackageStore.h:121
Definition StorageServerConnection.h:104
TOptional< uint64 > ModTag
Definition StorageServerConnection.h:108
uint64 Offset
Definition StorageServerConnection.h:106
static FChunkBatchRequestEntry DataRequest(const FIoChunkId &ChunkId, const uint64 Offset, const uint64 Size)
Definition StorageServerConnection.h:110
uint64 Size
Definition StorageServerConnection.h:107
FIoChunkId ChunkId
Definition StorageServerConnection.h:105
static FChunkBatchRequestEntry VerifyModTagRequest(const FIoChunkId &ChunkId, const uint64 ModTag)
Definition StorageServerConnection.h:116
Definition StorageServerConnection.h:57
FString Alias
Definition StorageServerConnection.h:60
FString Path
Definition StorageServerConnection.h:59
FString Id
Definition StorageServerConnection.h:58
Definition StorageServerConnection.h:64
FString Id
Definition StorageServerConnection.h:65
bool AllowShareCreationFromHttp
Definition StorageServerConnection.h:67
FString Root
Definition StorageServerConnection.h:66
TArray< Share > Shares
Definition StorageServerConnection.h:69
Definition StorageServerConnection.h:55
TArray< Workspace > Workspaces
Definition StorageServerConnection.h:71
Definition IStorageServerPlatformFile.h:13
Definition Optional.h:131
Definition Tuple.h:652