123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- namespace TModule.Runtime
- {
- public class DownloadManager : MonoBehaviour
- {
- private List<DownloadRoutine> _downloadRoutines = new List<DownloadRoutine>();
- private Queue<DownloadFileInfo> downloadFiles = new Queue<DownloadFileInfo>();
- /// <summary>
- /// 最大下载器数量
- /// </summary>
- public int m_maxCount = 5;
- private void Awake()
- {
- for (int i = 0; i < m_maxCount; i++)
- {
- _downloadRoutines.Add(new DownloadRoutine());
- }
- }
- /// <summary>
- /// 暂停下载
- /// </summary>
- /// <param name="url"></param>
- /// <param name="savePath"></param>
- public void StopDownload(string url, string savePath)
- {
- _downloadRoutines.Find(p => p.DownLoadUrl == url && p.FileSavePath == savePath)?.StopDownload();
- }
- /// <summary>
- /// 暂停下载
- /// </summary>
- /// <param name="fileInfo"></param>
- public void StopDownload(DownloadFileInfo fileInfo)
- {
- StopDownload(fileInfo.m_url, fileInfo.m_savePath);
- }
- /// <summary>
- /// 暂停所有下载
- /// </summary>
- public void StopAllDownload()
- {
- foreach (var item in _downloadRoutines)
- {
- if (!item.IsLeisure)
- item.StopDownload();
- }
- }
- /// <summary>
- /// 开始下载
- /// </summary>
- /// <param name="url"></param>
- /// <param name="savePath"></param>
- /// <param name="onProgress"></param>
- /// <param name="onOver"></param>
- /// <param name="onError"></param>
- public void StartDownload(string url,string savePath,Action<float,long,long>onProgress=null,Action onOver=null,Action<string> onError=null)
- {
- StartDownload(new DownloadFileInfo
- {
- m_savePath = savePath,
- m_url = url,
- onErroe = onError,
- onOver = onOver,
- onProgress = onProgress
- });
- }
- /// <summary>
- /// 开始下载
- /// </summary>
- /// <param name="fileInfo"></param>
- public void StartDownload(DownloadFileInfo fileInfo)
- {
- DownloadRoutine routine = GetLeisureDownloadRoutine();
- if (routine == null)
- downloadFiles.Enqueue(fileInfo);
- else
- {
- routine.onProgress = fileInfo.onProgress;
- routine.onDownloadOver = ()=> { fileInfo.onOver?.Invoke(); CheckIsOver();};
- routine.onError = fileInfo.onErroe;
- routine.StartDownload(fileInfo.m_url, fileInfo.m_savePath);
- }
- }
- /// <summary>
- /// 批量下载
- /// </summary>
- /// <param name="fileInfos"></param>
- public void BatchDownload(IEnumerable<DownloadFileInfo> fileInfos)
- {
- foreach (var item in fileInfos)
- {
- StartDownload(item);
- }
- }
- /// <summary>
- /// 继续下载
- /// </summary>
- /// <param name="url"></param>
- /// <param name="savePath"></param>
- public void ContinueDownload(string url,string savePath)
- {
- _downloadRoutines.Find(p => p.DownLoadUrl == url && p.FileSavePath == savePath)?.ContinueDownload();
- }
- /// <summary>
- /// 继续下载
- /// </summary>
- /// <param name="fileInfo"></param>
- public void ContinueDownload(DownloadFileInfo fileInfo)
- {
- ContinueDownload(fileInfo.m_url, fileInfo.m_savePath);
- }
- /// <summary>
- /// 全部继续下载
- /// </summary>
- public void ContinueAllDownload()
- {
- foreach (var item in _downloadRoutines)
- {
- if (!item.IsLeisure && item.IsStop)
- item.ContinueDownload();
- }
- }
- private void CheckIsOver()
- {
- lock(downloadFiles)
- {
- if (downloadFiles.Count > 0)
- {
- StartDownload(downloadFiles.Dequeue());
- }
- }
- }
- /// <summary>
- /// 获取空闲下载器
- /// </summary>
- /// <returns></returns>
- private DownloadRoutine GetLeisureDownloadRoutine()
- {
- return _downloadRoutines.Find(p => p.IsLeisure);
- }
- }
- }
|