下载器

DownloadManager.cs 4.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using TFramework;
  5. using UnityEngine;
  6. namespace TModule.Runtime
  7. {
  8. public class DownloadManager : BaseManager
  9. {
  10. private List<DownloadRoutine> _downloadRoutines = new List<DownloadRoutine>();
  11. private Queue<DownloadFileInfo> downloadFiles = new Queue<DownloadFileInfo>();
  12. /// <summary>
  13. /// 最大下载器数量
  14. /// </summary>
  15. public int m_maxCount = 5;
  16. private void Awake()
  17. {
  18. for (int i = 0; i < m_maxCount; i++)
  19. {
  20. _downloadRoutines.Add(new DownloadRoutine());
  21. }
  22. }
  23. /// <summary>
  24. /// 暂停下载
  25. /// </summary>
  26. /// <param name="url"></param>
  27. /// <param name="savePath"></param>
  28. public void StopDownload(string url, string savePath)
  29. {
  30. _downloadRoutines.Find(p => p.DownLoadUrl == url && p.FileSavePath == savePath)?.StopDownload();
  31. }
  32. /// <summary>
  33. /// 暂停下载
  34. /// </summary>
  35. /// <param name="fileInfo"></param>
  36. public void StopDownload(DownloadFileInfo fileInfo)
  37. {
  38. StopDownload(fileInfo.m_url, fileInfo.m_savePath);
  39. }
  40. /// <summary>
  41. /// 暂停所有下载
  42. /// </summary>
  43. public void StopAllDownload()
  44. {
  45. foreach (var item in _downloadRoutines)
  46. {
  47. if (!item.IsLeisure)
  48. item.StopDownload();
  49. }
  50. }
  51. /// <summary>
  52. /// 开始下载
  53. /// </summary>
  54. /// <param name="url"></param>
  55. /// <param name="savePath"></param>
  56. /// <param name="onProgress"></param>
  57. /// <param name="onOver"></param>
  58. /// <param name="onError"></param>
  59. public void StartDownload(string url,string savePath,Action<float,long,long>onProgress=null,Action onOver=null,Action<string> onError=null)
  60. {
  61. StartDownload(new DownloadFileInfo
  62. {
  63. m_savePath = savePath,
  64. m_url = url,
  65. onErroe = onError,
  66. onOver = onOver,
  67. onProgress = onProgress
  68. });
  69. }
  70. /// <summary>
  71. /// 开始下载
  72. /// </summary>
  73. /// <param name="fileInfo"></param>
  74. public void StartDownload(DownloadFileInfo fileInfo)
  75. {
  76. DownloadRoutine routine = GetLeisureDownloadRoutine();
  77. if (routine == null)
  78. downloadFiles.Enqueue(fileInfo);
  79. else
  80. {
  81. routine.onProgress = fileInfo.onProgress;
  82. routine.onDownloadOver = ()=> { fileInfo.onOver?.Invoke(); CheckIsOver();};
  83. routine.onError = fileInfo.onErroe;
  84. routine.StartDownload(fileInfo.m_url, fileInfo.m_savePath);
  85. }
  86. }
  87. /// <summary>
  88. /// 批量下载
  89. /// </summary>
  90. /// <param name="fileInfos"></param>
  91. public void BatchDownload(IEnumerable<DownloadFileInfo> fileInfos)
  92. {
  93. foreach (var item in fileInfos)
  94. {
  95. StartDownload(item);
  96. }
  97. }
  98. /// <summary>
  99. /// 继续下载
  100. /// </summary>
  101. /// <param name="url"></param>
  102. /// <param name="savePath"></param>
  103. public void ContinueDownload(string url,string savePath)
  104. {
  105. _downloadRoutines.Find(p => p.DownLoadUrl == url && p.FileSavePath == savePath)?.ContinueDownload();
  106. }
  107. /// <summary>
  108. /// 继续下载
  109. /// </summary>
  110. /// <param name="fileInfo"></param>
  111. public void ContinueDownload(DownloadFileInfo fileInfo)
  112. {
  113. ContinueDownload(fileInfo.m_url, fileInfo.m_savePath);
  114. }
  115. /// <summary>
  116. /// 全部继续下载
  117. /// </summary>
  118. public void ContinueAllDownload()
  119. {
  120. foreach (var item in _downloadRoutines)
  121. {
  122. if (!item.IsLeisure && item.IsStop)
  123. item.ContinueDownload();
  124. }
  125. }
  126. private void CheckIsOver()
  127. {
  128. lock(downloadFiles)
  129. {
  130. if (downloadFiles.Count > 0)
  131. {
  132. StartDownload(downloadFiles.Dequeue());
  133. }
  134. }
  135. }
  136. /// <summary>
  137. /// 获取空闲下载器
  138. /// </summary>
  139. /// <returns></returns>
  140. private DownloadRoutine GetLeisureDownloadRoutine()
  141. {
  142. return _downloadRoutines.Find(p => p.IsLeisure);
  143. }
  144. }
  145. }