mixDownloadOperation.h 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //
  2. // mixDownloadOperation.h
  3. // 双子星云手机
  4. //
  5. // Created by xd h on 2024/6/27.
  6. //
  7. #import <Foundation/Foundation.h>
  8. #import "mixDownloadCacheManager.h"
  9. /** 下载状态*/
  10. typedef enum : NSUInteger {
  11. DownloadStateWaiting = 0, /** 下载等待中 */
  12. DownloadStateDoing, /** 下载中 */
  13. DownloadStateSuspended, /** 下载暂停 */
  14. DownloadStateCompleted, /** 下载完成 */
  15. DownloadStateFailed, /** 下载失败 */
  16. } MixDownloadStateType;
  17. NS_ASSUME_NONNULL_BEGIN
  18. typedef void(^mixReceiveResponseOperation)(NSString *filePath);
  19. typedef void(^mixReceivDataOperation)(NSInteger completeSize,NSInteger expectSize);
  20. typedef void(^mixCompleteOperation)(NSDictionary *respose,NSError *error);
  21. @protocol mixDownloadOperationProtocol <NSObject>
  22. // 供queue管理方法
  23. // 处理响应值
  24. - (void)operateWithResponse:(NSURLResponse *)response;
  25. // 处理接收到的碎片
  26. - (void)operateWithReceivingData:(NSData *)data;
  27. // 处理完成回调
  28. - (void)operateWithComplete:(NSError *)error;
  29. /**
  30. 设置block回调
  31. @param didReceiveResponse 开始下载的回调
  32. @param didReceivData 接收到下载的回调
  33. @param didComplete 下载完成的回调
  34. */
  35. - (void)configCallBacksWithDidReceiveResponse:(mixReceiveResponseOperation)didReceiveResponse
  36. didReceivData:(mixReceivDataOperation)didReceivData
  37. didComplete:(mixCompleteOperation)didComplete;
  38. @end
  39. @interface mixDownloadOperation : NSObject <mixDownloadOperationProtocol>
  40. /** 绑定的标示及task的创建 */
  41. @property (readonly,nonatomic, copy)NSString *url;
  42. /** 下载任务 */
  43. @property (nonatomic,strong)NSURLSessionDataTask *dataTask;
  44. /** 文件句柄 可以记录文件的下载的位置 */
  45. @property (nonatomic,strong) NSFileHandle *handle;
  46. /** 下载的文件总大小 */
  47. @property (nonatomic,assign) int64_t totalSize;
  48. /** 当前下载了多少 */
  49. @property (nonatomic,assign) int64_t currentSize;
  50. /** 当前下载文件名称 */
  51. @property (nonatomic,copy) NSString *fileName;
  52. /** 当前下载文件沙盒全路径 */
  53. @property (nonatomic,copy) NSString *fullPath;
  54. /** 文件下载状态 */
  55. @property (nonatomic,assign) MixDownloadStateType downloadState;
  56. /** 下载完成-时间戳 */
  57. @property (nonatomic,assign) NSInteger timeStamp;
  58. /** 文件类型 */
  59. @property (nonatomic,assign) NSInteger fileType;
  60. /** 是否完成 */
  61. @property (nonatomic, assign) NSInteger isFinished;
  62. // 创建下载操作任务
  63. - (instancetype)initWith:(NSString *)url session:(NSURLSession *)session;
  64. - (NSDictionary *)downLoadInfoWithFinished:(BOOL)finished;
  65. @end
  66. NS_ASSUME_NONNULL_END