UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StorageServerPlatformFile.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
9#include "IO/IoDispatcher.h"
11
12#if !UE_BUILD_SHIPPING
13
16class IPackageStore;
17
18#if WITH_COTF
19namespace UE::Cook
20{
21 class FCookOnTheFlyMessage;
22 class ICookOnTheFlyServerConnection;
23}
24#endif
25
26#define STORAGE_SERVER_FILE_UNKOWN_SIZE (-1)
27
29{
30public:
32 void AddFile(const FIoChunkId& FileChunkId, FStringView Path, int64 RawSize);
33 void Clear();
34 bool FileExists(const FString& Path);
35 bool DirectoryExists(const FString& Path);
36 const FIoChunkId* GetFileChunkId(const FString& Path);
37 int64 GetFileSize(const FString& Path);
38 bool GetFileData(const FString& Path, FIoChunkId& OutChunkId, int64& OutRawSize);
39 bool IterateDirectory(const FString& Path, TFunctionRef<bool(const FIoChunkId&, const TCHAR*, int64)> Callback);
40 bool IterateDirectoryRecursively(const FString& Path, TFunctionRef<bool(const FIoChunkId&, const TCHAR*, int64)> Callback);
41
42private:
43 struct FDirectory
44 {
45 TArray<FString> Directories;
46 TArray<int32> Files;
47 };
48
49 struct FFile
50 {
51 FIoChunkId FileChunkId;
52 FString FilePath;
53 int64 RawSize;
54 };
55
56 FDirectory* AddDirectoriesRecursive(const FString& DirectoryPath);
57
58 FDirectory Root;
60 TMap<FString, int32> FilePathToIndexMap;
61 TArray<FFile> Files;
62 FRWLock TocLock;
63};
64
67{
68public:
71 virtual bool ShouldBeUsed(IPlatformFile* Inner, const TCHAR* CmdLine) const override;
72 virtual bool Initialize(IPlatformFile* Inner, const TCHAR* CmdLine) override;
73 virtual void InitializeAfterProjectFilePath() override;
74
75 virtual IPlatformFile* GetLowerLevel() override
76 {
77 return LowerLevel;
78 }
79
81 {
82 LowerLevel = NewLowerLevel;
83 }
84
85 virtual const TCHAR* GetName() const override
86 {
87 return TEXT("StorageServer");
88 }
89
90 virtual bool FileExists(const TCHAR* Filename) override;
91 virtual int64 FileSize(const TCHAR* Filename) override;
92 virtual bool IsReadOnly(const TCHAR* Filename) override;
93 virtual FDateTime GetTimeStamp(const TCHAR* Filename) override;
94 virtual FDateTime GetAccessTimeStamp(const TCHAR* Filename) override;
95 virtual IFileHandle* OpenRead(const TCHAR* Filename, bool bAllowWrite = false) override;
96 virtual bool DirectoryExists(const TCHAR* Directory) override;
97 virtual FFileStatData GetStatData(const TCHAR* FilenameOrDirectory) override;
98 virtual bool IterateDirectory(const TCHAR* Directory, FDirectoryVisitor& Visitor) override;
99 virtual bool IterateDirectoryRecursively(const TCHAR* Directory, FDirectoryVisitor& Visitor) override;
100 virtual bool IterateDirectoryStat(const TCHAR* Directory, FDirectoryStatVisitor& Visitor) override;
101 virtual FOpenMappedResult OpenMappedEx(const TCHAR* Filename, EOpenReadFlags OpenOptions = EOpenReadFlags::None, int64 MaximumSize = 0) override;
102 virtual FString GetFilenameOnDisk(const TCHAR* Filename) override;
103 virtual bool DeleteFile(const TCHAR* Filename) override;
104 virtual bool MoveFile(const TCHAR* To, const TCHAR* From) override;
105 virtual bool SetReadOnly(const TCHAR* Filename, bool bNewReadOnlyValue) override;
106 virtual void SetTimeStamp(const TCHAR* Filename, FDateTime DateTime) override;
107 virtual IFileHandle* OpenWrite(const TCHAR* Filename, bool bAppend = false, bool bAllowRead = false) override;
108 virtual bool CreateDirectory(const TCHAR* Directory) override;
109 virtual bool DeleteDirectory(const TCHAR* Directory) override;
110 virtual FString ConvertToAbsolutePathForExternalAppForRead(const TCHAR* Filename) override;
111 virtual FString ConvertToAbsolutePathForExternalAppForWrite(const TCHAR* Filename) override;
112 virtual bool SendMessageToServer(const TCHAR* Message, IPlatformFile::IFileServerMessageHandler* Handler) override;
113
114 FStringView GetHostAddr() const override;
115 void GetAndResetConnectionStats(FConnectionStats& OutStats) override;
116
118 {
119 bAllowPackageIo = bInAllowPackageIo;
120 }
122 {
123 bAbortOnConnectionFailure = bInAbortOnConnectionFailure;
124 }
126 {
127 CustomProjectStorePath = InProjectStorePath;
128 }
129 void UpdateFileList() override;
130private:
132 template<typename ParentVisitorClass, typename DataType> friend class FUniqueDirectoryStatVisitor;
133
134
135 void InitializeConnection();
136 bool IsNonServerFilenameAllowed(FStringView InFilename);
137 bool IsAssumedImmutableTimeStampFilename(FStringView InFilename) const;
138 bool IsEngineStartupPrecachableFilename(FStringView InFilename) const;
139 bool MakeStorageServerPath(const TCHAR* LocalFilenameOrDirectory, FStringBuilderBase& OutPath) const;
140 bool MakeLocalPath(const TCHAR* ServerFilenameOrDirectory, FStringBuilderBase& OutPath) const;
141 IFileHandle* InternalOpenFile(const FIoChunkId& FileChunkId, int64 RawSize, const TCHAR* LocalFilename);
142 bool SendGetFileListMessage();
143 FFileStatData SendGetStatDataMessage(const FIoChunkId& FileChunkId);
144 int64 SendReadMessage(uint8* Destination, const FIoChunkId& FileChunkId, int64 Offset, int64 BytesToRead);
145#if WITH_COTF
146 void OnCookOnTheFlyMessage(const UE::Cook::FCookOnTheFlyMessage& Message);
147#endif
148 TUniquePtr<FArchive> TryFindProjectStoreMarkerFile(IPlatformFile* Inner) const;
149 FAnsiString MakeBaseURI();
150
151 FString CustomProjectStorePath;
152 TSet<FName> ExcludedNonServerExtensions;
153 TSet<FName> AssumedImmutableTimeStampExtensions;
154 TSet<FName> EngineStartupPrecacheExtensions;
155 IPlatformFile* LowerLevel = nullptr;
156 FStringView ServerEngineDirView = FStringView(TEXT("/{engine}/"));
157 FStringView ServerProjectDirView = FStringView(TEXT("/{project}/"));
159#if WITH_COTF
160 TSharedPtr<UE::Cook::ICookOnTheFlyServerConnection> CookOnTheFlyServerConnection;
161#endif
163 FString ServerProject;
164 FString ServerPlatform;
165 FString BaseURI;
166 FString AbsProjectDir;
167 FString AbsEngineDir;
168 FString WorkspaceSharePath;
169 TDirectoryTree<FString> RemapDirectoriesTree;
170 mutable TArray<FString> HostAddrs;
171 mutable uint16 HostPort = 8558;
172 bool bAllowPackageIo = true;
173 bool bAbortOnConnectionFailure = true;
174};
175
176#endif
#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
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
TStringView< TCHAR > FStringView
Definition StringFwd.h:45
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
Definition IoChunkId.h:64
Definition StorageServerConnection.h:47
Definition StorageServerPlatformFile.cpp:742
Definition StorageServerPlatformFile.h:29
~FStorageServerFileSystemTOC()
Definition StorageServerPlatformFile.cpp:94
bool GetFileData(const FString &Path, FIoChunkId &OutChunkId, int64 &OutRawSize)
Definition StorageServerPlatformFile.cpp:194
int64 GetFileSize(const FString &Path)
Definition StorageServerPlatformFile.cpp:184
const FIoChunkId * GetFileChunkId(const FString &Path)
Definition StorageServerPlatformFile.cpp:174
bool IterateDirectoryRecursively(const FString &Path, TFunctionRef< bool(const FIoChunkId &, const TCHAR *, int64)> Callback)
Definition StorageServerPlatformFile.cpp:236
bool FileExists(const FString &Path)
Definition StorageServerPlatformFile.cpp:162
bool DirectoryExists(const FString &Path)
Definition StorageServerPlatformFile.cpp:168
void AddFile(const FIoChunkId &FileChunkId, FStringView Path, int64 RawSize)
Definition StorageServerPlatformFile.cpp:140
void Clear()
Definition StorageServerPlatformFile.cpp:125
bool IterateDirectory(const FString &Path, TFunctionRef< bool(const FIoChunkId &, const TCHAR *, int64)> Callback)
Definition StorageServerPlatformFile.cpp:207
Definition StorageServerPlatformFile.h:67
virtual bool IsReadOnly(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1495
virtual bool IterateDirectory(const TCHAR *Directory, FDirectoryVisitor &Visitor) override
Definition StorageServerPlatformFile.cpp:1662
virtual bool MoveFile(const TCHAR *To, const TCHAR *From) override
Definition StorageServerPlatformFile.cpp:1799
virtual void SetTimeStamp(const TCHAR *Filename, FDateTime DateTime) override
Definition StorageServerPlatformFile.cpp:1867
void UpdateFileList() override
Definition StorageServerPlatformFile.cpp:1429
FStorageServerPlatformFile()
Definition StorageServerPlatformFile.cpp:900
FStringView GetHostAddr() const override
Definition StorageServerPlatformFile.cpp:2173
virtual FString GetFilenameOnDisk(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1772
virtual bool ShouldBeUsed(IPlatformFile *Inner, const TCHAR *CmdLine) const override
Definition StorageServerPlatformFile.cpp:1120
void SetAbortOnConnectionFailure(bool bInAbortOnConnectionFailure)
Definition StorageServerPlatformFile.h:121
virtual FString ConvertToAbsolutePathForExternalAppForWrite(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1965
virtual bool SendMessageToServer(const TCHAR *Message, IPlatformFile::IFileServerMessageHandler *Handler) override
Definition StorageServerPlatformFile.cpp:2145
void SetAllowPackageIo(bool bInAllowPackageIo)
Definition StorageServerPlatformFile.h:117
virtual bool DeleteDirectory(const TCHAR *Directory) override
Definition StorageServerPlatformFile.cpp:1904
void GetAndResetConnectionStats(FConnectionStats &OutStats) override
Definition StorageServerPlatformFile.cpp:2178
virtual FString ConvertToAbsolutePathForExternalAppForRead(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1914
virtual bool SetReadOnly(const TCHAR *Filename, bool bNewReadOnlyValue) override
Definition StorageServerPlatformFile.cpp:1857
virtual ~FStorageServerPlatformFile()
Definition StorageServerPlatformFile.cpp:909
virtual FOpenMappedResult OpenMappedEx(const TCHAR *Filename, EOpenReadFlags OpenOptions=EOpenReadFlags::None, int64 MaximumSize=0) override
Definition StorageServerPlatformFile.cpp:1753
virtual FFileStatData GetStatData(const TCHAR *FilenameOrDirectory) override
Definition StorageServerPlatformFile.cpp:1505
virtual bool DeleteFile(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1783
virtual IFileHandle * OpenRead(const TCHAR *Filename, bool bAllowWrite=false) override
Definition StorageServerPlatformFile.cpp:1548
virtual FDateTime GetTimeStamp(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1455
virtual FDateTime GetAccessTimeStamp(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1468
virtual bool DirectoryExists(const TCHAR *Directory) override
Definition StorageServerPlatformFile.cpp:1762
virtual const TCHAR * GetName() const override
Definition StorageServerPlatformFile.h:85
virtual IPlatformFile * GetLowerLevel() override
Definition StorageServerPlatformFile.h:75
void SetCustomProjectStorePath(FStringView InProjectStorePath)
Definition StorageServerPlatformFile.h:125
virtual void InitializeAfterProjectFilePath() override
Definition StorageServerPlatformFile.cpp:1336
virtual bool IterateDirectoryStat(const TCHAR *Directory, FDirectoryStatVisitor &Visitor) override
Definition StorageServerPlatformFile.cpp:1709
virtual void SetLowerLevel(IPlatformFile *NewLowerLevel) override
Definition StorageServerPlatformFile.h:80
virtual bool IterateDirectoryRecursively(const TCHAR *Directory, FDirectoryVisitor &Visitor) override
Definition StorageServerPlatformFile.cpp:1685
virtual bool CreateDirectory(const TCHAR *Directory) override
Definition StorageServerPlatformFile.cpp:1894
virtual IFileHandle * OpenWrite(const TCHAR *Filename, bool bAppend=false, bool bAllowRead=false) override
Definition StorageServerPlatformFile.cpp:1880
virtual bool FileExists(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1444
virtual int64 FileSize(const TCHAR *Filename) override
Definition StorageServerPlatformFile.cpp:1481
Definition StorageServerPlatformFile.cpp:1581
Definition GenericPlatformFile.h:117
Definition GenericPlatformFile.h:925
Definition GenericPlatformFile.h:342
EOpenReadFlags
Definition GenericPlatformFile.h:496
Definition IStorageServerPlatformFile.h:9
Definition Array.h:670
Definition DirectoryTree.h:85
Definition AssetRegistryState.h:50
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition UniquePtr.h:107
Definition ValueOrError.h:58
Definition CookOnTheFly.h:140
Definition CriticalSection.h:14
Definition CookOnTheFly.h:19
Definition DateTime.h:76
Definition GenericPlatformFile.h:195