UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NetworkPlatformFile.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Containers/Array.h"
6#include "Containers/Set.h"
9#include "CoreMinimal.h"
11#include "HAL/CriticalSection.h"
12#include "HAL/Event.h"
13#include "Logging/LogMacros.h"
14#include "Math/UnrealMathSSE.h"
15#include "Misc/CoreMisc.h" // included for FSelfRegisteringExec
16#include "Misc/DateTime.h"
17#include "NetworkMessage.h"
18#include "ServerTOC.h"
20
21class FArrayReader;
22class FOutputDevice;
23class FScopedEvent;
25
26namespace UE { namespace Cook
27{
28 class FCookOnTheFlyMessage;
29 class ICookOnTheFlyServerConnection;
30}}
31
33
34
39{
40 friend class FAsyncFileSync;
42
43protected:
52
53 NETWORKFILE_API virtual void OnFileUpdated(const FString& LocalFilename);
54
55public:
56
57
58 static const TCHAR* GetTypeName()
59 {
60 return TEXT("NetworkFile");
61 }
62
65
68
69 NETWORKFILE_API virtual bool ShouldBeUsed(IPlatformFile* Inner, const TCHAR* CmdLine) const override;
70 NETWORKFILE_API virtual bool Initialize(IPlatformFile* Inner, const TCHAR* CmdLine) override;
71 NETWORKFILE_API virtual void InitializeAfterSetActive() override;
72
73 virtual IPlatformFile* GetLowerLevel() override
74 {
75 return InnerPlatformFile;
76 }
91
92 virtual const TCHAR* GetName() const override
93 {
95 }
96
97 virtual bool IsUsable()
98 {
99 return bIsUsable;
100 }
101
102 virtual bool FileExists(const TCHAR* Filename) override
103 {
105 GetFileInfo(Filename, Info);
106 return Info.FileExists;
107 }
108 virtual int64 FileSize(const TCHAR* Filename) override
109 {
111 GetFileInfo(Filename, Info);
112 return Info.Size;
113 }
114 NETWORKFILE_API virtual bool DeleteFile(const TCHAR* Filename) override;
115 virtual bool IsReadOnly(const TCHAR* Filename) override
116 {
118 GetFileInfo(Filename, Info);
119 return Info.ReadOnly;
120 }
121 NETWORKFILE_API virtual bool MoveFile(const TCHAR* To, const TCHAR* From) override;
122 NETWORKFILE_API virtual bool SetReadOnly(const TCHAR* Filename, bool bNewReadOnlyValue) override;
123 virtual FDateTime GetTimeStamp(const TCHAR* Filename) override
124 {
126 GetFileInfo(Filename, Info);
127 return Info.TimeStamp;
128 }
129 NETWORKFILE_API virtual void SetTimeStamp(const TCHAR* Filename, FDateTime DateTime) override;
130 virtual FDateTime GetAccessTimeStamp(const TCHAR* Filename) override
131 {
133 GetFileInfo(Filename, Info);
134 return Info.AccessTimeStamp;
135 }
136 virtual FString GetFilenameOnDisk(const TCHAR* Filename) override
137 {
138 return Filename;
139 }
140 NETWORKFILE_API virtual IFileHandle* OpenRead(const TCHAR* Filename, bool bAllowWrite = false) override;
141 NETWORKFILE_API virtual IFileHandle* OpenWrite(const TCHAR* Filename, bool bAppend = false, bool bAllowRead = false) override;
142 NETWORKFILE_API virtual bool DirectoryExists(const TCHAR* Directory) override;
143 NETWORKFILE_API virtual bool CreateDirectoryTree(const TCHAR* Directory) override;
144 NETWORKFILE_API virtual bool CreateDirectory(const TCHAR* Directory) override;
145 NETWORKFILE_API virtual bool DeleteDirectory(const TCHAR* Directory) override;
146
148
149 NETWORKFILE_API virtual bool IterateDirectory(const TCHAR* Directory, IPlatformFile::FDirectoryVisitor& Visitor) override;
150 NETWORKFILE_API virtual bool IterateDirectoryRecursively(const TCHAR* Directory, IPlatformFile::FDirectoryVisitor& Visitor) override;
151
152 NETWORKFILE_API virtual bool IterateDirectoryStat(const TCHAR* Directory, IPlatformFile::FDirectoryStatVisitor& Visitor) override;
153 NETWORKFILE_API virtual bool IterateDirectoryStatRecursively(const TCHAR* Directory, IPlatformFile::FDirectoryStatVisitor& Visitor) override;
154
155 NETWORKFILE_API virtual bool DeleteDirectoryRecursively(const TCHAR* Directory) override;
157
158 NETWORKFILE_API virtual FString ConvertToAbsolutePathForExternalAppForRead( const TCHAR* Filename ) override;
159 NETWORKFILE_API virtual FString ConvertToAbsolutePathForExternalAppForWrite( const TCHAR* Filename ) override;
160
161 NETWORKFILE_API virtual bool SendMessageToServer(const TCHAR* Message, IPlatformFile::IFileServerMessageHandler* Handler) override;
162
163
164 NETWORKFILE_API virtual void Tick() override;
165
166
167
170
171 NETWORKFILE_API bool SendReadMessage(uint8* Destination, int64 BytesToRead);
173
175
176
177 NETWORKFILE_API virtual FString GetVersionInfo() const;
178
179protected:
180
182 // FSelfRegisteringExec interface
183 NETWORKFILE_API virtual bool Exec_Runtime(class UWorld* InWorld, const TCHAR* Cmd, FOutputDevice& Ar ) override;
184
185
190 NETWORKFILE_API virtual void PerformHeartbeat();
191
192 NETWORKFILE_API virtual void GetFileInfo(const TCHAR* Filename, FFileInfo& Info);
193
201
203
206
207private:
208
216 static NETWORKFILE_API bool IsMediaExtension(const TCHAR* Ext);
217
224 static NETWORKFILE_API bool IsAdditionalCookedFileExtension(const TCHAR* Ext);
225
230 NETWORKFILE_API bool IsInLocalDirectoryUnGuarded(const FString& Filename);
231
235 NETWORKFILE_API bool IsInLocalDirectory(const FString& Filename);
236
240 NETWORKFILE_API void EnsureFileIsLocal(const FString& Filename);
241
242 NETWORKFILE_API void OnCookOnTheFlyMessage(const UE::Cook::FCookOnTheFlyMessage& Message);
243
244protected:
249 NETWORKFILE_API void MakeStandardNetworkFilename(FString& Filename);
250
251protected:
252
255
258
261
264
267
270
273
276
279
284
285 // the connection flags are passed to the server during GetFileList
286 // the server may cache them
288 // Frequency to send heartbeats to server in seconds set to negative number to disable
290
291
292 // some stats for messuring network platform file performance
293 double TotalWriteTime; // total non async time spent writing to disk
294 double TotalNetworkSyncTime; // total non async time spent syncing to network
295 int32 TotalFilesSynced; // total number files synced from network
296 int32 TotalUnsolicitedPackages; // total number unsolicited files synced
298 int32 UnsolicitedPackagesHits; // total number of hits from waiting on unsolicited packages
299 int32 UnsolicitedPackageWaits; // total number of waits on unsolicited packages
300 double TotalTimeSpentInUnsolicitedPackages; // total time async processing unsolicited packages
301 double TotalWaitForAsyncUnsolicitedPackages; // total time spent waiting for unsolicited packages
302
303
304
305private:
306
307 /* Unsolicitied files events */
308 FScopedEvent *FinishedAsyncNetworkReadUnsolicitedFiles;
309 FScopedEvent *FinishedAsyncWriteUnsolicitedFiles;
310
312 TSpscQueue<TArray<uint8>> PendingPayloads;
313 FEventRef NewPayloadEvent;
314
315 static NETWORKFILE_API FString MP4Extension;
316 static NETWORKFILE_API FString BulkFileExtension;
317 static NETWORKFILE_API FString ExpFileExtension;
318 static NETWORKFILE_API FString FontFileExtension;
319};
320
322{
324 FString Filename;
325 int64 FilePos;
326 int64 Size;
327 bool bWritable;
328 bool bReadable;
329public:
330
333 , Filename(InFilename)
334 , FilePos(InFilePos)
336 , bWritable(bWriting)
337 , bReadable(!bWriting)
338 {
339 }
340
341 virtual int64 Tell() override
342 {
343 return FilePos;
344 }
345 virtual bool Seek(int64 NewPosition) override
346 {
347 if (NewPosition >= 0 && NewPosition <= Size)
348 {
349 FilePos = NewPosition;
350 return true;
351 }
352 return false;
353 }
354 virtual bool SeekFromEnd(int64 NewPositionRelativeToEnd = 0) override
355 {
357 }
358 virtual bool Read(uint8* Destination, int64 BytesToRead) override
359 {
360 bool Result = false;
361 if (bReadable && BytesToRead >= 0 && BytesToRead + FilePos <= Size)
362 {
363 if (BytesToRead == 0)
364 {
365 Result = true;
366 }
367 else
368 {
369 Result = Network.SendReadMessage(Destination, BytesToRead);
370 if (Result)
371 {
372 FilePos += BytesToRead;
373 }
374 }
375 }
376 return Result;
377 }
378 virtual bool Write(const uint8* Source, int64 BytesToWrite) override
379 {
380 bool Result = false;
381 if (bWritable && BytesToWrite >= 0)
382 {
383 if (BytesToWrite == 0)
384 {
385 Result = true;
386 }
387 else
388 {
389 Result = Network.SendWriteMessage(Source, BytesToWrite);
390 if (Result)
391 {
392 FilePos += BytesToWrite;
393 Size = FMath::Max<int64>(FilePos, Size);
394 }
395 }
396 }
397 return Result;
398 }
399 virtual bool Flush(const bool bFullFlush = false) override
400 {
401 return false;
402 }
403 virtual bool Truncate(int64 NewSize) override
404 {
405 return false;
406 }
407};
408
409
410
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int64 int64
A 64-bit signed integer.
Definition Platform.h:1127
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
EPlatformFileRead
Definition GenericPlatformFile.h:59
EPlatformFileWrite
Definition GenericPlatformFile.h:70
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
EConnectionFlags
Definition NetworkMessage.h:77
uint32 Size
Definition VulkanMemory.cpp:4034
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition ArrayReader.h:12
Definition Event.h:135
Definition NetworkMessage.h:289
Definition NetworkPlatformFile.h:322
virtual bool Seek(int64 NewPosition) override
Definition NetworkPlatformFile.h:345
virtual int64 Tell() override
Definition NetworkPlatformFile.h:341
virtual bool Write(const uint8 *Source, int64 BytesToWrite) override
Definition NetworkPlatformFile.h:378
virtual bool Truncate(int64 NewSize) override
Definition NetworkPlatformFile.h:403
virtual bool Flush(const bool bFullFlush=false) override
Definition NetworkPlatformFile.h:399
virtual bool Read(uint8 *Destination, int64 BytesToRead) override
Definition NetworkPlatformFile.h:358
virtual bool SeekFromEnd(int64 NewPositionRelativeToEnd=0) override
Definition NetworkPlatformFile.h:354
FNetworkFileHandle(FNetworkPlatformFile &InNetwork, const TCHAR *InFilename, int64 InFilePos, int64 InFileSize, bool bWriting)
Definition NetworkPlatformFile.h:331
Definition NetworkPlatformFile.h:39
virtual NETWORKFILE_API bool DeleteDirectory(const TCHAR *Directory) override
Definition NetworkPlatformFile.cpp:537
EConnectionFlags ConnectionFlags
Definition NetworkPlatformFile.h:287
virtual NETWORKFILE_API void GetFileInfo(const TCHAR *Filename, FFileInfo &Info)
Definition NetworkPlatformFile.cpp:789
virtual FString GetFilenameOnDisk(const TCHAR *Filename) override
Definition NetworkPlatformFile.h:136
NETWORKFILE_API bool SendWriteMessage(const uint8 *Source, int64 BytesToWrite)
Definition NetworkPlatformFile.cpp:903
virtual void GetTimeStampPair(const TCHAR *PathA, const TCHAR *PathB, FDateTime &OutTimeStampA, FDateTime &OutTimeStampB)
Definition NetworkPlatformFile.h:81
virtual NETWORKFILE_API void SetTimeStamp(const TCHAR *Filename, FDateTime DateTime) override
Definition NetworkPlatformFile.cpp:484
virtual NETWORKFILE_API bool IterateDirectoryRecursively(const TCHAR *Directory, IPlatformFile::FDirectoryVisitor &Visitor) override
Definition NetworkPlatformFile.cpp:592
virtual NETWORKFILE_API bool MoveFile(const TCHAR *To, const TCHAR *From) override
Definition NetworkPlatformFile.cpp:453
virtual NETWORKFILE_API bool SetReadOnly(const TCHAR *Filename, bool bNewReadOnlyValue) override
Definition NetworkPlatformFile.cpp:476
FServerTOC ServerFiles
Definition NetworkPlatformFile.h:275
NETWORKFILE_API FNetworkPlatformFile()
Definition NetworkPlatformFile.cpp:47
friend void ReadUnsolicitedFile(int32 InNumUnsolictedFiles, FNetworkPlatformFile &InNetworkFile, IPlatformFile &InInnerPlatformFile, FString &InServerEngineDir, FString &InServerProjectDir)
virtual NETWORKFILE_API bool CopyFile(const TCHAR *To, const TCHAR *From, EPlatformFileRead ReadFlags=EPlatformFileRead::None, EPlatformFileWrite WriteFlags=EPlatformFileWrite::None) override
Definition NetworkPlatformFile.cpp:733
virtual NETWORKFILE_API void ProcessServerInitialResponse(FArrayReader &InResponse, FPackageFileVersion &OutServerPackageVersion, int32 &OutServerPackageLicenseeVersion)
Definition NetworkPlatformFile.cpp:858
virtual bool FileExists(const TCHAR *Filename) override
Definition NetworkPlatformFile.h:102
virtual NETWORKFILE_API bool IterateDirectoryStat(const TCHAR *Directory, IPlatformFile::FDirectoryStatVisitor &Visitor) override
Definition NetworkPlatformFile.cpp:629
double TotalWriteTime
Definition NetworkPlatformFile.h:293
FString ServerEngineDir
Definition NetworkPlatformFile.h:263
int32 TotalFilesSynced
Definition NetworkPlatformFile.h:295
NETWORKFILE_API void MakeStandardNetworkFilename(FString &Filename)
Definition NetworkPlatformFile.cpp:1377
virtual NETWORKFILE_API void InitializeAfterSetActive() override
Definition NetworkPlatformFile.cpp:222
virtual NETWORKFILE_API IFileHandle * OpenWrite(const TCHAR *Filename, bool bAppend=false, bool bAllowRead=false) override
Definition NetworkPlatformFile.cpp:513
virtual NETWORKFILE_API bool SendPayloadAndReceiveResponse(TArray< uint8 > &In, TArray< uint8 > &Out)
Definition NetworkPlatformFile.cpp:145
virtual NETWORKFILE_API bool DeleteDirectoryRecursively(const TCHAR *Directory) override
Definition NetworkPlatformFile.cpp:725
virtual FDateTime GetAccessTimeStamp(const TCHAR *Filename) override
Definition NetworkPlatformFile.h:130
virtual NETWORKFILE_API bool CreateDirectory(const TCHAR *Directory) override
Definition NetworkPlatformFile.cpp:529
NETWORKFILE_API bool SendReadMessage(uint8 *Destination, int64 BytesToRead)
Definition NetworkPlatformFile.cpp:896
virtual NETWORKFILE_API bool IterateDirectoryStatRecursively(const TCHAR *Directory, IPlatformFile::FDirectoryStatVisitor &Visitor) override
Definition NetworkPlatformFile.cpp:678
FCriticalSection LocalDirectoriesCriticalSection
Definition NetworkPlatformFile.h:281
virtual NETWORKFILE_API FString ConvertToAbsolutePathForExternalAppForWrite(const TCHAR *Filename) override
Definition NetworkPlatformFile.cpp:763
virtual NETWORKFILE_API void OnFileUpdated(const FString &LocalFilename)
Definition NetworkPlatformFile.cpp:1486
virtual int64 FileSize(const TCHAR *Filename) override
Definition NetworkPlatformFile.h:108
virtual NETWORKFILE_API bool Exec_Runtime(class UWorld *InWorld, const TCHAR *Cmd, FOutputDevice &Ar) override
Definition NetworkPlatformFile.cpp:1557
virtual const TCHAR * GetName() const override
Definition NetworkPlatformFile.h:92
FCriticalSection SynchronizationObject
Definition NetworkPlatformFile.h:280
FString ServerEnginePlatformExtensionsDir
Definition NetworkPlatformFile.h:269
int32 UnsolicitedPackageWaits
Definition NetworkPlatformFile.h:299
virtual NETWORKFILE_API bool ReceiveResponse(TArray< uint8 > &Out)
Definition NetworkPlatformFile.cpp:206
virtual IPlatformFile * GetLowerLevel() override
Definition NetworkPlatformFile.h:73
static const TCHAR * GetTypeName()
Definition NetworkPlatformFile.h:58
TArray< FString > LocalDirectories
Definition NetworkPlatformFile.h:278
virtual void SetLowerLevel(IPlatformFile *NewLowerLevel) override
Definition NetworkPlatformFile.h:77
float HeartbeatFrequency
Definition NetworkPlatformFile.h:289
virtual NETWORKFILE_API bool ShouldBeUsed(IPlatformFile *Inner, const TCHAR *CmdLine) const override
Definition NetworkPlatformFile.cpp:68
virtual NETWORKFILE_API void Tick() override
Definition NetworkPlatformFile.cpp:1516
int32 TotalUnsolicitedPackages
Definition NetworkPlatformFile.h:296
virtual FDateTime GetTimeStamp(const TCHAR *Filename) override
Definition NetworkPlatformFile.h:123
int32 UnsolicitedPackagesHits
Definition NetworkPlatformFile.h:298
virtual NETWORKFILE_API bool IterateDirectory(const TCHAR *Directory, IPlatformFile::FDirectoryVisitor &Visitor) override
Definition NetworkPlatformFile.cpp:553
TSet< FString > CachedLocalFiles
Definition NetworkPlatformFile.h:260
virtual NETWORKFILE_API void FillGetFileList(FNetworkFileArchive &Payload)
Definition NetworkPlatformFile.cpp:813
IPlatformFile * InnerPlatformFile
Definition NetworkPlatformFile.h:257
virtual NETWORKFILE_API IFileHandle * OpenRead(const TCHAR *Filename, bool bAllowWrite=false) override
Definition NetworkPlatformFile.cpp:490
virtual bool IsReadOnly(const TCHAR *Filename) override
Definition NetworkPlatformFile.h:115
virtual NETWORKFILE_API bool DeleteFile(const TCHAR *Filename) override
Definition NetworkPlatformFile.cpp:440
FString ServerProjectPlatformExtensionsDir
Definition NetworkPlatformFile.h:272
virtual NETWORKFILE_API bool SendMessageToServer(const TCHAR *Message, IPlatformFile::IFileServerMessageHandler *Handler) override
Definition NetworkPlatformFile.cpp:910
virtual NETWORKFILE_API bool CreateDirectoryTree(const TCHAR *Directory) override
Definition NetworkPlatformFile.cpp:521
static NETWORKFILE_API void ConvertServerFilenameToClientFilename(FString &FilenameToConvert, const FString &InServerEngineDir, const FString &InServerProjectDir, const FString &InServerEnginePlatformExtensionsDir, const FString &InServerProjectPlatformExtensionsDir)
Definition NetworkPlatformFile.cpp:1496
virtual NETWORKFILE_API bool InitializeInternal(IPlatformFile *Inner, const TCHAR *HostIP)
Definition NetworkPlatformFile.cpp:98
bool bHasLoadedDDCDirectories
Definition NetworkPlatformFile.h:254
virtual NETWORKFILE_API void PerformHeartbeat()
Definition NetworkPlatformFile.cpp:1433
bool bIsUsable
Definition NetworkPlatformFile.h:282
virtual NETWORKFILE_API void ProcessServerCachedFilesResponse(FArrayReader &InReponse, const FPackageFileVersion &ServerPackageVersion, const int32 ServerPackageLicenseeVersion)
Definition NetworkPlatformFile.cpp:270
double TotalTimeSpentInUnsolicitedPackages
Definition NetworkPlatformFile.h:300
int32 FileServerPort
Definition NetworkPlatformFile.h:283
virtual NETWORKFILE_API FFileStatData GetStatData(const TCHAR *FilenameOrDirectory) override
Definition NetworkPlatformFile.cpp:545
virtual NETWORKFILE_API FString ConvertToAbsolutePathForExternalAppForRead(const TCHAR *Filename) override
Definition NetworkPlatformFile.cpp:751
int32 TotalFilesFoundLocally
Definition NetworkPlatformFile.h:297
virtual NETWORKFILE_API FString GetVersionInfo() const
Definition NetworkPlatformFile.cpp:891
virtual bool IsUsable()
Definition NetworkPlatformFile.h:97
double TotalWaitForAsyncUnsolicitedPackages
Definition NetworkPlatformFile.h:301
double TotalNetworkSyncTime
Definition NetworkPlatformFile.h:294
virtual NETWORKFILE_API bool DirectoryExists(const TCHAR *Directory) override
Definition NetworkPlatformFile.cpp:775
virtual NETWORKFILE_API ~FNetworkPlatformFile()
Definition NetworkPlatformFile.cpp:420
FString ServerProjectDir
Definition NetworkPlatformFile.h:266
friend class FAsyncFileSync
Definition NetworkPlatformFile.h:40
Definition OutputDevice.h:133
Definition ScopedEvent.h:19
Definition CoreMisc.h:28
Definition GenericPlatformFile.h:117
virtual CORE_API int64 Size()
Definition GenericPlatformFile.cpp:578
Definition GenericPlatformFile.h:623
Definition GenericPlatformFile.h:576
Definition GenericPlatformFile.h:925
Definition GenericPlatformFile.h:342
virtual CORE_API void GetTimeStampPair(const TCHAR *PathA, const TCHAR *PathB, FDateTime &OutTimeStampA, FDateTime &OutTimeStampB)
Definition GenericPlatformFile.cpp:592
Definition Array.h:670
Definition SharedPointer.h:692
Definition SpscQueue.h:18
Definition CookOnTheFly.h:140
Definition World.h:918
Definition AdvancedWidgetsModule.cpp:13
Definition DateTime.h:76
static FDateTime MinValue()
Definition DateTime.h:668
Definition NetworkMessage.h:268
Definition GenericPlatformFile.h:195
Definition ObjectVersion.h:762
Definition ServerTOC.h:15