Files
UnrealEngineUWP/Engine/Source/Developer/IoStoreUtilities/Internal/ZenStoreHttpClient.h
dan engelbrecht 2f8823f7dc Pass along path to project file when zen server is running locally so we can detect when it is removed and garbage-collect any projectstore entries on the zen side.
Allow Cook to remote Zen, if we detect that we are targetting a zenservice on a different machine we change the local file references to attachment based references.
#rb stefan.boberg
#preflight 63491c31ad0f7e2f20230b39

[CL 22525021 by dan engelbrecht in ue5-main branch]
2022-10-14 08:17:43 -04:00

87 lines
2.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Async/Future.h"
#include "Containers/Array.h"
#include "Containers/StringView.h"
#include "HAL/CriticalSection.h"
#include "HAL/Platform.h"
#include "IO/IoDispatcher.h"
#include "Misc/StringBuilder.h"
#include "Serialization/CompactBinaryPackage.h"
#include "Templates/UniquePtr.h"
#include "ZenServerInterface.h"
class FCbPackage;
class FCbObject;
namespace UE {
namespace Zen {
struct FZenHttpRequestPool;
}
/**
* HTTP protocol implementation of Zen Store client interface
*/
class IOSTOREUTILITIES_API FZenStoreHttpClient
{
public:
FZenStoreHttpClient();
FZenStoreHttpClient(FStringView HostName, uint16 Port);
FZenStoreHttpClient(UE::Zen::FServiceSettings&& InSettings);
~FZenStoreHttpClient();
bool TryCreateProject(FStringView InProjectId, FStringView InOplogId, FStringView ServerRoot,
FStringView EngineRoot, FStringView ProjectRoot,
FStringView ProjectFilePath);
bool TryCreateOplog(FStringView InProjectId, FStringView InOplogId, bool bFullBuild);
void InitializeReadOnly(FStringView InProjectId, FStringView InOplogId);
bool IsConnected() const;
void StartBuildPass();
TIoStatusOr<uint64> EndBuildPass(FCbPackage OpEntry);
TIoStatusOr<uint64> AppendOp(FCbPackage OpEntry);
TIoStatusOr<uint64> GetChunkSize(const FIoChunkId& Id);
TIoStatusOr<FIoBuffer> ReadChunk(const FIoChunkId& Id, uint64 Offset = 0, uint64 Size = ~0ull);
TIoStatusOr<FIoBuffer> ReadOpLogAttachment(FStringView Id);
#if UE_WITH_ZEN
const TCHAR* GetHostName() const { return ZenService.GetInstance().GetHostName(); }
uint16 GetPort() const { return ZenService.GetInstance().GetPort(); }
const UE::Zen::FZenServiceInstance& GetZenServiceInstance() const { return ZenService.GetInstance(); }
#else // Default to localhost:1337 for platforms where Zen wouldn't be supported yet
const TCHAR* GetHostName() const { return TEXT("localhost"); }
uint16 GetPort() const { return 1337; }
#endif
TFuture<TIoStatusOr<FCbObject>> GetOplog();
TFuture<TIoStatusOr<FCbObject>> GetFiles();
static const UTF8CHAR* FindOrAddAttachmentId(FUtf8StringView AttachmentText);
static const UTF8CHAR* FindAttachmentId(FUtf8StringView AttachmentText);
private:
TIoStatusOr<FIoBuffer> ReadOpLogUri(FStringBuilderBase& ChunkUri, uint64 Offset = 0, uint64 Size = ~0ull);
static const uint32 PoolEntryCount;
#if UE_WITH_ZEN
UE::Zen::FScopeZenService ZenService;
#endif
TUniquePtr<Zen::FZenHttpRequestPool> RequestPool;
FString OplogPath;
FString OplogNewEntryPath;
FString OplogPrepNewEntryPath;
FString TempDirPath;
uint64 StandaloneThresholdBytes = 1 * 1024 * 1024;
bool bAllowRead = false;
bool bAllowEdit = false;
bool bConnectionSucceeded = false;
};
}