pull/186/head^2
hevinci 2023-09-25 11:38:01 +08:00
parent 5539d81c93
commit 49b188964c
6 changed files with 73 additions and 21 deletions

View File

@ -0,0 +1,36 @@
using System;
using System.Collections;
using System.Collections.Generic;
namespace YooAsset
{
public class RequestHelper
{
/// <summary>
/// 记录网络请求失败事件的次数
/// </summary>
private static readonly Dictionary<string, int> _requestFailedRecorder = new Dictionary<string, int>(1000);
/// <summary>
/// 记录请求失败事件
/// </summary>
public static void RecordRequestFailed(string packageName, string eventName)
{
string key = $"{packageName}_{eventName}";
if (_requestFailedRecorder.ContainsKey(key) == false)
_requestFailedRecorder.Add(key, 0);
_requestFailedRecorder[key]++;
}
/// <summary>
/// 获取请求失败的次数
/// </summary>
public static int GetRequestFailedCount(string packageName, string eventName)
{
string key = $"{packageName}_{eventName}";
if (_requestFailedRecorder.ContainsKey(key) == false)
_requestFailedRecorder.Add(key, 0);
return _requestFailedRecorder[key];
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: ca9b2c6456d21bb4e9eecd9dc820a641
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -11,7 +11,6 @@ namespace YooAsset
Done, Done,
} }
private static int RequestCount = 0;
private readonly IRemoteServices _remoteServices; private readonly IRemoteServices _remoteServices;
private readonly string _packageName; private readonly string _packageName;
private readonly string _packageVersion; private readonly string _packageVersion;
@ -19,6 +18,7 @@ namespace YooAsset
private UnityWebFileRequester _downloader1; private UnityWebFileRequester _downloader1;
private UnityWebFileRequester _downloader2; private UnityWebFileRequester _downloader2;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
private int _requestCount = 0;
internal DownloadManifestOperation(IRemoteServices remoteServices, string packageName, string packageVersion, int timeout) internal DownloadManifestOperation(IRemoteServices remoteServices, string packageName, string packageVersion, int timeout)
{ {
@ -29,7 +29,7 @@ namespace YooAsset
} }
internal override void Start() internal override void Start()
{ {
RequestCount++; _requestCount = RequestHelper.GetRequestFailedCount(_packageName, nameof(DownloadManifestOperation));
_steps = ESteps.DownloadPackageHashFile; _steps = ESteps.DownloadPackageHashFile;
} }
internal override void Update() internal override void Update()
@ -58,6 +58,7 @@ namespace YooAsset
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _downloader1.GetError(); Error = _downloader1.GetError();
RequestHelper.RecordRequestFailed(_packageName, nameof(DownloadManifestOperation));
} }
else else
{ {
@ -88,6 +89,7 @@ namespace YooAsset
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _downloader2.GetError(); Error = _downloader2.GetError();
RequestHelper.RecordRequestFailed(_packageName, nameof(DownloadManifestOperation));
} }
else else
{ {
@ -102,10 +104,10 @@ namespace YooAsset
private string GetDownloadRequestURL(string fileName) private string GetDownloadRequestURL(string fileName)
{ {
// 轮流返回请求地址 // 轮流返回请求地址
if (RequestCount % 2 == 0) if (_requestCount % 2 == 0)
return _remoteServices.GetRemoteFallbackURL(fileName);
else
return _remoteServices.GetRemoteMainURL(fileName); return _remoteServices.GetRemoteMainURL(fileName);
else
return _remoteServices.GetRemoteFallbackURL(fileName);
} }
} }
} }

View File

@ -13,7 +13,6 @@ namespace YooAsset
Done, Done,
} }
private static int RequestCount = 0;
private readonly IRemoteServices _remoteServices; private readonly IRemoteServices _remoteServices;
private readonly string _packageName; private readonly string _packageName;
private readonly string _packageVersion; private readonly string _packageVersion;
@ -23,6 +22,7 @@ namespace YooAsset
private DeserializeManifestOperation _deserializer; private DeserializeManifestOperation _deserializer;
private byte[] _fileData; private byte[] _fileData;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
private int _requestCount = 0;
/// <summary> /// <summary>
/// 加载的清单实例 /// 加载的清单实例
@ -39,7 +39,7 @@ namespace YooAsset
} }
internal override void Start() internal override void Start()
{ {
RequestCount++; _requestCount = RequestHelper.GetRequestFailedCount(_packageName, nameof(LoadRemoteManifestOperation));
_steps = ESteps.DownloadPackageHashFile; _steps = ESteps.DownloadPackageHashFile;
} }
internal override void Update() internal override void Update()
@ -90,6 +90,7 @@ namespace YooAsset
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _downloader.GetError(); Error = _downloader.GetError();
RequestHelper.RecordRequestFailed(_packageName, nameof(LoadRemoteManifestOperation));
} }
else else
{ {
@ -141,10 +142,10 @@ namespace YooAsset
private string GetDownloadRequestURL(string fileName) private string GetDownloadRequestURL(string fileName)
{ {
// 轮流返回请求地址 // 轮流返回请求地址
if (RequestCount % 2 == 0) if (_requestCount % 2 == 0)
return _remoteServices.GetRemoteFallbackURL(fileName);
else
return _remoteServices.GetRemoteMainURL(fileName); return _remoteServices.GetRemoteMainURL(fileName);
else
return _remoteServices.GetRemoteFallbackURL(fileName);
} }
} }
} }

View File

@ -10,13 +10,13 @@ namespace YooAsset
Done, Done,
} }
private static int RequestCount = 0;
private readonly IRemoteServices _remoteServices; private readonly IRemoteServices _remoteServices;
private readonly string _packageName; private readonly string _packageName;
private readonly string _packageVersion; private readonly string _packageVersion;
private readonly int _timeout; private readonly int _timeout;
private UnityWebDataRequester _downloader; private UnityWebDataRequester _downloader;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
private int _requestCount = 0;
/// <summary> /// <summary>
/// 包裹哈希值 /// 包裹哈希值
@ -33,7 +33,7 @@ namespace YooAsset
} }
internal override void Start() internal override void Start()
{ {
RequestCount++; _requestCount = RequestHelper.GetRequestFailedCount(_packageName, nameof(QueryRemotePackageHashOperation));
_steps = ESteps.DownloadPackageHash; _steps = ESteps.DownloadPackageHash;
} }
internal override void Update() internal override void Update()
@ -62,6 +62,7 @@ namespace YooAsset
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _downloader.GetError(); Error = _downloader.GetError();
RequestHelper.RecordRequestFailed(_packageName, nameof(QueryRemotePackageHashOperation));
} }
else else
{ {
@ -88,10 +89,10 @@ namespace YooAsset
string url; string url;
// 轮流返回请求地址 // 轮流返回请求地址
if (RequestCount % 2 == 0) if (_requestCount % 2 == 0)
url = _remoteServices.GetRemoteFallbackURL(fileName);
else
url = _remoteServices.GetRemoteMainURL(fileName); url = _remoteServices.GetRemoteMainURL(fileName);
else
url = _remoteServices.GetRemoteFallbackURL(fileName);
return url; return url;
} }

View File

@ -10,13 +10,13 @@ namespace YooAsset
Done, Done,
} }
private static int RequestCount = 0;
private readonly IRemoteServices _remoteServices; private readonly IRemoteServices _remoteServices;
private readonly string _packageName; private readonly string _packageName;
private readonly bool _appendTimeTicks; private readonly bool _appendTimeTicks;
private readonly int _timeout; private readonly int _timeout;
private UnityWebDataRequester _downloader; private UnityWebDataRequester _downloader;
private ESteps _steps = ESteps.None; private ESteps _steps = ESteps.None;
private int _requestCount = 0;
/// <summary> /// <summary>
/// 包裹版本 /// 包裹版本
@ -33,7 +33,7 @@ namespace YooAsset
} }
internal override void Start() internal override void Start()
{ {
RequestCount++; _requestCount = RequestHelper.GetRequestFailedCount(_packageName, nameof(QueryRemotePackageVersionOperation));
_steps = ESteps.DownloadPackageVersion; _steps = ESteps.DownloadPackageVersion;
} }
internal override void Update() internal override void Update()
@ -62,6 +62,7 @@ namespace YooAsset
_steps = ESteps.Done; _steps = ESteps.Done;
Status = EOperationStatus.Failed; Status = EOperationStatus.Failed;
Error = _downloader.GetError(); Error = _downloader.GetError();
RequestHelper.RecordRequestFailed(_packageName, nameof(QueryRemotePackageVersionOperation));
} }
else else
{ {
@ -88,10 +89,10 @@ namespace YooAsset
string url; string url;
// 轮流返回请求地址 // 轮流返回请求地址
if (RequestCount % 2 == 0) if (_requestCount % 2 == 0)
url = _remoteServices.GetRemoteFallbackURL(fileName);
else
url = _remoteServices.GetRemoteMainURL(fileName); url = _remoteServices.GetRemoteMainURL(fileName);
else
url = _remoteServices.GetRemoteFallbackURL(fileName);
// 在URL末尾添加时间戳 // 在URL末尾添加时间戳
if (_appendTimeTicks) if (_appendTimeTicks)