2024-12-13 15:15:19 +08:00
|
|
|
|
using Cysharp.Threading.Tasks;
|
|
|
|
|
|
using System;
|
|
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Net.Http;
|
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
using System.Threading;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using UnityEngine.Networking;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 下载测试
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class DownloadTest
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 最大间隔
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private const float MAX_INTERVALS = 600f;
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 下载URL
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private const string DOWNLOAD_URL = "http://1.14.62.163/Build/Dev/Android/0.1.0/BuildReport_DefaultPackage_638683185541237500.json";
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 超时时间
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private readonly double timeOutTick = 10f; // 10秒没下完超时
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 当前下载间隔
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private float intervals = 15f;
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 计时
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private float timer = 0f;
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 总下载次数
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private int total;
|
|
|
|
|
|
|
|
|
|
|
|
private StreamWriter writerUnityWebRequest;
|
|
|
|
|
|
private StreamWriter writerHttpClient;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 最大下载次数
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public int MaxDownloadCount { get; private set; }
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 是否开始下载
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public bool IsBeginDownload { get; private set; }
|
|
|
|
|
|
|
|
|
|
|
|
public DownloadTest()
|
|
|
|
|
|
{
|
|
|
|
|
|
IsBeginDownload = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 开始下载测试
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public async void BeginDownload()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (IsBeginDownload)
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
|
|
IsBeginDownload = true;
|
|
|
|
|
|
|
|
|
|
|
|
string fileUnityWebRequestPath = Path.Combine(Application.persistentDataPath, "UnityWebRequestTest.txt");
|
|
|
|
|
|
string fileHttpClientPath = Path.Combine(Application.persistentDataPath, "HttpClientTest.txt");
|
|
|
|
|
|
Debug.Log($"开始下载测试,下载{MaxDownloadCount}次,保存文件路径:{fileUnityWebRequestPath}和{fileHttpClientPath}");
|
|
|
|
|
|
timer = intervals;
|
|
|
|
|
|
total = 0;
|
|
|
|
|
|
MaxDownloadCount = 5;
|
|
|
|
|
|
|
|
|
|
|
|
writerUnityWebRequest = File.CreateText(fileUnityWebRequestPath);
|
|
|
|
|
|
writerHttpClient = File.CreateText(fileHttpClientPath);
|
|
|
|
|
|
|
|
|
|
|
|
while (IsBeginDownload)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (timer >= intervals)
|
|
|
|
|
|
{
|
|
|
|
|
|
timer -= intervals;
|
|
|
|
|
|
++total;
|
|
|
|
|
|
if (total > MaxDownloadCount)
|
|
|
|
|
|
{
|
|
|
|
|
|
StopDownload();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
DownloadByUnityWebRequest();
|
|
|
|
|
|
DownloadByUnityHttpClient();
|
|
|
|
|
|
}
|
|
|
|
|
|
await UniTask.DelayFrame(1);
|
|
|
|
|
|
timer += Time.deltaTime;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 停止下载
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public void StopDownload()
|
|
|
|
|
|
{
|
|
|
|
|
|
writerUnityWebRequest.Flush();
|
|
|
|
|
|
writerUnityWebRequest.Close();
|
|
|
|
|
|
|
|
|
|
|
|
writerHttpClient.Flush();
|
|
|
|
|
|
writerHttpClient.Close();
|
|
|
|
|
|
|
|
|
|
|
|
IsBeginDownload = false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 通过WebRequest下载
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private async void DownloadByUnityWebRequest()
|
|
|
|
|
|
{
|
|
|
|
|
|
string log = string.Empty;
|
2024-12-13 16:27:20 +08:00
|
|
|
|
DateTime startTime = DateTime.Now;
|
2024-12-13 15:15:19 +08:00
|
|
|
|
DateTime endTime;
|
|
|
|
|
|
using UnityWebRequest request = UnityWebRequest.Get(DOWNLOAD_URL);
|
|
|
|
|
|
|
|
|
|
|
|
UnityWebRequestAsyncOperation asyncOperation = request.SendWebRequest();
|
|
|
|
|
|
|
|
|
|
|
|
while (!asyncOperation.isDone)
|
|
|
|
|
|
{
|
|
|
|
|
|
await UniTask.DelayFrame(1);
|
2024-12-13 16:27:20 +08:00
|
|
|
|
endTime = DateTime.Now;
|
2024-12-13 15:15:19 +08:00
|
|
|
|
TimeSpan timeSpan = endTime - startTime;
|
|
|
|
|
|
if (timeSpan.TotalSeconds > timeOutTick)
|
|
|
|
|
|
{
|
|
|
|
|
|
request.Abort();
|
|
|
|
|
|
log = $"{total},类型:{nameof(UnityWebRequest)}, {timeOutTick}s超时,URL:{DOWNLOAD_URL}";
|
2024-12-13 17:09:08 +08:00
|
|
|
|
Debug.LogWarning(log);
|
2024-12-13 15:15:19 +08:00
|
|
|
|
writerUnityWebRequest.WriteLine(log);
|
|
|
|
|
|
writerUnityWebRequest.Flush();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-12-13 16:27:20 +08:00
|
|
|
|
endTime = DateTime.Now;
|
2024-12-13 15:15:19 +08:00
|
|
|
|
if (request.result != UnityWebRequest.Result.Success)
|
|
|
|
|
|
{
|
|
|
|
|
|
log = $"{total},类型:{nameof(UnityWebRequest)}, 开始时间:{startTime},完成时间:{endTime},间隔:{(endTime - startTime).TotalSeconds}秒,是否成功:{false},URL:{DOWNLOAD_URL}";
|
|
|
|
|
|
Debug.LogError(log);
|
|
|
|
|
|
writerUnityWebRequest.WriteLine(log);
|
|
|
|
|
|
writerUnityWebRequest.Flush();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
log = $"{total},类型:{nameof(UnityWebRequest)}, 开始时间:{startTime},完成时间:{endTime},间隔:{(endTime - startTime).TotalSeconds}秒,是否成功:{true},URL:{DOWNLOAD_URL}";
|
|
|
|
|
|
Debug.Log(log);
|
|
|
|
|
|
writerUnityWebRequest.WriteLine(log);
|
|
|
|
|
|
writerUnityWebRequest.Flush();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 通过HttpClient下载
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
private async void DownloadByUnityHttpClient()
|
|
|
|
|
|
{
|
|
|
|
|
|
string log = string.Empty;
|
2024-12-13 16:27:20 +08:00
|
|
|
|
DateTime startTime = DateTime.Now;
|
2024-12-13 15:15:19 +08:00
|
|
|
|
DateTime endTime;
|
|
|
|
|
|
|
|
|
|
|
|
CancellationTokenSource cancellationTokenSource = new();
|
|
|
|
|
|
using HttpClient client = new();
|
|
|
|
|
|
Task<HttpResponseMessage> response = client.GetAsync(DOWNLOAD_URL, cancellationTokenSource.Token);
|
|
|
|
|
|
|
|
|
|
|
|
while (!response.IsCompleted)
|
|
|
|
|
|
{
|
|
|
|
|
|
await UniTask.DelayFrame(1);
|
2024-12-13 16:27:20 +08:00
|
|
|
|
endTime = DateTime.Now;
|
2024-12-13 15:15:19 +08:00
|
|
|
|
TimeSpan timeSpan = endTime - startTime;
|
|
|
|
|
|
if (timeSpan.TotalSeconds > timeOutTick)
|
|
|
|
|
|
{
|
|
|
|
|
|
cancellationTokenSource.Cancel();
|
|
|
|
|
|
log = $"{total},类型:{nameof(HttpClient)}, {timeOutTick}s超时,URL:{DOWNLOAD_URL}";
|
2024-12-13 17:09:08 +08:00
|
|
|
|
Debug.LogWarning(log);
|
2024-12-13 15:15:19 +08:00
|
|
|
|
writerHttpClient.WriteLine(log);
|
|
|
|
|
|
writerHttpClient.Flush();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-12-13 16:27:20 +08:00
|
|
|
|
endTime = DateTime.Now;
|
2024-12-13 15:15:19 +08:00
|
|
|
|
if (!response.IsCompletedSuccessfully)
|
|
|
|
|
|
{
|
|
|
|
|
|
log = $"{total},类型:{nameof(HttpClient)}, 开始时间:{startTime},完成时间:{endTime},间隔:{(endTime - startTime).TotalSeconds}秒,是否成功:{false},URL:{DOWNLOAD_URL}";
|
2024-12-13 17:09:08 +08:00
|
|
|
|
Debug.LogError(log);
|
2024-12-13 15:15:19 +08:00
|
|
|
|
writerHttpClient.WriteLine(log);
|
|
|
|
|
|
writerHttpClient.Flush();
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
log = $"{total},类型:{nameof(HttpClient)}, 开始时间:{startTime},完成时间:{endTime},间隔:{(endTime - startTime).TotalSeconds}秒,是否成功:{true},URL:{DOWNLOAD_URL}";
|
|
|
|
|
|
Debug.Log(log);
|
|
|
|
|
|
writerHttpClient.WriteLine(log);
|
|
|
|
|
|
writerHttpClient.Flush();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|