// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "OnlineSubsystemTypes.h" #include "OnlineDelegateMacros.h" ONLINESUBSYSTEM_API DECLARE_LOG_CATEGORY_EXTERN(LogOnlineTitleFile, Log, All); #define UE_LOG_ONLINE_TITLEFILE(Verbosity, Format, ...) \ { \ UE_LOG(LogOnlineTitleFile, Verbosity, TEXT("%s%s"), ONLINE_LOG_PREFIX, *FString::Printf(Format, ##__VA_ARGS__)); \ } #define UE_CLOG_ONLINE_TITLEFILE(Conditional, Verbosity, Format, ...) \ { \ UE_CLOG(Conditional, LogOnlineTitleFile, Verbosity, TEXT("%s%s"), ONLINE_LOG_PREFIX, *FString::Printf(Format, ##__VA_ARGS__)); \ } struct FAnalyticsEventAttribute; /** * Delegate fired when the list of files has been returned from the network store * * @param bWasSuccessful whether the file list was successful or not * @param Error string representing the error condition * */ DECLARE_MULTICAST_DELEGATE_TwoParams(FOnEnumerateFilesComplete, bool, const FString&); typedef FOnEnumerateFilesComplete::FDelegate FOnEnumerateFilesCompleteDelegate; /** * Delegate fired when as file read from the network platform's storage progresses * * @param FileName the name of the file this was for * @param NumBytes the number of bytes read so far */ DECLARE_MULTICAST_DELEGATE_TwoParams(FOnReadFileProgress, const FString&, uint64); typedef FOnReadFileProgress::FDelegate FOnReadFileProgressDelegate; /** * Delegate fired when a file read from the network platform's storage is complete * * @param bWasSuccessful whether the file read was successful or not * @param FileName the name of the file this was for * */ DECLARE_MULTICAST_DELEGATE_TwoParams(FOnReadFileComplete, bool, const FString&); typedef FOnReadFileComplete::FDelegate FOnReadFileCompleteDelegate; /** * Delegate fired when we would like to report an event to an analytics provider. * * @param EventName the name of the event * @param Attributes the key/value pairs of analytics event attributes to include with the event */ DECLARE_MULTICAST_DELEGATE_TwoParams(FOnTitleFileAnalyticsEvent, const FString& /* EventName */, const TArray& /* Attributes */) typedef FOnTitleFileAnalyticsEvent::FDelegate FOnTitleFileAnalyticsEventDelegate; class IOnlineTitleFile { protected: IOnlineTitleFile() {}; public: virtual ~IOnlineTitleFile() {}; /** * Copies the file data into the specified buffer for the specified file * * @param FileName the name of the file to read * @param FileContents the out buffer to copy the data into * * @return true if the data was copied, false otherwise */ virtual bool GetFileContents(const FString& FileName, TArray& FileContents) = 0; /** * Empties the set of downloaded files if possible (no async tasks outstanding) * * @return true if they could be deleted, false if they could not */ virtual bool ClearFiles() = 0; /** * Empties the cached data for this file if it is not being downloaded currently * * @param FileName the name of the file to remove from the cache * * @return true if it could be deleted, false if it could not */ virtual bool ClearFile(const FString& FileName) = 0; /** * Delete cached files on disk * * @param bSkipEnumerated if true then only non-enumerated files are deleted */ virtual void DeleteCachedFiles(bool bSkipEnumerated) = 0; /** * Requests a list of available files from the network store * * @param Page paging info to use for query * * @return true if the request has started, false if not */ virtual bool EnumerateFiles(const FPagedQuery& Page = FPagedQuery()) = 0; /** * Delegate fired when the list of files has been returned from the network store * * @param bWasSuccessful whether the file list was successful or not * @param Error string representing the error condition * */ DEFINE_ONLINE_DELEGATE_TWO_PARAM(OnEnumerateFilesComplete, bool, const FString&); /** * Returns the list of files that was returned by the network store * * @param Files out array of file metadata * */ virtual void GetFileList(TArray& Files) = 0; /** * Starts an asynchronous read of the specified file from the network platform's file store * * @param FileToRead the name of the file to read * * @return true if the calls starts successfully, false otherwise */ virtual bool ReadFile(const FString& FileName) = 0; /** * Delegate fired when a file read from the network platform's storage is complete * * @param bWasSuccessful whether the file read was successful or not * @param FileName the name of the file this was for * */ DEFINE_ONLINE_DELEGATE_TWO_PARAM(OnReadFileComplete, bool, const FString&); /** * Delegate fired when as file read from the network platform's storage progresses * * @param FileName the name of the file this was for * @param NumBytes the number of bytes read so far */ DEFINE_ONLINE_DELEGATE_TWO_PARAM(OnReadFileProgress, const FString&, uint64); /** * Delegate fired when we would like to report an event to an analytics provider. * * @param EventName the name of the event * @param Attributes the key/value pairs of analytics event attributes to include with the event */ DEFINE_ONLINE_DELEGATE_TWO_PARAM(OnTitleFileAnalyticsEvent, const FString& /* EventName */, const TArray& /* Attributes */) }; typedef TSharedPtr IOnlineTitleFilePtr; typedef TSharedRef IOnlineTitleFileRef;