From faff4c62a9312dfd08b7f4412d6ff591dd1eb312 Mon Sep 17 00:00:00 2001 From: yukihane Date: Sat, 27 Aug 2011 14:55:49 +0900 Subject: [PATCH] =?utf8?q?worker=E7=A9=BA=E3=81=AE=E3=83=AA=E3=82=B9?= =?utf8?q?=E3=83=8A=E3=81=AFmanager=E3=81=A7=E4=B8=80=E6=97=A6=E3=83=88?= =?utf8?q?=E3=83=A9=E3=83=83=E3=83=97=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../src/yukihane/inqubus/manager/TaskKind.java | 20 ++++++++ .../src/yukihane/inqubus/manager/TaskManage.java | 54 ++++++++++++++++++++-- .../inqubus/manager/TaskManageListener.java | 10 ++++ .../src/yukihane/inqubus/manager/TaskStatus.java | 20 ++++++++ 4 files changed, 100 insertions(+), 4 deletions(-) create mode 100644 frontend/src/yukihane/inqubus/manager/TaskKind.java create mode 100644 frontend/src/yukihane/inqubus/manager/TaskManageListener.java create mode 100644 frontend/src/yukihane/inqubus/manager/TaskStatus.java diff --git a/frontend/src/yukihane/inqubus/manager/TaskKind.java b/frontend/src/yukihane/inqubus/manager/TaskKind.java new file mode 100644 index 0000000..8cebdbf --- /dev/null +++ b/frontend/src/yukihane/inqubus/manager/TaskKind.java @@ -0,0 +1,20 @@ +package yukihane.inqubus.manager; + +/** + * + * @author yuki + */ +public enum TaskKind { + + DOWNLOAD("ダウンロード"), CONVERT("変換"); + private final String text; + + private TaskKind(String text) { + this.text = text; + } + + @Override + public String toString() { + return text; + } +} diff --git a/frontend/src/yukihane/inqubus/manager/TaskManage.java b/frontend/src/yukihane/inqubus/manager/TaskManage.java index d38c3ce..70edbab 100644 --- a/frontend/src/yukihane/inqubus/manager/TaskManage.java +++ b/frontend/src/yukihane/inqubus/manager/TaskManage.java @@ -5,15 +5,16 @@ import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; -import java.util.concurrent.FutureTask; +import saccubus.worker.WorkerListener; import saccubus.worker.convert.Convert; +import saccubus.worker.convert.ConvertProgress; import saccubus.worker.convert.ConvertResult; import saccubus.worker.download.Download; +import saccubus.worker.download.DownloadProgress; import saccubus.worker.download.DownloadResult; import saccubus.worker.profile.ConvertProfile; import saccubus.worker.profile.DownloadProfile; - /** * * @author yuki @@ -24,10 +25,20 @@ public class TaskManage { private final ExecutorService convertExecutorService; private final Map> downloadTargets = new HashMap<>(); private final Map> convertTargets = new HashMap<>(); + private final TaskManageListener clientListner; + + public TaskManage() { + this(1, 1, null); + } public TaskManage(int maxDownload, int maxConvert) { + this(maxDownload, maxConvert, null); + } + + public TaskManage(int maxDownload, int maxConvert, TaskManageListener listener) { downloadExecutorService = Executors.newFixedThreadPool(maxDownload); convertExecutorService = Executors.newFixedThreadPool(maxConvert); + this.clientListner = listener; } public synchronized boolean add(Request request) { @@ -35,21 +46,56 @@ public class TaskManage { final ConvertProfile cp = request.getConvertProfile(); if (dp != null && !dp.getVideoProfile().isDownload() && !dp.getCommentProfile().isDownload()) { final Download task = new Download(dp, request.getVideoId(), - request.getDownloadProgressListener()); + new DownloadListener(request.getRowId())); final Future future = downloadExecutorService.submit(task); downloadTargets.put(request.getRowId(), new ManageTarget<>(request, future)); return true; } else if (cp != null && cp.isConvert()) { final Convert task = new Convert(cp, dp.getVideoProfile().getLocalFile(), dp.getCommentProfile(). - getLocalFile(), request.getConvertProgressListener()); + getLocalFile(), new ConvertListener(request.getRowId())); final Future future = convertExecutorService.submit(task); convertTargets.put(request.getRowId(), new ManageTarget<>(request, future)); return true; } return false; } + + private class DownloadListener implements WorkerListener { + + private final int rowId; + + private DownloadListener(int rowId) { + this.rowId = rowId; + } + + @Override + public void process(DownloadProgress progress) { + if (clientListner != null) { + // TODO + clientListner.process(rowId, TaskKind.DOWNLOAD, TaskStatus.DOING, 0.0, ""); + } + } + } + + private class ConvertListener implements WorkerListener { + + private final int id; + + private ConvertListener(int id) { + this.id = id; + } + + @Override + public void process(ConvertProgress progress) { + if (clientListner != null) { + // TODO + clientListner.process(id, TaskKind.CONVERT, TaskStatus.DOING, 0.0, ""); + } + } + } } + class ManageTarget { private final Request request; diff --git a/frontend/src/yukihane/inqubus/manager/TaskManageListener.java b/frontend/src/yukihane/inqubus/manager/TaskManageListener.java new file mode 100644 index 0000000..7b58817 --- /dev/null +++ b/frontend/src/yukihane/inqubus/manager/TaskManageListener.java @@ -0,0 +1,10 @@ +package yukihane.inqubus.manager; + +/** + * + * @author yuki + */ +public interface TaskManageListener { + + void process(int id, TaskKind kind, TaskStatus status, double percentage, String message); +} diff --git a/frontend/src/yukihane/inqubus/manager/TaskStatus.java b/frontend/src/yukihane/inqubus/manager/TaskStatus.java new file mode 100644 index 0000000..7a7735f --- /dev/null +++ b/frontend/src/yukihane/inqubus/manager/TaskStatus.java @@ -0,0 +1,20 @@ +package yukihane.inqubus.manager; + +/** + * + * @author yuki + */ +public enum TaskStatus { + + READY("待機"), DOING("実行"), DONE("完了"); + private final String text; + + private TaskStatus(String text) { + this.text = text; + } + + @Override + public String toString() { + return text; + } +} -- 2.11.0