
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