bool FOnlineSharedCloudSteam::WriteSharedFile(const FUniqueNetId& UserId, const FString& FileName, TArray<uint8>& FileContents) { SteamSubsystem->QueueAsyncTask(new FOnlineAsyncTaskSteamWriteSharedFile(SteamSubsystem, FUniqueNetIdSteam(*(uint64*)UserId.GetBytes()), FileName, FileContents)); return true; }
bool FOnlineUserCloudSteam::DeleteUserFile(const FUniqueNetId& UserId, const FString& FileName, bool bShouldCloudDelete, bool bShouldLocallyDelete) { SteamSubsystem->QueueAsyncTask(new FOnlineAsyncTaskSteamDeleteUserFile(SteamSubsystem, FUniqueNetIdSteam(*(uint64*)UserId.GetBytes()), FileName, bShouldCloudDelete, bShouldLocallyDelete)); return true; }
void FOnlineUserCloudSteam::EnumerateUserFiles(const FUniqueNetId& UserId) { SteamSubsystem->QueueAsyncTask(new FOnlineAsyncTaskSteamEnumerateUserFiles(SteamSubsystem, FUniqueNetIdSteam(*(uint64*)UserId.GetBytes()))); }
bool FOnlineUserCloudSteam::WriteUserFile(const FUniqueNetId& UserId, const FString& FileName, TArray<uint8>& FileContents) { FScopeLock(&SteamSubsystem->UserCloudDataLock); // Create or get the current entry for this file FSteamUserCloudData* UserCloud = SteamSubsystem->GetUserCloudEntry(UserId); if (UserCloud && FileName.Len() > 0) { FCloudFile* UserCloudFile = UserCloud->GetFileData(FileName, true); UserCloudFile->AsyncState = EOnlineAsyncTaskState::InProgress; SteamSubsystem->QueueAsyncTask(new FOnlineAsyncTaskSteamWriteUserFile(SteamSubsystem, FUniqueNetIdSteam(*(uint64*)UserId.GetBytes()), FileName, FileContents)); return true; } return false; }
bool FOnlineAsyncTaskSteamWriteUserFile::WriteUserFile(const FUniqueNetId& InUserId, const FString& InFileToWrite, const TArray<uint8>& InContents) { bool bSuccess = false; if (InFileToWrite.Len() > 0 && InContents.Num() > 0) { if (SteamRemoteStorage() && FileName.Len() > 0) { CSteamID SteamId(*(uint64*)InUserId.GetBytes()); if (SteamUser()->BLoggedOn() && SteamUser()->GetSteamID() == SteamId) { // Currently don't support greater than 1 chunk if (InContents.Num() < k_unMaxCloudFileChunkSize) { if (SteamRemoteStorage()->FileWrite(TCHAR_TO_UTF8(*InFileToWrite), InContents.GetData(), InContents.Num())) { FScopeLock ScopeLock(&Subsystem->UserCloudDataLock); FSteamUserCloudData* UserCloud = Subsystem->GetUserCloudEntry(InUserId); if (UserCloud) { // Update the metadata table to reflect this write (might be new entry) FCloudFileHeader* UserCloudFileMetadata = UserCloud->GetFileMetadata(InFileToWrite, true); check(UserCloudFileMetadata); UserCloudFileMetadata->FileSize = SteamRemoteStorage()->GetFileSize(TCHAR_TO_UTF8(*InFileToWrite)); UserCloudFileMetadata->Hash = FString(TEXT("0")); // Update the file table to reflect this write FCloudFile* UserCloudFileData = UserCloud->GetFileData(InFileToWrite, true); check(UserCloudFileData); UserCloudFileData->Data = InContents; bSuccess = true; } } else { UE_LOG_ONLINE(Warning, TEXT("Failed to write file to Steam cloud \"%s\"."), *InFileToWrite); } } else { UE_LOG_ONLINE(Warning, TEXT("File too large %d to write to Steam cloud."), InContents.Num()); } } else { UE_LOG_ONLINE(Warning, TEXT("Can only write cloud files for logged in user.")); } } else { UE_LOG_ONLINE(Warning, TEXT("Steam remote storage API disabled.")); } } { FScopeLock ScopeLock(&Subsystem->UserCloudDataLock); FSteamUserCloudData* UserCloud = Subsystem->GetUserCloudEntry(InUserId); if (UserCloud) { FCloudFile* UserCloudFileData = UserCloud->GetFileData(InFileToWrite, true); check(UserCloudFileData); UserCloudFileData->AsyncState = bSuccess ? EOnlineAsyncTaskState::Done : EOnlineAsyncTaskState::Failed; } } //SteamSubsystem->GetUserCloudInterface()->DumpCloudFileState(InUserId, InFileToWrite); return bSuccess; }