2025-11-03 00:24:36 +08:00
|
|
|
|
using Cysharp.Threading.Tasks;
|
2025-11-03 12:03:21 +08:00
|
|
|
|
using System;
|
2025-11-03 00:24:36 +08:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using YooAsset;
|
|
|
|
|
|
|
|
|
|
|
|
public class MainOperation
|
|
|
|
|
|
{
|
|
|
|
|
|
PatchOperationData data;
|
|
|
|
|
|
PatchOperation operation;
|
2025-11-03 12:03:21 +08:00
|
|
|
|
bool autoDownload;
|
|
|
|
|
|
public MainOperation(EPlayMode playMode, bool autoDownload = false)
|
2025-11-03 00:24:36 +08:00
|
|
|
|
{
|
|
|
|
|
|
data = new PatchOperationData();
|
|
|
|
|
|
data.packageName = "Main";
|
|
|
|
|
|
data.playMode = playMode;
|
|
|
|
|
|
data.useBuildinFileSystem = false;
|
|
|
|
|
|
data.downloadingMaxNum = 10;
|
|
|
|
|
|
data.failedTryAgain = 3;
|
2025-11-03 12:03:21 +08:00
|
|
|
|
data.downloadUpdate = OnDownloadUpdate;
|
|
|
|
|
|
data.downloadFinish = OnDownloadFinish;
|
|
|
|
|
|
data.downloadError = OnDownloadError;
|
2025-11-03 00:24:36 +08:00
|
|
|
|
|
|
|
|
|
|
operation = new PatchOperation(data);
|
2025-11-03 12:03:21 +08:00
|
|
|
|
this.autoDownload = autoDownload;
|
2025-11-03 00:24:36 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public async UniTask Execute()
|
|
|
|
|
|
{
|
2025-11-03 12:03:21 +08:00
|
|
|
|
|
|
|
|
|
|
PatchEvent.UpdateProgress(0f);
|
2025-11-03 00:24:36 +08:00
|
|
|
|
InitializationOperation initializationOperation = await operation.InitializePackage();
|
|
|
|
|
|
//<2F><>ʼ<EFBFBD><CABC>ʧ<EFBFBD><CAA7>
|
|
|
|
|
|
if (initializationOperation.Status != EOperationStatus.Succeed)
|
|
|
|
|
|
{
|
|
|
|
|
|
MessageBox.Show()
|
|
|
|
|
|
.SetTitle(operation.data.packageName)
|
|
|
|
|
|
.SetContent($"{initializationOperation.Error}")
|
|
|
|
|
|
.AddButton("<22>˳<EFBFBD>", (box) => { Application.Quit(); });
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2025-11-03 12:03:21 +08:00
|
|
|
|
PatchEvent.UpdateStatus($"<22><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>{operation.data.packageName}");
|
|
|
|
|
|
Debug.Log($"<22><>ʼ<EFBFBD><CABC><EFBFBD>ɹ<EFBFBD>{operation.data.packageName}");
|
2025-11-03 00:24:36 +08:00
|
|
|
|
var PackageVersionOperation = await operation.RequestPackageVersion();
|
|
|
|
|
|
if (PackageVersionOperation.Status != EOperationStatus.Succeed)
|
|
|
|
|
|
{
|
|
|
|
|
|
MessageBox.Show()
|
|
|
|
|
|
.SetTitle(operation.data.packageName)
|
|
|
|
|
|
.SetContent($"{PackageVersionOperation.Error}")
|
|
|
|
|
|
.AddButton("<22>˳<EFBFBD>", (box) => { Application.Quit(); });
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
operation.packageVersion = PackageVersionOperation.PackageVersion;
|
2025-11-03 12:03:21 +08:00
|
|
|
|
PatchEvent.UpdateStatus($"<22><>ȡ<EFBFBD>汾<EFBFBD>ɹ<EFBFBD>{operation.data.packageName}");
|
|
|
|
|
|
Debug.Log($"<22><>ȡ<EFBFBD>汾<EFBFBD>ɹ<EFBFBD>{operation.data.packageName}<7D><>{operation.packageVersion}");
|
2025-11-03 00:24:36 +08:00
|
|
|
|
var PackageManifestOperation = await operation.UpdatePackageManifest();
|
|
|
|
|
|
if (PackageManifestOperation.Status != EOperationStatus.Succeed)
|
|
|
|
|
|
{
|
|
|
|
|
|
MessageBox.Show()
|
|
|
|
|
|
.SetTitle(operation.data.packageName)
|
|
|
|
|
|
.SetContent($"{PackageManifestOperation.Error}")
|
|
|
|
|
|
.AddButton("<22>˳<EFBFBD>", (box) => { Application.Quit(); });
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
var DownloaderOperation = operation.CreateDownloader();
|
|
|
|
|
|
if (DownloaderOperation.TotalDownloadCount == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
operation.SaveVersionToCache();
|
2025-11-03 12:03:21 +08:00
|
|
|
|
PatchEvent.UpdateStatus($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{operation.data.packageName}");
|
|
|
|
|
|
Debug.Log($"<22><><EFBFBD><EFBFBD>{operation.data.packageName}<7D><><EFBFBD>ɣ<EFBFBD><C9A3>汾<EFBFBD><E6B1BE>{operation.packageVersion}");
|
2025-11-03 00:24:36 +08:00
|
|
|
|
return;
|
|
|
|
|
|
}
|
2025-11-03 12:03:21 +08:00
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
if (autoDownload)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (!await Download(DownloaderOperation)) return;
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
var completionSource = new UniTaskCompletionSource<bool>();
|
|
|
|
|
|
MessageBox.Show()
|
|
|
|
|
|
.SetTitle(operation.data.packageName)
|
|
|
|
|
|
.SetContent($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>\n{operation.GetCachedPackageVersion()}=>{operation.packageVersion}: {DownloaderOperation.TotalDownloadBytes / 1024f / 1024f:F1}MB")
|
|
|
|
|
|
.AddButton("<22><><EFBFBD><EFBFBD>", async (box) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
bool success = await Download(DownloaderOperation);
|
|
|
|
|
|
completionSource.TrySetResult(success);
|
|
|
|
|
|
})
|
|
|
|
|
|
.AddButton("<22><><EFBFBD><EFBFBD>", (box) =>
|
|
|
|
|
|
{
|
|
|
|
|
|
DownloaderOperation.CancelDownload();
|
|
|
|
|
|
completionSource.TrySetResult(true);
|
|
|
|
|
|
})
|
|
|
|
|
|
.AddButton("<22>˳<EFBFBD>", (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("<22>˳<EFBFBD>", (box) => { Application.Quit(); });
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
operation.SaveVersionToCache();
|
|
|
|
|
|
PatchEvent.UpdateStatus($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>{operation.data.packageName}");
|
|
|
|
|
|
Debug.Log($"<22><><EFBFBD><EFBFBD>{operation.data.packageName}<7D><><EFBFBD>ɣ<EFBFBD><C9A3>汾<EFBFBD><E6B1BE>{operation.packageVersion}");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
public async UniTask<bool> Download(DownloaderOperation downloaderOperation)
|
|
|
|
|
|
{
|
2025-11-03 00:24:36 +08:00
|
|
|
|
if (!await operation.DownloadPackageFiles())
|
|
|
|
|
|
{
|
|
|
|
|
|
MessageBox.Show()
|
|
|
|
|
|
.SetTitle(operation.data.packageName)
|
2025-11-03 12:03:21 +08:00
|
|
|
|
.SetContent($"{downloaderOperation.Error}")
|
2025-11-03 00:24:36 +08:00
|
|
|
|
.AddButton("<22>˳<EFBFBD>", (box) => { Application.Quit(); });
|
2025-11-03 12:03:21 +08:00
|
|
|
|
return false;
|
2025-11-03 00:24:36 +08:00
|
|
|
|
}
|
2025-11-03 12:03:21 +08:00
|
|
|
|
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} <20><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>...");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnDownloadFinish(DownloaderFinishData downloaderFinishData)
|
|
|
|
|
|
{
|
|
|
|
|
|
PatchEvent.UpdateStatus("<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void OnDownloadError(DownloadErrorData downloadErrorData)
|
|
|
|
|
|
{
|
|
|
|
|
|
PatchEvent.UpdateStatus($"<22><><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>:{downloadErrorData.FileName}\n{downloadErrorData.ErrorInfo}");
|
2025-11-03 00:24:36 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|