Skip to content

建立和配置補全器

初始化補全器

建立一個資源補全器的方法非常簡單, 您只需要使用下面的程式碼即可完成補全器的初始化:

c#

var completer = new DefaultResourceCompleter
{
    MaxDegreeOfParallelism = [MAX_DEGREE_OF_PARALLELISM],
    ResourceInfoResolvers = new List<IResourceInfoResolver>
    {
        ... // 資源資訊解析器的初始化
    },
    TotalRetry = [NUMBER_OF_TOTAL_RETRY],
    CheckFile = [CHECK_FILE_AFTER_DOWNLOADED],
    DownloadParts = [TOTAL_DOWNLOAD_SEGMENTS_FOR_LARGE_FILE]
};

TIP

資源資訊解析器的初始化相關教程請參見 資源資訊解析器 章節

在上述程式碼塊中, 請將這些引數按照您的實際情況替換:

專案資料型別說明
[MAX_DEGREE_OF_PARALLELISM]INT資源檢查並行程度(同時檢查遊戲資源的數量)
[CHECK_FILE_AFTER_DOWNLOADED]BOOLEAN在檔案下載完成後檢查檔案完整性(如果存在資源校檢碼)
[TOTAL_DOWNLOAD_SEGMENTS_FOR_LARGE_FILE]INT大檔案下載時的分片數量

WARNING

[MAX_DEGREE_OF_PARALLELISM][TOTAL_DOWNLOAD_SEGMENTS_FOR_LARGE_FILE] 的數值大小請視硬體效能酌情調整, 設定過大的數值可能會導致會導致吞吐量的下降.

補全遊戲資源

在完成資源補全器的初始化操作後, 您只需要呼叫補全方法即可開始執行檢查和補全操作:

在非同步上下文中, 使用 CheckAndDownloadTaskAsync 來完成安裝:

c#

var result = await completer.CheckAndDownloadTaskAsync(); 

if (result.TaskStatus == TaskResultStatus.Error && (result.Value?.IsLibDownloadFailed ?? false))
{
    // 在完成補全後, 資源檢查器會返回執行結果. 
    // 您可以檢查 result 中的屬性值來確定補全是否完成
    
    // IsLibDownloadFailed 會反映啟動必須的庫檔案是否已經成功補全
    // 通常來說, 如果庫檔案的補全失敗, 很有可能會導致遊戲的啟動失敗
}

在同步上下文中, 使用 CheckAndDownload 來完成安裝:

c#

var result = completer.CheckAndDownload(); 

報告進度

在某些情況下, 資源補全器可能會需要數分鐘的時間來完成資源的檢查和下載. 因此, 您可能需要實時向用戶彙報補全器目前的進度.

報告資源檢查器的進度

您可以透過註冊事件 GameResourceInfoResolveStatus 來獲取實時的檢查進度:

c#

completer.GameResourceInfoResolveStatus += (_, args) => 
    { ReportProgress(args.Progress, args.Status); };

其中, args.Progress 指示了檢查器當前的百分比進度. args.Status 則是檢查器當前進度的文字描述.

報告補全器檔案下載進度

您可以透過註冊事件 DownloadFileCompletedEvent 來獲取實時的檢查進度:

c#

completer.DownloadFileCompletedEvent += (sender, args) =>
{
    // sender 引數為補全器上一個成功下載的檔案, 型別為 DownloadFile
    // args 返回了該檔案的下載狀態(成功 / 失敗), 以及檔案的重試計數, 
    // 型別為 DownloadFileCompletedEventArgs
};

報告下載中的檔案的進度資訊

您可以透過註冊事件 DownloadFileChangedEvent 來獲取實時的檢查進度:

c#

rC.DownloadFileChangedEvent += (_, args) =>
{
    // args 返回了下載中的檔案的具體資訊(已接收的位元組數、總共的位元組數、當前速度、百分比進度)
    // 型別為 DownloadFileChangedEventArgs
};

使用 MIT 協議發行, 喜歡我們的工作的話就給我們點一個 star ⭐ 吧!