UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StreamingNetworkPlatformFile.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"
7#include "CoreMinimal.h"
9#include "HAL/Platform.h"
10#include "Logging/LogMacros.h"
12#include "Misc/DateTime.h"
13#include "Misc/Paths.h"
14#include "NetworkMessage.h"
15#include "NetworkPlatformFile.h"
16
18
19
20#if 0
25{
26private:
27
29 IPlatformFile& FileInterface;
30
32 bool bCacheDirectories;
33
35 TArray<FString> DirectoriesToIgnore;
36
38 TArray<FString> DirectoriesToNotRecurse;
39
40public:
41
44
46 : FileInterface(InFileInterface)
47 , bCacheDirectories(bInCacheDirectories)
48 {
49 // make sure the paths are standardized, since the Visitor will assume they are standard
51 {
54 DirectoriesToIgnore.Add(DirToIgnore);
55 }
56
58 {
61 DirectoriesToNotRecurse.Add(DirToNotRecurse);
62 }
63 }
64
65 virtual bool Visit(const TCHAR* FilenameOrDirectory, bool bIsDirectory)
66 {
67 // make sure all paths are "standardized" so the other end can match up with it's own standardized paths
70
71 // cache files and optionally directories
72 if (!bIsDirectory)
73 {
74 FileTimes.Add(RelativeFilename, FileInterface.GetTimeStamp(FilenameOrDirectory));
75 }
76 else if (bCacheDirectories)
77 {
78 // we use a timestamp of 0 to indicate a directory
79 FileTimes.Add(RelativeFilename, 0);
80 }
81
82 // iterate over directories we care about
83 if (bIsDirectory)
84 {
85 bool bShouldRecurse = true;
86 // look in all the ignore directories looking for a match
87 for (int32 DirIndex = 0; DirIndex < DirectoriesToIgnore.Num() && bShouldRecurse; DirIndex++)
88 {
89 if (RelativeFilename.StartsWith(DirectoriesToIgnore[DirIndex]))
90 {
91 bShouldRecurse = false;
92 }
93 }
94
95 if (bShouldRecurse == true)
96 {
97 // If it is a directory that we should not recurse (ie we don't want to process subdirectories of it)
98 // handle that case as well...
99 for (int32 DirIndex = 0; DirIndex < DirectoriesToNotRecurse.Num() && bShouldRecurse; DirIndex++)
100 {
101 if (RelativeFilename.StartsWith(DirectoriesToNotRecurse[DirIndex]))
102 {
103 // Are we more than level deep in that directory?
104 FString CheckFilename = RelativeFilename.Right(RelativeFilename.Len() - DirectoriesToNotRecurse[DirIndex].Len());
105 if (CheckFilename.Len() > 1)
106 {
107 bShouldRecurse = false;
108 }
109 }
110 }
111 }
112
113 // recurse if we should
114 if (bShouldRecurse)
115 {
116 FileInterface.IterateDirectory(FilenameOrDirectory, *this);
117 }
118 }
119
120 return true;
121 }
122};
123#endif
124
125
130 : public FNetworkPlatformFile
131{
132 friend class FAsyncFileSync;
133
134 // FNetworkPlatformFile interface
135 STREAMINGFILE_API virtual bool InitializeInternal(IPlatformFile* Inner, const TCHAR* HostIP) override;
136
137public:
138
145
148
149public:
150
151 static const TCHAR* GetTypeName()
152 {
153 return TEXT("StreamingFile");
154 }
155
157 STREAMINGFILE_API class FStreamingNetworkFileHandle* SendOpenMessage(const FString& Filename, bool bIsWriting, bool bAppend, bool bAllowRead);
158
160 STREAMINGFILE_API bool SendReadMessage(uint64 HandleId, uint8* Destination, int64 BytesToRead);
161
162 STREAMINGFILE_API bool SendReadMessage(uint64 HandleId, uint8* Destination, int64 BytesToRead, int64 Offset);
163
165 STREAMINGFILE_API bool SendWriteMessage(uint64 HandleId, const uint8* Source, int64 BytesToWrite);
166
169
172
173public:
174
175 // need to override what FNetworkPlatformFile does here
176 void InitializeAfterSetActive() override { }
177
178 // IPlatformFile interface
179
180 STREAMINGFILE_API virtual bool ShouldBeUsed(IPlatformFile* Inner, const TCHAR* CmdLine) const override;
181
182 virtual IPlatformFile* GetLowerLevel() override
183 {
184 return nullptr;
185 }
187 {
188 check(false);
189 }
190
191 virtual const TCHAR* GetName() const override
192 {
194 }
195
196 STREAMINGFILE_API virtual bool DeleteFile(const TCHAR* Filename) override;
197 STREAMINGFILE_API virtual bool IsReadOnly(const TCHAR* Filename) override;
198 STREAMINGFILE_API virtual bool MoveFile(const TCHAR* To, const TCHAR* From) override;
199 STREAMINGFILE_API virtual bool SetReadOnly(const TCHAR* Filename, bool bNewReadOnlyValue) override;
200 STREAMINGFILE_API virtual FDateTime GetTimeStamp(const TCHAR* Filename) override;
201 STREAMINGFILE_API virtual void SetTimeStamp(const TCHAR* Filename, FDateTime DateTime) override;
202 STREAMINGFILE_API virtual FDateTime GetAccessTimeStamp(const TCHAR* Filename) override;
203 STREAMINGFILE_API virtual IFileHandle* OpenRead(const TCHAR* Filename, bool bAllowWrite = false) override;
204 STREAMINGFILE_API virtual IFileHandle* OpenWrite(const TCHAR* Filename, bool bAppend, bool bAllowRead) override;
205 STREAMINGFILE_API virtual bool DirectoryExists(const TCHAR* Directory) override;
206 STREAMINGFILE_API virtual bool CreateDirectoryTree(const TCHAR* Directory) override;
207 STREAMINGFILE_API virtual bool CreateDirectory(const TCHAR* Directory) override;
208 STREAMINGFILE_API virtual bool DeleteDirectory(const TCHAR* Directory) override;
209 STREAMINGFILE_API virtual bool IterateDirectory(const TCHAR* Directory, IPlatformFile::FDirectoryVisitor& Visitor) override;
210 STREAMINGFILE_API virtual bool IterateDirectoryRecursively(const TCHAR* Directory, IPlatformFile::FDirectoryVisitor& Visitor) override;
211 STREAMINGFILE_API virtual bool DeleteDirectoryRecursively(const TCHAR* Directory) override;
213 STREAMINGFILE_API virtual FString ConvertToAbsolutePathForExternalAppForRead( const TCHAR* Filename ) override;
214 STREAMINGFILE_API virtual FString ConvertToAbsolutePathForExternalAppForWrite( const TCHAR* Filename ) override;
215
216private:
217
218 // FNetworkPlatformFile interface
219
220 STREAMINGFILE_API virtual void PerformHeartbeat() override;
221 STREAMINGFILE_API virtual void GetFileInfo(const TCHAR* Filename, FFileInfo& Info) override;
222
223private:
224
226 TArray<FString> FilesToSyncAsync;
227};
#define check(expr)
Definition AssertionMacros.h:314
#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
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
EPlatformFileRead
Definition GenericPlatformFile.h:59
EPlatformFileWrite
Definition GenericPlatformFile.h:70
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
uint32 Offset
Definition VulkanMemory.cpp:4033
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition NetworkPlatformFile.h:39
EConnectionFlags ConnectionFlags
Definition NetworkPlatformFile.h:287
float HeartbeatFrequency
Definition NetworkPlatformFile.h:289
static CORE_API void MakeStandardFilename(FString &InPath)
Definition Paths.cpp:1512
Definition StreamingNetworkPlatformFile.cpp:42
Definition StreamingNetworkPlatformFile.h:131
virtual void SetLowerLevel(IPlatformFile *NewLowerLevel) override
Definition StreamingNetworkPlatformFile.h:186
virtual STREAMINGFILE_API void SetTimeStamp(const TCHAR *Filename, FDateTime DateTime) override
Definition StreamingNetworkPlatformFile.cpp:491
STREAMINGFILE_API bool SendSeekMessage(uint64 HandleId, int64 NewPosition)
Definition StreamingNetworkPlatformFile.cpp:919
virtual STREAMINGFILE_API bool DeleteDirectoryRecursively(const TCHAR *Directory) override
Definition StreamingNetworkPlatformFile.cpp:660
virtual STREAMINGFILE_API bool DeleteDirectory(const TCHAR *Directory) override
Definition StreamingNetworkPlatformFile.cpp:573
virtual STREAMINGFILE_API FDateTime GetAccessTimeStamp(const TCHAR *Filename) override
Definition StreamingNetworkPlatformFile.cpp:514
virtual STREAMINGFILE_API ~FStreamingNetworkPlatformFile()
Definition StreamingNetworkPlatformFile.cpp:392
virtual STREAMINGFILE_API FString ConvertToAbsolutePathForExternalAppForWrite(const TCHAR *Filename) override
Definition StreamingNetworkPlatformFile.cpp:730
FStreamingNetworkPlatformFile()
Definition StreamingNetworkPlatformFile.h:140
void InitializeAfterSetActive() override
Definition StreamingNetworkPlatformFile.h:176
virtual STREAMINGFILE_API IFileHandle * OpenRead(const TCHAR *Filename, bool bAllowWrite=false) override
Definition StreamingNetworkPlatformFile.cpp:523
virtual IPlatformFile * GetLowerLevel() override
Definition StreamingNetworkPlatformFile.h:182
STREAMINGFILE_API class FStreamingNetworkFileHandle * SendOpenMessage(const FString &Filename, bool bIsWriting, bool bAppend, bool bAllowRead)
Definition StreamingNetworkPlatformFile.cpp:788
virtual STREAMINGFILE_API bool CreateDirectoryTree(const TCHAR *Directory) override
Definition StreamingNetworkPlatformFile.cpp:543
virtual STREAMINGFILE_API bool CreateDirectory(const TCHAR *Directory) override
Definition StreamingNetworkPlatformFile.cpp:549
STREAMINGFILE_API bool SendReadMessage(uint64 HandleId, uint8 *Destination, int64 BytesToRead)
Definition StreamingNetworkPlatformFile.cpp:832
virtual STREAMINGFILE_API bool CopyFile(const TCHAR *To, const TCHAR *From, EPlatformFileRead ReadFlags=EPlatformFileRead::None, EPlatformFileWrite WriteFlags=EPlatformFileWrite::None) override
Definition StreamingNetworkPlatformFile.cpp:684
STREAMINGFILE_API bool SendCloseMessage(uint64 HandleId)
Definition StreamingNetworkPlatformFile.cpp:942
virtual STREAMINGFILE_API bool MoveFile(const TCHAR *To, const TCHAR *From) override
Definition StreamingNetworkPlatformFile.cpp:429
virtual STREAMINGFILE_API bool SetReadOnly(const TCHAR *Filename, bool bNewReadOnlyValue) override
Definition StreamingNetworkPlatformFile.cpp:456
virtual STREAMINGFILE_API IFileHandle * OpenWrite(const TCHAR *Filename, bool bAppend, bool bAllowRead) override
Definition StreamingNetworkPlatformFile.cpp:534
virtual STREAMINGFILE_API FDateTime GetTimeStamp(const TCHAR *Filename) override
Definition StreamingNetworkPlatformFile.cpp:482
virtual STREAMINGFILE_API bool IsReadOnly(const TCHAR *Filename) override
Definition StreamingNetworkPlatformFile.cpp:420
virtual STREAMINGFILE_API bool DirectoryExists(const TCHAR *Directory) override
Definition StreamingNetworkPlatformFile.cpp:751
virtual STREAMINGFILE_API bool IterateDirectory(const TCHAR *Directory, IPlatformFile::FDirectoryVisitor &Visitor) override
Definition StreamingNetworkPlatformFile.cpp:597
virtual const TCHAR * GetName() const override
Definition StreamingNetworkPlatformFile.h:191
virtual STREAMINGFILE_API bool IterateDirectoryRecursively(const TCHAR *Directory, IPlatformFile::FDirectoryVisitor &Visitor) override
Definition StreamingNetworkPlatformFile.cpp:630
static const TCHAR * GetTypeName()
Definition StreamingNetworkPlatformFile.h:151
STREAMINGFILE_API bool SendWriteMessage(uint64 HandleId, const uint8 *Source, int64 BytesToWrite)
Definition StreamingNetworkPlatformFile.cpp:893
virtual STREAMINGFILE_API bool DeleteFile(const TCHAR *Filename) override
Definition StreamingNetworkPlatformFile.cpp:397
virtual STREAMINGFILE_API bool ShouldBeUsed(IPlatformFile *Inner, const TCHAR *CmdLine) const override
Definition StreamingNetworkPlatformFile.cpp:306
friend class FAsyncFileSync
Definition StreamingNetworkPlatformFile.h:132
virtual STREAMINGFILE_API FString ConvertToAbsolutePathForExternalAppForRead(const TCHAR *Filename) override
Definition StreamingNetworkPlatformFile.cpp:709
Definition GenericPlatformFile.h:117
Definition GenericPlatformFile.h:576
virtual bool Visit(const TCHAR *FilenameOrDirectory, bool bIsDirectory)=0
Definition GenericPlatformFile.h:342
virtual bool IterateDirectory(const TCHAR *Directory, FDirectoryVisitor &Visitor)=0
virtual FDateTime GetTimeStamp(const TCHAR *Filename)=0
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition UnrealString.h.inl:34
Definition DateTime.h:76
Definition NetworkMessage.h:268