跳到主要内容

游戏全局文件

1. 概述

PGOS提供了一个管理游戏全局文件的文件管理系统。游戏客户端和服务器可以访问游戏全局文件信息,并且游戏可以使用获取的URL下载这些文件。但是,这些文件只能通过门户控制台或CLI进行创建、修改或删除。 完成本教程后,您将了解以下内容:

  • 如何在门户控制台上管理游戏全局文件。
    • 如何在代码中查询游戏全局文件信息。

2. 管理游戏全局文件

登录网页门户,进入控制台:

image-20240628193530646

在顶部点击 Global Data , 激活 Title File 页签:

image-20240920114030251

2.1 创建新目录

在左侧目录树中选择要创建新目录的位置,然后点击"新建目录"按钮进行添加:

image-20240701155742166

创建目录字段说明:

  • 名称:目录名称,由字母、数字、下划线(_)和连字符(-)组成,必须以字母开头,且不超过255个字符。

    文件和目录名称不区分大小写,这意味着"/config/rules.json"和"/CONFIG/RULES.JSON"被视为同一个文件。

点击"提交"按钮完成创建。

2.2 删除目录

从左侧目录树中选择要删除的目录的父目录,然后点击"删除"链接来删除该目录。

image-20240920115049195

image-20240701162239434

点击"是"按钮确认删除,点击"否"取消删除。

2.3 上传文件

在左侧目录树中选择要上传文件的目标目录,然后点击"上传文件"按钮:

image-20240920115608862

image-20240920120109154

创建文件字段说明:

  • 文件:选择要上传到云端的本地文件。

    文件和目录名称均不区分大小写,这意味着"/config/rules.json"和"/CONFIG/RULES.JSON"被视为同一个文件。

  • 仅服务器:指定是否仅服务器有权限获取可下载的URL。

点击提交按钮以提交创建。

2.4 删除文件

从左侧目录树中展开相关的父目录,找到要删除的文件,然后点击列表中的"删除"链接来移除该文件:

image-20240920120444480

image-20240701164552924

点击"是"按钮确认删除,点击"否"取消删除。

2.5 刷新缓存

通常情况下,文件上传到云端后,云端后台会逐步将其同步到各个地区站点,使用户可以从就近的地区缓存下载这些文件,提高下载速度。但是,如果您覆盖了一个文件(删除+上传同路径文件),由于地区缓存更新存在延迟,某些地区的用户可能仍会下载到该文件的旧缓存。此时,您需要通过点击目录树下方的"刷新CDN缓存"按钮手动更新缓存。

image-20240920120817918

3. 查询游戏全局文件信息

您可以通过 PgosSDK 在游戏中查询指定的游戏全局文件项目信息。

3.1 For游戏客户端

APIDescription
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 游戏服务器

APIDescription
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相关 APIHandling Suggestion
kBackendServerValidateFailGetTitleFileInfo Client API
GetTitleFileInfo Server API
输入参数无效,请查看错误信息了解详情。
kBackendAllFailedGetTitleFileInfo Client API
GetTitleFileInfo Server API
所有待查询的数据均失败,请查看'fails'字段以获取失败原因。
kSdkNetworkErrorAll Network API网络错误,请查看错误信息了解详情。