All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.schoolwow.download.module.task.flow.finish.DownloadFinishFlow Maven / Gradle / Ivy

package cn.schoolwow.download.module.task.flow.finish;

import cn.schoolwow.download.domain.pool.PoolConfig;
import cn.schoolwow.download.domain.progress.DownloadProgress;
import cn.schoolwow.download.domain.task.DownloadContext;
import cn.schoolwow.download.domain.task.DownloadTask;
import cn.schoolwow.download.module.pool.domain.PoolContext;
import cn.schoolwow.quickflow.domain.FlowContext;
import cn.schoolwow.quickflow.flow.BusinessFlow;

import java.util.concurrent.CountDownLatch;

public class DownloadFinishFlow implements BusinessFlow {
    @Override
    public void executeBusinessFlow(FlowContext flowContext) throws Exception {
        PoolContext poolContext = flowContext.checkInstanceData(PoolContext.class);
        PoolConfig poolConfig = flowContext.checkInstanceData(PoolConfig.class);
        DownloadTask downloadTask = flowContext.checkInstanceData(DownloadTask.class);
        DownloadContext downloadContext = flowContext.checkInstanceData(DownloadContext.class);
        DownloadProgress downloadProgress = flowContext.checkInstanceData(DownloadProgress.class);
        CountDownLatch countDownLatch = flowContext.getInstanceData(CountDownLatch.class);

        downloadProgress.state = "下载完成";
        //执行下载完成事件
        if(null!=downloadTask.downloadTaskListener){
            flowContext.remark("执行下载任务完成事件");
            downloadTask.downloadTaskListener.downloadFinished(downloadContext);
        }
        if(null!=poolConfig.downloadPoolListener){
            flowContext.remark("执行下载池任务完成事件");
            poolConfig.downloadPoolListener.downloadFinished(downloadContext);
        }
        if(!Thread.currentThread().isInterrupted()){
            //从下载进度表移除
            synchronized (poolContext.downloadProgressList){
                poolContext.downloadProgressList.removeIf(downloadProgress1 -> downloadProgress1.id == downloadProgress.id);
            }
        }
        if(null==countDownLatch){
            //移除任务句柄
            synchronized (poolContext.downloadTaskFutureMap){
                poolContext.downloadTaskFutureMap.remove(downloadProgress.id);
            }
        }else{
            //批量下载任务线程同步
            countDownLatch.countDown();
        }
    }

    @Override
    public String name() {
        return "下载任务完成";
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy