Skip to content

Commit 80afcec

Browse files
author
DESKTOP-UBV38B7\codingworks
committed
增加下载进度的事件,增加资源版本检查步骤
1 parent 861ed51 commit 80afcec

File tree

6 files changed

+128
-18
lines changed

6 files changed

+128
-18
lines changed

Assets/Game/Scripts/State/CheckResourceState.cs

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,29 @@ public class CheckResourceState : GameState
2525
//远程版本信息
2626
private AssetBundleVersionInfo _remoteVersion;
2727

28+
//资源更新完成
29+
private bool _resourceUpdateDone;
30+
//需要更新的资源
31+
private Dictionary<string, string> _downloadResouces;
2832
#endregion
2933

3034
#region 重写函数
3135

36+
public override void OnInit()
37+
{
38+
base.OnInit();
39+
40+
_downloadResouces = new Dictionary<string, string>();
41+
}
42+
3243
public override void OnEnter(params object[] parameters)
3344
{
3445
base.OnEnter(parameters);
3546
GameMode.Event.AddListener<HttpReadTextSuccessEventArgs>(OnHttpReadTextSuccess);
3647
GameMode.Event.AddListener<HttpReadTextFaileEventArgs>(OnHttpReadTextFaile);
3748
GameMode.Event.AddListener<DownloadSuccessEventArgs>(OnDownloadSuccess);
3849
GameMode.Event.AddListener<DownloadFaileEventArgs>(OnDownloadFaile);
50+
GameMode.Event.AddListener<DownloadProgressEventArgs>(OnDownloadProgress);
3951

4052
_localVersion=LoadLocalVersion();
4153
LoadRemoteVersion();
@@ -48,26 +60,23 @@ public override void OnExit()
4860
GameMode.Event.RemoveListener<HttpReadTextFaileEventArgs>(OnHttpReadTextFaile);
4961
GameMode.Event.RemoveListener<DownloadSuccessEventArgs>(OnDownloadSuccess);
5062
GameMode.Event.RemoveListener<DownloadFaileEventArgs>(OnDownloadFaile);
63+
GameMode.Event.RemoveListener<DownloadProgressEventArgs>(OnDownloadProgress);
64+
5165
base.OnExit();
5266
}
5367

5468
public override void OnFixedUpdate()
5569
{
5670
base.OnFixedUpdate();
5771
}
58-
59-
public override void OnInit()
60-
{
61-
base.OnInit();
62-
}
63-
72+
6473
public override void OnUpdate()
6574
{
6675
base.OnUpdate();
67-
//更新完资源
68-
//...
69-
//切换到加载界面
70-
// ChangeState<LoadResourceState>();
76+
77+
//更新资源--切换到加载界面
78+
if (_resourceUpdateDone&& _downloadResouces.Count==0)
79+
ChangeState<LoadResourceState>();
7180
}
7281

7382
#endregion
@@ -83,21 +92,44 @@ private void OnHttpReadTextSuccess(object sender, IEventArgs e)
8392
_remoteVersion = JsonUtility.FromJson<AssetBundleVersionInfo>(ne.Content);
8493
//如果资源版本不一样 则更新资源
8594
if (!CompareVersion())
95+
{
96+
//更新资源
8697
UpdateResource();
98+
//下载资源
99+
DownloadResource();
100+
}
101+
102+
//资源更新完成
103+
_resourceUpdateDone = true;
87104
}
88105
}
89106
//http文件读取错误
90107
private void OnHttpReadTextFaile(object sender, IEventArgs e)
91108
{
109+
HttpReadTextFaileEventArgs ne = (HttpReadTextFaileEventArgs) e;
110+
if (ne != null)
111+
Debug.LogError(ne.Error);
92112
}
93113
//加载文件成功
94114
private void OnDownloadSuccess(object sender, IEventArgs e)
95115
{
116+
DownloadSuccessEventArgs ne = (DownloadSuccessEventArgs) e;
117+
if (_downloadResouces.ContainsKey(ne.RemoteUrl))
118+
_downloadResouces.Remove(ne.RemoteUrl);
96119
}
97120
//下载文件失败
98121
private void OnDownloadFaile(object sender, IEventArgs e)
99122
{
100-
123+
DownloadFaileEventArgs ne = (DownloadFaileEventArgs)e;
124+
if (ne != null)
125+
Debug.LogError(ne.Error);
126+
}
127+
//下载进度
128+
private void OnDownloadProgress(object sender, IEventArgs e)
129+
{
130+
DownloadProgressEventArgs ne = (DownloadProgressEventArgs) e;
131+
Debug.Log(
132+
$"path:{ne.LocalPath} progress:{ne.DownloadProgress} bytes:{ne.DownloadBytes} speed:{ne.DownloadSpeed}");
101133
}
102134

103135
#endregion
@@ -144,7 +176,19 @@ private void UpdateResource()
144176
string localDir = localPath.Substring(0, index);
145177
if (!Directory.Exists(localDir))
146178
Directory.CreateDirectory(localDir);
147-
GameMode.WebRequest.StartDownload(remoteUrl, localPath);
179+
180+
//添加需要下载的资源
181+
_downloadResouces.Add(remoteUrl, localPath);
182+
}
183+
184+
}
185+
186+
//下载资源
187+
private void DownloadResource()
188+
{
189+
foreach (var item in _downloadResouces)
190+
{
191+
GameMode.WebRequest.StartDownload(item.Key, item.Value);
148192
}
149193
}
150194

Assets/GameFramework/WebRequest/IWebDownloadHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ namespace GameFramework.Taurus
1515
{
1616
public interface IWebDownloadHelper
1717
{
18-
void StartDownload(string remoteUrl, string localPath,Action<string,string,bool,string> result);
18+
void StartDownload(string remoteUrl, string localPath,Action<string,string,bool,string> result,Action<string,string,ulong,float,float> progress);
1919
}
2020
}

Assets/GameFramework/WebRequest/WebDownloadMonoHelper.cs

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,30 @@ namespace GameFramework.Taurus
1717
{
1818
public sealed class WebDownloadMonoHelper : MonoBehaviour,IWebDownloadHelper
1919
{
20-
public void StartDownload(string remoteUrl, string localPath, Action<string, string, bool, string> result)
20+
public void StartDownload(string remoteUrl, string localPath, Action<string, string, bool, string> result, Action<string, string, ulong, float,float> progress)
2121
{
22-
StartCoroutine(UnityWebStartDownload(remoteUrl,localPath,result));
22+
StartCoroutine(UnityWebStartDownload(remoteUrl,localPath,result,progress));
2323
}
2424

25-
IEnumerator UnityWebStartDownload(string remoteUrl, string localPath, Action<string, string, bool, string> result)
25+
IEnumerator UnityWebStartDownload(string remoteUrl, string localPath, Action<string, string, bool, string> result, Action<string, string, ulong, float,float> progress)
2626
{
27+
//断点续传写不写呢...
28+
//纠结------------------
29+
2730
UnityWebRequest request = UnityWebRequest.Get(remoteUrl);
2831
request.downloadHandler = new DownloadHandlerFile(localPath);
29-
yield return request.SendWebRequest();
32+
//yield return request.SendWebRequest();
33+
request.SendWebRequest();
34+
35+
long lastTicks = DateTime.Now.Ticks;
36+
37+
while (!request.isDone)
38+
{
39+
float seconds = (DateTime.Now.Ticks - lastTicks)/ 10000000.0f;
40+
progress.Invoke(remoteUrl, localPath, request.downloadedBytes, request.downloadProgress, seconds);
41+
yield return null;
42+
}
43+
3044
if (request.isNetworkError || request.isHttpError)
3145
result.Invoke(remoteUrl, localPath, false,
3246
"NetworkError:" + request.isNetworkError + " HttpError:" + request.isHttpError);

Assets/GameFramework/WebRequest/WebRequestEventArgs.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,32 @@ public class DownloadFaileEventArgs : GameEventArgs<DownloadFaileEventArgs>
6969
public string Error;
7070
}
7171

72+
public class DownloadProgressEventArgs : GameEventArgs<DownloadProgressEventArgs>
73+
{
74+
/// <summary>
75+
/// 远程的路径
76+
/// </summary>
77+
public string RemoteUrl;
78+
/// <summary>
79+
/// 本地的路径
80+
/// </summary>
81+
public string LocalPath;
82+
/// <summary>
83+
/// 下载的字节长度
84+
/// </summary>
85+
public ulong DownloadBytes;
86+
/// <summary>
87+
/// 下载的进度 0 ~ 1
88+
/// </summary>
89+
public float DownloadProgress;
90+
/// <summary>
91+
/// 下载消耗的时间 单位s
92+
/// </summary>
93+
public float DownloadSeconds;
94+
/// <summary>
95+
/// 下载速度 KB/s
96+
/// </summary>
97+
public float DownloadSpeed;
98+
}
99+
72100
}

Assets/GameFramework/WebRequest/WebRequestManager.cs

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ public sealed class WebRequestManager : GameFrameworkModule
3232
private IWebDownloadHelper _webDownloadHelper;
3333
private DownloadSuccessEventArgs _downloadSuccess;
3434
private DownloadFaileEventArgs _downloadFaile;
35+
private DownloadProgressEventArgs _downloadProgress;
3536
#endregion
3637

3738
public WebRequestManager()
@@ -41,6 +42,7 @@ public WebRequestManager()
4142
_httpReadTextFaile = new HttpReadTextFaileEventArgs();
4243
_downloadSuccess = new DownloadSuccessEventArgs();
4344
_downloadFaile = new DownloadFaileEventArgs();
45+
_downloadProgress = new DownloadProgressEventArgs();
4446
}
4547

4648
#region 外部接口
@@ -78,7 +80,7 @@ public void ReadHttpText(string url)
7880
/// <param name="localPath"></param>
7981
public void StartDownload(string remoteUrl, string localPath)
8082
{
81-
_webDownloadHelper?.StartDownload(remoteUrl, localPath, StartDownloadCallback);
83+
_webDownloadHelper?.StartDownload(remoteUrl, localPath, StartDownloadCallback,StartDownloadProgress);
8284
}
8385

8486
#endregion
@@ -136,6 +138,26 @@ private void StartDownloadCallback(string remoteUrl, string localPath, bool resu
136138
}
137139
}
138140

141+
/// <summary>
142+
/// 下载的进度
143+
/// </summary>
144+
/// <param name="remoteUrl"></param>
145+
/// <param name="localPath"></param>
146+
/// <param name="dataLength"></param>
147+
/// <param name="progess"></param>
148+
/// <param name="seconds"></param>
149+
private void StartDownloadProgress(string remoteUrl, string localPath, ulong dataLength, float progess,float seconds)
150+
{
151+
_downloadProgress.RemoteUrl = remoteUrl;
152+
_downloadProgress.LocalPath = localPath;
153+
_downloadProgress.DownloadBytes = dataLength;
154+
_downloadProgress.DownloadProgress = progess;
155+
_downloadProgress.DownloadSeconds = seconds;
156+
_downloadProgress.DownloadSpeed =
157+
dataLength == 0.0f ? dataLength : dataLength / 1024.0f / seconds;
158+
_event.Trigger(this, _downloadProgress);
159+
}
160+
139161
#endregion
140162

141163
}

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,8 @@ GameFrameworkMode.GetModule<EventManager>().AddListener<HttpReadTextFaileEventAr
244244
GameFrameworkMode.GetModule<EventManager>().AddListener<DownloadSuccessEventArgs>(OnDownloadSuccess);
245245
//文件下载失败
246246
GameFrameworkMode.GetModule<EventManager>().AddListener<DownloadFaileEventArgs>(OnDownloadFaile);
247+
//文件下载进度
248+
GameFrameworkMode.GetModule<EventManager>().AddListener<DownloadProgressEventArgs>(OnDownloadProgress);
247249
```
248250

249251
---

0 commit comments

Comments
 (0)