FileDownloadSystem.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using ThirdParty.DownloadSystem;
  5. using UnityEngine;
  6. using UnityEngine.Networking;
  7. public class FileDownloadSystem
  8. {
  9. public static FileDownloadSystem Instance
  10. {
  11. get
  12. {
  13. if (_instance == null)
  14. {
  15. _instance = new FileDownloadSystem();
  16. }
  17. return _instance;
  18. }
  19. }
  20. private static FileDownloadSystem _instance;
  21. public List<HttpDownloadBasic> HttpDownloadBasics = new List<HttpDownloadBasic>();
  22. private int _maxDownloadCount = 18;
  23. private List<UnityWebHttpDownload> _awitDow = new List<UnityWebHttpDownload>();
  24. private List<DownLoadHanderGroup> _handerGroups = new List<DownLoadHanderGroup>();
  25. public List<ICheckUpdate> CheckUpdateList = new List<ICheckUpdate>();
  26. public DownloadHander DownloadFile(DownloadFileData downloadFileData)
  27. {
  28. UnityWebHttpDownload httpDownload = new UnityWebHttpDownload();
  29. DownloadHander downloadHander = new DownloadHander();
  30. httpDownload.Init(downloadFileData, downloadHander);
  31. downloadHander.HttpDownloadBasic = httpDownload;
  32. if (HttpDownloadBasics.Count < _maxDownloadCount)
  33. {
  34. StartDownload(httpDownload);
  35. }
  36. else
  37. {
  38. _awitDow.Add(httpDownload);
  39. }
  40. return downloadHander;
  41. }
  42. public void AddHanderGroup(DownLoadHanderGroup downLoadHanderGroup)
  43. {
  44. _handerGroups.Add(downLoadHanderGroup);
  45. }
  46. public void RemoveHanderGroup(DownLoadHanderGroup downLoadHanderGroup)
  47. {
  48. _handerGroups.Remove(downLoadHanderGroup);
  49. }
  50. private void StartDownload(UnityWebHttpDownload httpDownload)
  51. {
  52. httpDownload.StartDown();
  53. HttpDownloadBasics.Add(httpDownload);
  54. }
  55. public void Update()
  56. {
  57. try
  58. {
  59. for (int i = 0; i < HttpDownloadBasics.Count; i++)
  60. {
  61. HttpDownloadBasics[i].Update();
  62. if (HttpDownloadBasics[i].AllFinish())
  63. {
  64. // if (HttpDownloadBasics[i].Result() != UnityWebRequest.Result.Success)
  65. // {
  66. // Debug.Log("多次下载失败");
  67. // HttpDownloadBasics[i].maxCount = 2;
  68. // _awitDow.Add(HttpDownloadBasics[i] as UnityWebHttpDownload);
  69. // }
  70. HttpDownloadBasics.RemoveAt(i);
  71. i--;
  72. }
  73. }
  74. if (_awitDow.Count > 0 && HttpDownloadBasics.Count < _maxDownloadCount)
  75. {
  76. for (int i = 0; i < _awitDow.Count; i++)
  77. {
  78. if (HttpDownloadBasics.Count < _maxDownloadCount)
  79. {
  80. UnityWebHttpDownload download = _awitDow[i];
  81. StartDownload(download);
  82. _awitDow.RemoveAt(i);
  83. i--;
  84. }
  85. else
  86. {
  87. break;
  88. }
  89. }
  90. }
  91. for (int i = 0; i < _handerGroups.Count; i++)
  92. {
  93. _handerGroups[i].Update();
  94. }
  95. for (int i = 0; i < CheckUpdateList.Count; i++)
  96. {
  97. CheckUpdateList[i].CheckUpdate();
  98. }
  99. }
  100. catch (Exception e)
  101. {
  102. Debug.LogError(e);
  103. }
  104. }
  105. public void AddCheckUpdate(ICheckUpdate checkUpdate)
  106. {
  107. lock (CheckUpdateList)
  108. {
  109. CheckUpdateList.Add(checkUpdate);
  110. }
  111. }
  112. public void RemvoeCheckUpdate(ICheckUpdate checkUpdate)
  113. {
  114. lock (CheckUpdateList)
  115. {
  116. CheckUpdateList.Remove(checkUpdate);
  117. }
  118. }
  119. }