/** * CommonLoader - 上传/下载器公共基类 * 提供状态管理、进度计算、速度统计、事件系统等公共功能 */ import EventEmitter from '../utils/EventEmitter'; import { SMHError } from '../utils/ErrorHandler'; import { TaskStatus, IFile, CommonLoaderOptions } from './types'; /** * CommonLoader 抽象基类 * 提供上传/下载器的公共功能 */ export declare abstract class CommonLoader extends EventEmitter { readonly id: string; file: IFile; protected verbose: boolean; state: TaskStatus; message: string; progress: number; loaded: number; speed: number; left_time: number; protected startSize: number; protected lastEmittedProgress: number; protected lastProgressLoaded: number; start_time: number; end_time: number; used_avg_speed: number; used_time_len: number; avg_speed: number; protected pauseFlag: boolean; protected cancelFlag: boolean; error?: SMHError; protected abortController: AbortController; protected tid_speed?: ReturnType; protected speedList: number[]; protected speed_0_count: number; protected task_start_time: number; protected start_done_part_loaded: number; protected readonly PROGRESS_EMIT_STEP = 0.2; protected readonly MAX_SPEED_0_COUNT = 10; protected readonly MAX_RETRY_TIMES = 3; constructor(file: IFile, options?: CommonLoaderOptions); /** * 获取任务类型(子类实现) */ protected abstract getTaskType(): string; /** * 日志输出 */ protected logInfo(...args: any[]): void; protected logWarn(...args: any[]): void; protected logError(...args: any[]): void; /** * 生成唯一任务ID */ protected generateTaskId(): string; /** * 获取checkpoint信息(子类实现) */ abstract getCheckpoint(): TCheckpoint; /** * 等待开始 */ wait(): Promise; /** * 开始任务(子类实现) */ abstract start(): Promise; /** * 取消所有正在进行的 HTTP 请求,并重建控制器供后续使用(恢复场景) */ protected abortRequest(): void; /** * 获取当前的 AbortSignal,供 fetch/axios 请求使用 */ protected get abortSignal(): AbortSignal; /** * 停止(暂停)任务 */ pause(): Promise; /** * 取消任务 */ cancel(): Promise; /** * 开始计算速度 */ protected startCalcSpeed(): void; /** * 停止计算速度 */ protected pauseCalcSpeed(): void; /** * 计算平滑速度(滑动平均) */ protected calcSmoothSpeed(speedList: number[]): number; /** * 计算总平均速度 */ protected calcTotalAvgSpeed(): void; /** * 检查超时 */ protected checkTimeout(): Promise; /** * 更新进度 * @param loaded 当前已处理的总字节数 * @param options 选项 */ protected updateProgress(loaded: number, options?: { immediately?: boolean; init?: boolean; }): void; /** * 改变状态 */ protected changeState(state: TaskStatus, error?: SMHError): Promise; /** * 通知进度 */ protected notifyProgress(state: string, progress: number): void; /** * 处理错误 */ protected handleError(e: Error): Promise; }