148 lines
6.2 KiB
C#
148 lines
6.2 KiB
C#
using Cysharp.Threading.Tasks;
|
||
using System;
|
||
using UnityEngine;
|
||
using YooAsset;
|
||
|
||
public class MainOperation
|
||
{
|
||
PatchOperationData data;
|
||
PatchOperation operation;
|
||
bool autoDownload;
|
||
public MainOperation(EPlayMode playMode, bool autoDownload = false)
|
||
{
|
||
data = new PatchOperationData();
|
||
data.packageName = "Main";
|
||
data.playMode = playMode;
|
||
data.useBuildinFileSystem = false;
|
||
data.downloadingMaxNum = 10;
|
||
data.failedTryAgain = 3;
|
||
data.downloadUpdate = OnDownloadUpdate;
|
||
data.downloadFinish = OnDownloadFinish;
|
||
data.downloadError = OnDownloadError;
|
||
|
||
operation = new PatchOperation(data);
|
||
this.autoDownload = autoDownload;
|
||
}
|
||
|
||
public async UniTask Execute()
|
||
{
|
||
|
||
PatchEvent.UpdateProgress(0f);
|
||
InitializationOperation initializationOperation = await operation.InitializePackage();
|
||
//初始化失败
|
||
if (initializationOperation.Status != EOperationStatus.Succeed)
|
||
{
|
||
MessageBox.Show()
|
||
.SetTitle(operation.data.packageName)
|
||
.SetContent($"{initializationOperation.Error}")
|
||
.AddButton("退出", (box) => { Application.Quit(); });
|
||
return;
|
||
}
|
||
PatchEvent.UpdateStatus($"初始化成功{operation.data.packageName}");
|
||
Debug.Log($"初始化成功{operation.data.packageName}");
|
||
var PackageVersionOperation = await operation.RequestPackageVersion();
|
||
if (PackageVersionOperation.Status != EOperationStatus.Succeed)
|
||
{
|
||
MessageBox.Show()
|
||
.SetTitle(operation.data.packageName)
|
||
.SetContent($"{PackageVersionOperation.Error}")
|
||
.AddButton("退出", (box) => { Application.Quit(); });
|
||
return;
|
||
}
|
||
operation.packageVersion = PackageVersionOperation.PackageVersion;
|
||
PatchEvent.UpdateStatus($"获取版本成功{operation.data.packageName}");
|
||
Debug.Log($"获取版本成功{operation.data.packageName}:{operation.packageVersion}");
|
||
var PackageManifestOperation = await operation.UpdatePackageManifest();
|
||
if (PackageManifestOperation.Status != EOperationStatus.Succeed)
|
||
{
|
||
MessageBox.Show()
|
||
.SetTitle(operation.data.packageName)
|
||
.SetContent($"{PackageManifestOperation.Error}")
|
||
.AddButton("退出", (box) => { Application.Quit(); });
|
||
return;
|
||
}
|
||
var DownloaderOperation = operation.CreateDownloader();
|
||
if (DownloaderOperation.TotalDownloadCount == 0)
|
||
{
|
||
operation.SaveVersionToCache();
|
||
PatchEvent.UpdateStatus($"更新完成{operation.data.packageName}");
|
||
Debug.Log($"更新{operation.data.packageName}完成,版本号{operation.packageVersion}");
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
if (autoDownload)
|
||
{
|
||
if (!await Download(DownloaderOperation)) return;
|
||
}
|
||
else
|
||
{
|
||
var completionSource = new UniTaskCompletionSource<bool>();
|
||
MessageBox.Show()
|
||
.SetTitle(operation.data.packageName)
|
||
.SetContent($"发现资源更新\n{operation.GetCachedPackageVersion()}=>{operation.packageVersion}: {DownloaderOperation.TotalDownloadBytes / 1024f / 1024f:F1}MB")
|
||
.AddButton("下载", async (box) =>
|
||
{
|
||
bool success = await Download(DownloaderOperation);
|
||
completionSource.TrySetResult(success);
|
||
})
|
||
.AddButton("跳过", (box) =>
|
||
{
|
||
DownloaderOperation.CancelDownload();
|
||
completionSource.TrySetResult(true);
|
||
})
|
||
.AddButton("退出", (box) =>
|
||
{
|
||
completionSource.TrySetResult(false);
|
||
Application.Quit();
|
||
});
|
||
bool shouldContinue = await completionSource.Task;
|
||
if (!shouldContinue) return;
|
||
}
|
||
var ClearCacheFilesOperation = await operation.ClearCacheBundle();
|
||
if (ClearCacheFilesOperation.Status != EOperationStatus.Succeed)
|
||
{
|
||
MessageBox.Show()
|
||
.SetTitle(operation.data.packageName)
|
||
.SetContent($"{ClearCacheFilesOperation.Error}")
|
||
.AddButton("退出", (box) => { Application.Quit(); });
|
||
return;
|
||
}
|
||
operation.SaveVersionToCache();
|
||
PatchEvent.UpdateStatus($"更新完成{operation.data.packageName}");
|
||
Debug.Log($"更新{operation.data.packageName}完成,版本号{operation.packageVersion}");
|
||
}
|
||
}
|
||
public async UniTask<bool> Download(DownloaderOperation downloaderOperation)
|
||
{
|
||
if (!await operation.DownloadPackageFiles())
|
||
{
|
||
MessageBox.Show()
|
||
.SetTitle(operation.data.packageName)
|
||
.SetContent($"{downloaderOperation.Error}")
|
||
.AddButton("退出", (box) => { Application.Quit(); });
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
private void OnDownloadUpdate(DownloadUpdateData downloadUpdateData)
|
||
{
|
||
float progress = (float)downloadUpdateData.CurrentDownloadBytes / downloadUpdateData.TotalDownloadBytes;
|
||
string sizeText = $"{(downloadUpdateData.CurrentDownloadBytes / 1024f / 1024f):F1}MB / {(downloadUpdateData.TotalDownloadBytes / 1024f / 1024f):F1}MB";
|
||
|
||
PatchEvent.UpdateProgress(progress);
|
||
PatchEvent.UpdateDownloadSize(sizeText);
|
||
PatchEvent.UpdateStatus($"{data.packageName} 资源下载中...");
|
||
}
|
||
|
||
private void OnDownloadFinish(DownloaderFinishData downloaderFinishData)
|
||
{
|
||
PatchEvent.UpdateStatus("下载完成");
|
||
}
|
||
|
||
private void OnDownloadError(DownloadErrorData downloadErrorData)
|
||
{
|
||
PatchEvent.UpdateStatus($"下载失败:{downloadErrorData.FileName}\n{downloadErrorData.ErrorInfo}");
|
||
}
|
||
}
|