コード例 #1
0
 @Override
 public void cancelAllTasks() {
   for (PipeTask task : queuedTasks) {
     task.cancel0();
   }
   queuedTasks.clear();
 }
コード例 #2
0
 @Override
 public boolean isCurrentlyRunning(int taskId) {
   PipeTask task = runningTasks.get(taskId);
   if (task == null || task.isSync()) {
     return false;
   }
   return false;
 }
コード例 #3
0
 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;
 }
コード例 #4
0
 @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();
     }
   }
 }
コード例 #5
0
 @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;
     }
   }
 }
コード例 #6
0
 @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;
 }
コード例 #7
0
 @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;
 }
コード例 #8
0
  @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;
  }
コード例 #9
0
 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();
 }