Files
UnrealEngine/Engine/Source/Runtime/Online/BuildPatchServices/Private/Installer/BuildInstallStreamer.h
2025-05-18 13:04:45 +08:00

116 lines
4.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Async/Async.h"
#include "BuildPatchManifest.h"
#include "BuildPatchProgress.h"
#include "Containers/Queue.h"
#include "Containers/Set.h"
#include "Containers/UnrealString.h"
#include "HAL/Event.h"
#include "HAL/ThreadSafeBool.h"
#include "Interfaces/IBuildInstallStreamer.h"
#include "Interfaces/IBuildPatchServicesModule.h"
#include "Templates/UniquePtr.h"
#include "Templates/Tuple.h"
namespace BuildPatchServices
{
class IBuildManifestSet;
class IHttpManager;
class IFileSystem;
class IChunkDataSerialization;
class IPlatform;
class IInstallerError;
class IInstallerAnalytics;
class IFileOperationTracker;
class ISpeedRecorder;
class IChunkDataSizeProvider;
class IDownloadServiceStatistics;
class IMemoryChunkStoreStatistics;
class ICloudChunkSourceStatistics;
class IFileConstructorStatistics;
class IDownloadConnectionCount;
class IDownloadService;
class IMessagePump;
class FBuildInstallStreamer
: public IBuildInstallStreamer
, public TSharedFromThis<FBuildInstallStreamer, ESPMode::ThreadSafe>
{
public:
FBuildInstallStreamer(FBuildInstallStreamerConfiguration Configuration);
~FBuildInstallStreamer();
public:
// IBuildInstallStreamer interface begin.
virtual void QueueFilesByTag(TSet<FString> Tags, FBuildPatchStreamCompleteDelegate OnComplete) override;
virtual void QueueFilesByName(TSet<FString> Files, FBuildPatchStreamCompleteDelegate OnComplete) override;
virtual void RegisterMessageHandler(FMessageHandler* MessageHandler) override;
virtual void UnregisterMessageHandler(FMessageHandler* MessageHandler) override;
virtual const FBuildInstallStreamerConfiguration& GetConfiguration() const override;
virtual const FBuildInstallStreamerStats& GetInstallStreamerStatistics() const override;
virtual const FBuildInstallStreamerStats& GetInstallStreamerSessionStatistics() const override;
virtual void ResetSessionStatistics() override;
// IBuildInstallStreamer interface end.
bool Tick();
void CancelAllRequests();
void PreExit();
private:
void Initialise();
void RequestWorkerThread();
void CloudWorkerThread();
void CallOnDelegateThread(const TFunction<void()>& Callback);
private:
const FBuildInstallStreamerConfiguration Configuration;
FBuildPatchAppManifestPtr BuildPatchManifest;
FBuildPatchProgress BuildProgress;
TUniquePtr<IBuildManifestSet> ManifestSet;
TUniquePtr<IHttpManager> HttpManager;
TUniquePtr<IFileSystem> FileSystem;
TUniquePtr<IChunkDataSerialization> ChunkDataSerialization;
TUniquePtr<IPlatform> Platform;
TUniquePtr<IInstallerAnalytics> InstallerAnalytics;
TUniquePtr<IInstallerError> InstallerError;
TUniquePtr<IFileOperationTracker> FileOperationTracker;
TUniquePtr<ISpeedRecorder> DownloadSpeedRecorder;
TUniquePtr<ISpeedRecorder> FileReadSpeedRecorder;
TUniquePtr<ISpeedRecorder> FileWriteSpeedRecorder;
TUniquePtr<IChunkDataSizeProvider> ChunkDataSizeProvider;
TUniquePtr<IDownloadServiceStatistics> DownloadServiceStatistics;
TUniquePtr<IMemoryChunkStoreStatistics> MemoryChunkStoreStatistics;
TUniquePtr<ICloudChunkSourceStatistics> CloudChunkSourceStatistics;
TUniquePtr<IFileConstructorStatistics> FileConstructorStatistics;
TUniquePtr<IDownloadConnectionCount> DownloadConnectionCount;
TUniquePtr<IDownloadService> DownloadService;
TUniquePtr<IMessagePump> MessagePump;
FThreadSafeBool bIsShuttingDown;
TFuture<void> RequestWorker;
TFuture<void> CloudWorker;
typedef TTuple<TSet<FString>, bool, FBuildPatchStreamCompleteDelegate> FStreamRequest;
TQueue<FStreamRequest, EQueueMode::Spsc> RequestQueue;
TQueue<TFunction<void()>, EQueueMode::Spsc> CloudQueue;
TQueue<TFunction<void()>, EQueueMode::Spsc> TickQueue;
FEvent* RequestTrigger;
FEvent* CloudTrigger;
FBuildInstallStreamerStats StreamerStats;
FBuildInstallStreamerStats PerSessionStreamerStats;
};
/**
* A factory for creating an IBuildInstallStreamer instance.
*/
class FBuildInstallStreamerFactory
{
public:
static FBuildInstallStreamer* Create(FBuildInstallStreamerConfiguration Configuration);
};
}
typedef TSharedPtr< BuildPatchServices::FBuildInstallStreamer, ESPMode::ThreadSafe > FBuildInstallStreamerPtr;
typedef TSharedRef< BuildPatchServices::FBuildInstallStreamer, ESPMode::ThreadSafe > FBuildInstallStreamerRef;
typedef TWeakPtr< BuildPatchServices::FBuildInstallStreamer, ESPMode::ThreadSafe > FBuildInstallStreamerWeakPtr;