You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
Any function that may create a request now has a IRequestOwner& parameter, and uses the Begin and End functions on the owner to manage the lifetime of any requests that it creates, as well as using End to invoke the completion callback for any request which has one. The new FRequestBarrier may be used to block a group from being considered complete in a scope where more requests may be added to it. #rb Matt.Peters #rnx #preflight 6109b5c403d303000144cce5 #preflight 610acf7103d30300016fda94 #ROBOMERGE-SOURCE: CL 17060470 in //UE5/Main/... #ROBOMERGE-BOT: STARSHIP (Main -> Release-Engine-Test) (v850-17047176) [CL 17060649 by devin doucette in ue5-release-engine-test branch]
132 lines
3.9 KiB
C++
132 lines
3.9 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "CoreMinimal.h"
|
|
#include "DerivedDataBackendInterface.h"
|
|
#include "DerivedDataCacheUsageStats.h"
|
|
|
|
// Macro for whether to enable the S3 backend. libcurl is not currently available on Mac.
|
|
#if !defined(WITH_HTTP_DDC_BACKEND)
|
|
#define WITH_HTTP_DDC_BACKEND 0
|
|
#endif
|
|
|
|
#if WITH_HTTP_DDC_BACKEND
|
|
|
|
namespace UE::DerivedData::Backends
|
|
{
|
|
|
|
typedef TSharedPtr<class IHttpRequest> FHttpRequestPtr;
|
|
typedef TSharedPtr<class IHttpResponse, ESPMode::ThreadSafe> FHttpResponsePtr;
|
|
|
|
|
|
/**
|
|
* Backend for a HTTP based caching service (Jupiter).
|
|
**/
|
|
class FHttpDerivedDataBackend : public FDerivedDataBackendInterface
|
|
{
|
|
public:
|
|
|
|
/**
|
|
* Creates the backend, checks health status and attempts to acquire an access token.
|
|
*
|
|
* @param ServiceUrl Base url to the service including schema.
|
|
* @param Namespace Namespace to use.
|
|
* @param OAuthProvider Url to OAuth provider, for example "https://myprovider.com/oauth2/v1/token".
|
|
* @param OAuthClientId OAuth client identifier.
|
|
* @param OAuthData OAuth form data to send to login service. Can either be the raw form data or a Windows network file address (starting with "\\").
|
|
*/
|
|
FHttpDerivedDataBackend(ICacheFactory& Factory, const TCHAR* ServiceUrl,
|
|
const TCHAR* Namespace,
|
|
const TCHAR* OAuthProvider,
|
|
const TCHAR* OAuthClientId,
|
|
const TCHAR* OAuthData,
|
|
bool bReadOnly);
|
|
|
|
~FHttpDerivedDataBackend();
|
|
|
|
/**
|
|
* Checks is backend is usable (reachable and accessible).
|
|
* @return true if usable
|
|
*/
|
|
bool IsUsable() const { return bIsUsable; }
|
|
|
|
/** return true if this cache is writable **/
|
|
virtual bool IsWritable() const override
|
|
{
|
|
return !bReadOnly && bIsUsable;
|
|
}
|
|
|
|
virtual bool CachedDataProbablyExists(const TCHAR* CacheKey) override;
|
|
virtual TBitArray<> CachedDataProbablyExistsBatch(TConstArrayView<FString> CacheKeys) override;
|
|
virtual bool GetCachedData(const TCHAR* CacheKey, TArray<uint8>& OutData) override;
|
|
virtual EPutStatus PutCachedData(const TCHAR* CacheKey, TArrayView<const uint8> InData, bool bPutEvenIfExists) override;
|
|
virtual void RemoveCachedData(const TCHAR* CacheKey, bool bTransient) override;
|
|
virtual TSharedRef<FDerivedDataCacheStatsNode> GatherUsageStats() const override;
|
|
|
|
virtual FString GetName() const override;
|
|
virtual bool TryToPrefetch(TConstArrayView<FString> CacheKeys) override;
|
|
virtual bool WouldCache(const TCHAR* CacheKey, TArrayView<const uint8> InData) override;
|
|
virtual ESpeedClass GetSpeedClass() const override;
|
|
virtual bool ApplyDebugOptions(FBackendDebugOptions& InOptions) override;
|
|
|
|
void SetSpeedClass(ESpeedClass InSpeedClass) { SpeedClass = InSpeedClass; }
|
|
|
|
virtual void Put(
|
|
TConstArrayView<FCacheRecord> Records,
|
|
FStringView Context,
|
|
ECachePolicy Policy,
|
|
IRequestOwner& Owner,
|
|
FOnCachePutComplete&& OnComplete) override;
|
|
|
|
virtual void Get(
|
|
TConstArrayView<FCacheKey> Keys,
|
|
FStringView Context,
|
|
ECachePolicy Policy,
|
|
IRequestOwner& Owner,
|
|
FOnCacheGetComplete&& OnComplete) override;
|
|
|
|
virtual void GetPayload(
|
|
TConstArrayView<FCachePayloadKey> Keys,
|
|
FStringView Context,
|
|
ECachePolicy Policy,
|
|
IRequestOwner& Owner,
|
|
FOnCacheGetPayloadComplete&& OnComplete) override;
|
|
|
|
virtual void CancelAll() override
|
|
{
|
|
}
|
|
|
|
static FHttpDerivedDataBackend* GetAny()
|
|
{
|
|
return AnyInstance;
|
|
}
|
|
|
|
private:
|
|
ICacheFactory& Factory;
|
|
FString Domain;
|
|
FString Namespace;
|
|
FString DefaultBucket;
|
|
FString OAuthProvider;
|
|
FString OAuthClientId;
|
|
FString OAuthSecret;
|
|
FCriticalSection AccessCs;
|
|
FDerivedDataCacheUsageStats UsageStats;
|
|
TUniquePtr<struct FRequestPool> GetRequestPools[2];
|
|
TUniquePtr<struct FRequestPool> PutRequestPools[2];
|
|
TUniquePtr<struct FHttpAccessToken> Access;
|
|
bool bIsUsable;
|
|
bool bReadOnly;
|
|
uint32 FailedLoginAttempts;
|
|
ESpeedClass SpeedClass;
|
|
static inline FHttpDerivedDataBackend* AnyInstance = nullptr;
|
|
|
|
bool IsServiceReady();
|
|
bool AcquireAccessToken();
|
|
bool ShouldRetryOnError(int64 ResponseCode);
|
|
};
|
|
|
|
} // UE::DerivedData::Backends
|
|
|
|
#endif //WITH_HTTP_DDC_BACKEND
|