// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Containers/UnrealString.h" #include "CookOnTheSide/CookOnTheFlyServer.h" #include "CookRequests.h" #include "CookTypes.h" class FConfigFile; namespace UE { namespace Cook { struct FPackageData; struct FGenerationHelper; struct FTickStackData; /** * Interface for Requests sent to this processes' Cooker, and for information it needs to send back to its Director. * In SingleProcess cooks the functions are passed through to the local CookOnTheFlyServer. * In MultiProcess cooks the functions are implemented as interprocess messages to/from the CookDirector. **/ class IWorkerRequests { public: virtual ECookMode::Type GetDirectorCookMode() = 0; IWorkerRequests(UCookOnTheFlyServer& InCOTFS): COTFS(InCOTFS) {}; virtual ~IWorkerRequests() {}; virtual void OnRemoveSessionPlatform(const ITargetPlatform* TargetPlatform) = 0; virtual bool DequeueCallbacks(TArray& OutCallbacks) = 0; virtual bool HasRequests() = 0; virtual void AddCallback(FSchedulerCallback&& Callback) = 0; virtual void EnqueueUnique(FFilePlatformRequest&& FileRequest, bool bForceFrontOfQueue = false) = 0; virtual void DequeueAll(TArray& OutCallbacks, TArray& OutCookRequests) = 0; virtual EExternalRequestType DequeueRequest(TArray& OutCallbacks, FFilePlatformRequest& OutToBuild) = 0; virtual int32 GetNumRequests() const = 0; virtual void RemapTargetPlatforms(const TMap& Remap) = 0; virtual bool AssignRequests() = 0; virtual bool DecideNextCookAction(FTickStackData& StackData, UCookOnTheFlyServer::ECookAction& CookAction) = 0; virtual bool AddToWaitAssign(FPackageData& PackageData, EPackageState TargetState) = 0; protected: friend class FCookDirector; uint32 DesiredWaitAssignQueueLength = 64; UCookOnTheFlyServer& COTFS; }; } // namespace Cook } // namespace UE