HF|热更新02
大约 3 分钟
前情回顾
前文中我们已经讨论了两个基础的更新方案,并意识到恶意破坏补丁可能带来的严重问题。本文将继续探讨如何优化和完善我们的方案。
校验
获取文件MD5(HASH)
FMD5Hash CurrentPakHash = FMD5Hash::HashFile(*InFile);
FString CurrentPakHashString = LexToString(CurrentPakHash);
工具函数
USTRUCT(BlueprintType)
struct FPakFileInfo
{
GENERATED_USTRUCT_BODY()
public:
UPROPERTY(EditAnywhere,BlueprintReadWrite)
FString FileName;
UPROPERTY(EditAnywhere,BlueprintReadWrite)
FString Hash;
UPROPERTY(EditAnywhere,BlueprintReadWrite)
int32 FileSize = 0;
};
bool UFlibPatchParserHelper::GetPakFileInfo(const FString& InFile, FPakFileInfo& OutFileInfo)
{
bool bRunStatus = false;
if (FPaths::FileExists(InFile))
{
FString PathPart;
FString FileNamePart;
FString ExtensionPart;
FPaths::Split(InFile, PathPart, FileNamePart, ExtensionPart);
FMD5Hash CurrentPakHash = FMD5Hash::HashFile(*InFile);
OutFileInfo.FileName = FString::Printf(TEXT("%s.%s"),*FileNamePart,*ExtensionPart);
OutFileInfo.Hash = LexToString(CurrentPakHash);
OutFileInfo.FileSize = IFileManager::Get().FileSize(*InFile);
bRunStatus = true;
}
return bRunStatus;
}
独立启动器
方案3
后端服务
Spring Boot 是一个用于创建 Web 应用和服务的 Java 框架。 Node.js 是一个开源、跨平台的 JavaScript 运行时环境。
管理和提供版本更新信息服务
文件验证和安全性服务
数据库|数据层
SQL(Structured Query Language,结构化查询语言)是一种用于管理和操作关系型数据库的标准化编程语言。