@Override public void cancelAllTasks() { for (PipeTask task : queuedTasks) { task.cancel0(); } queuedTasks.clear(); }
@Override public boolean isCurrentlyRunning(int taskId) { PipeTask task = runningTasks.get(taskId); if (task == null || task.isSync()) { return false; } return false; }
private PipeTask addTaskToQueue(final PipeTask task, final long delay) { Validate.notNull(task.getOwner(), "Plugin cannot be null"); Validate.notNull(task, "Task cannot be null"); if (!task.getOwner().isEnabled()) { throw new IllegalPluginAccessException("Plugin attempted to register task while disabled"); } task.setNextRun(currentTick + delay); queuedTasks.add(task); return task; }
@Override public void cancelTasks(Plugin plugin) { Iterator<PipeTask> iterator = queuedTasks.iterator(); while (iterator.hasNext()) { PipeTask task = iterator.next(); if (task.getOwner().equals(plugin)) { task.cancel0(); iterator.remove(); } } }
@Override public void cancelTask(int taskId) { Iterator<PipeTask> iterator = queuedTasks.iterator(); while (iterator.hasNext()) { PipeTask task = iterator.next(); if (task.getTaskId() == taskId) { task.cancel0(); iterator.remove(); break; } } }
@Override public boolean isQueued(int taskId) { if (taskId <= 0) { return false; } for (PipeTask task : queuedTasks) { if (task.getTaskId() == taskId) { return task.getPeriod() >= -1; } } PipeTask task = runningTasks.get(taskId); return task != null && task.getPeriod() >= -1; }
@Override public List<BukkitWorker> getActiveWorkers() { ArrayList<BukkitWorker> workers = new ArrayList<BukkitWorker>(); for (final PipeTask taskObj : runningTasks.values()) { if (taskObj.isSync()) { continue; } final PipeAsyncTask task = (PipeAsyncTask) taskObj; synchronized (task.getWorkers()) { workers.addAll(task.getWorkers()); } } return workers; }
@Override public List<BukkitTask> getPendingTasks() { final ArrayList<BukkitTask> pending = new ArrayList<BukkitTask>(); for (PipeTask task : runningTasks.values()) { if (task.getPeriod() >= -1L) { pending.add(task); } } for (PipeTask task : queuedTasks) { if (task.getPeriod() >= -1L && !pending.contains(task)) { pending.add(task); } } return pending; }
public void doTick(int currentTick) { this.currentTick = currentTick; Iterator<PipeTask> iterator = queuedTasks.iterator(); while (iterator.hasNext()) { PipeTask task = iterator.next(); long period = task.getPeriod(); if (period == -2) { iterator.remove(); continue; } if (task.getNextRun() <= currentTick) { runningTasks.put(task.getTaskId(), task); if (period == -1) { iterator.remove(); } else { task.setNextRun(currentTick + task.getPeriod()); } } } for (PipeTask runningTask : runningTasks.values()) { if (runningTask.isSync()) { try { runningTask.run(); } catch (final Throwable throwable) { runningTask .getOwner() .getLogger() .log( Level.WARNING, String.format( "Task #%s for %s generated an exception", runningTask.getTaskId(), runningTask.getOwner().getDescription().getFullName()), throwable); } } else { executor.execute(runningTask); } } runningTasks.clear(); }