游戏全局文件
1. 概述
PGOS提供了一个管理游戏全局文件的文件管理系统。游戏客户端和服务器可以访问游戏全局文件信息,并且游戏可以使用获取的URL下载这些文件。但是,这些文件只能通过门户控制台或CLI进行创建、修改或删除。 完成本教程后,您将了解以下内容:
- 如何在门户控制台上管理游戏全局文件。
- 如何在代码中查询游戏全局文件信息。
2. 管理游戏全局文件
登录网页门户,进入控制台:
在顶部点击 Global Data
, 激活 Title File
页签:
2.1 创建新目录
在左侧目录树中选择要创建新目录的位置,然后点击"新建目录"按钮进行添加:
创建目录字段说明:
- 名称:目录名称,由字母、数字、下划线(_)和连字符(-)组成,必须以字母开头,且不超过255个字符。
文件和目录名称不区分大小写,这意味着"/config/rules.json"和"/CONFIG/RULES.JSON"被视为同一个文件。
点击"提交"按钮完成创建。
2.2 删除目录
从左侧目录树中选择要删除的目录的父目录,然后点击"删除"链接来删除该目录。
点击"是"按钮确认删除,点击"否"取消删除。
2.3 上传文件
在左侧目录树中选择要上传文件的目标目录,然后点击"上传文件"按钮:
创建文件字段说明:
- 文件:选择要上传到云端的本地文件。
文件和目录名称均不区分大小写,这意味着"/config/rules.json"和"/CONFIG/RULES.JSON"被视为同一个文件。
- 仅服务器:指定是否仅服务器有权限获取可下载的URL。
点击提交
按钮以提交创建。
2.4 删除文件
从左侧目录树中展开相关的父目录,找到要删除的文件,然后点击列表中的"删除"链接来移除该文件:
点击"是"按钮确认删除,点击"否"取消删除。
2.5 刷新缓存
通常情况下,文件上传到云端后,云端后台会逐步将其同步到各个地区站点,使用户可以从就近的地区缓存下载这些文件,提高下载速度。但是,如果您覆盖了一个文件(删除+上传同路径文件),由于地区缓存更新存在延迟,某些地区的用户可能仍会下载到该文件的旧缓存。此时,您需要通过点击目录树下方的"刷新CDN缓存"按钮手动更新缓存。
3. 查询游戏全局文件信息
您可以通过 PgosSDK
在游戏中查询指定的游戏全局文件项目信息。
3.1 For游戏客户端
API | Description |
---|---|
GetTitleFileInfo | 查询指定文件路径的游戏全局文件信息。 |
GetTitleFileInfo Client API
接口原型:
/**
* Query the title file information of the specified file paths.
*
* @param Params The parameter to get title file info.
*/
void GetTitleFileInfo(
const FGetTitleFileInfoParams& Params,
TFunction<void(const FPgosResult& Ret, const FGetTitleFileInfoResult* Data)> Callback) const;
struct FGetTitleFileInfoParams
{
/**
* The list contains the full paths of title files from which information will be retrieved, with a maximum size of 100 paths.
* Note: file&folder names are case-insensitive, meaning that "/config/rules.json" and "/CONFIG/RULES.JSON" are considered the same file.
*/
TArray<FString> paths;
/**
* The valid duration(in seconds) of the file download URL, after which the URL will no longer be downloadable.
* Its value must be greater than 0, otherwise the operation will fail.
*/
int32 url_valid_time = 3600;
};
struct FGetTitleFileInfoResult
{
/** Obtained title file informations, key: file path, value: file info. */
TMap<FString, FTitleFileInfo> data;
/** The reason why the query operation failed for these paths, key: file path, value: failed reason. */
TMap<FString, FString> fails;
};
示例代码:
#include "PgosSDKCpp.h"
void SomeUObjectClass::SomeFunction()
{
auto TitleFile = IPgosSDKCpp::Get().GetClientTitleFileAPI();
if (TitleFile)
{
FGetTitleFileInfoParams Params;
Params.paths.Add(TEXT("/config/rules.json"));
Params.url_valid_time = 3600;
TitleFile->GetTitleFileInfo(Params, [](const FPgosResult& Ret, const FGetTitleFileInfoResult* Data) {
if (Ret.err_code == (int32)Pgos::PgosErrCode::kSuccess)
{
UE_LOG(LogTemp, Log, TEXT("GetTitleFileInfo Success"));
}
else
{
UE_LOG(LogTemp, Log, TEXT("GetTitleFileInfo Failed: err_code=%d, err_msg=%s"), Ret.err_code, *Ret.msg);
}
});
}
}
3.2 For 游戏服务器
API | Description |
---|---|
GetTitleFileInfo | 查询指定文件路径的游戏全局文件信息。 |
GetTitleFileInfo Server API
接口原型:
/**
* Query the title file informations of the specified file paths.
*
* @param Params The parameter to get title file info.
*/
void GetTitleFileInfo(
const FGetTitleFileInfoParams& Params,
TFunction<void(const FPgosResult& Ret, const FGetTitleFileInfoResult* Data)> Callback) const;
struct FGetTitleFileInfoParams
{
/**
* The list contains the full paths of title files from which information will be retrieved, with a maximum size of 100 paths.
* Note: file&folder names are case-insensitive, meaning that "/config/rules.json" and "/CONFIG/RULES.JSON" are considered the same file.
*/
TArray<FString> paths;
/**
* The valid duration(in seconds) of the file download URL, after which the URL will no longer be downloadable.
* Its value must be greater than 0, otherwise the operation will fail.
*/
int32 url_valid_time = 3600;
};
struct FGetTitleFileInfoResult
{
/** Obtained title file informations, key: file path, value: file info. */
TMap<FString, FTitleFileInfo> data;
/** The reason why the query operation failed for these paths, key: file path, value: failed reason. */
TMap<FString, FString> fails;
};
示例代码:
#include "PgosSDKCpp.h"
void SomeUObjectClass::SomeFunction()
{
auto TitleFile = IPgosSDKCpp::Get().GetServerTitleFileAPI();
if (TitleFile)
{
FGetTitleFileInfoParams Params;
Params.paths.Add(TEXT("/config/rules.json"));
Params.url_valid_time = 3600;
TitleFile->GetTitleFileInfo(Params, [](const FPgosResult& Ret, const FGetTitleFileInfoResult* Data) {
if (Ret.err_code == (int32)Pgos::PgosErrCode::kSuccess)
{
UE_LOG(LogTemp, Log, TEXT("GetTitleFileInfo Success"));
}
else
{
UE_LOG(LogTemp, Log, TEXT("GetTitleFileInfo Failed: err_code=%d, err_msg=%s"), Ret.err_code, *Ret.msg);
}
});
}
}
3.3 关键错误处理
Error Code | 相关 API | Handling Suggestion |
---|---|---|
kBackendServerValidateFail | GetTitleFileInfo Client API GetTitleFileInfo Server API | 输入参数无效,请查看错误信息了解详情。 |
kBackendAllFailed | GetTitleFileInfo Client API GetTitleFileInfo Server API | 所有待查询的数据均失败,请查看'fails'字段以获取失败原因。 |
kSdkNetworkError | All Network API | 网络错误,请查看错误信息了解详情。 |