diff --git a/src/main/java/org/hydev/hyritone/task/Task.java b/src/main/java/org/hydev/hyritone/task/Task.java new file mode 100644 index 00000000..c19982a6 --- /dev/null +++ b/src/main/java/org/hydev/hyritone/task/Task.java @@ -0,0 +1,27 @@ +package org.hydev.hyritone.task; + +/** + * A task waiting to be executed. + *
+ * Class created by the HyDEV Team on 2020-01-24! + * + * @author HyDEV Team (https://github.com/HyDevelop) + * @author Hykilpikonna (https://github.com/hykilpikonna) + * @author Vanilla (https://github.com/VergeDX) + * @since 2020-01-24 18:06 + */ +public interface Task +{ + /** + * Execute the task + */ + void execute(TaskRunState state); + + /** + * Stop the task + */ + default void stop() + { + // Default nothing to do + } +} diff --git a/src/main/java/org/hydev/hyritone/task/TaskList.java b/src/main/java/org/hydev/hyritone/task/TaskList.java new file mode 100644 index 00000000..e37122ef --- /dev/null +++ b/src/main/java/org/hydev/hyritone/task/TaskList.java @@ -0,0 +1,28 @@ +package org.hydev.hyritone.task; + +import lombok.AllArgsConstructor; + +import java.util.ArrayList; +import java.util.Collections; + +/** + * Instances of this class contains lists of tasks to be executed in order. + *
+ * Class created by the HyDEV Team on 2020-01-24!
+ *
+ * @author HyDEV Team (https://github.com/HyDevelop)
+ * @author Hykilpikonna (https://github.com/hykilpikonna)
+ * @author Vanilla (https://github.com/VergeDX)
+ * @since 2020-01-24 18:05
+ */
+@AllArgsConstructor
+public class TaskList extends ArrayList
+ * Class created by the HyDEV Team on 2020-01-24!
+ *
+ * @author HyDEV Team (https://github.com/HyDevelop)
+ * @author Hykilpikonna (https://github.com/hykilpikonna)
+ * @author Vanilla (https://github.com/VergeDX)
+ * @since 2020-01-24 19:03
+ */
+@Getter
+public class TaskManager
+{
+ private TaskRunState runState = null;
+
+ /**
+ * Run a task list
+ *
+ * @param list Task list
+ * @return Successfully started or not
+ */
+ public boolean run(TaskList list)
+ {
+ // Check already started
+ if (runState != null) return false;
+
+ // Reset values
+ runState = new TaskRunState(null, list, 0);
+
+ // Create thread
+ runState.thread = new Thread(() ->
+ {
+ // Execute step by step
+ while (runState.step < list.size())
+ {
+ list.get(runState.step).execute(runState);
+ runState.step++;
+ }
+
+ // Finished
+ stop();
+ }, "Hyritone Task");
+
+ // Start async
+ runState.thread.start();
+
+ // Success
+ return true;
+ }
+
+ /**
+ * Stop the task list
+ */
+ public void stop()
+ {
+ // Not started
+ if (runState == null) return;
+
+ // Stop thread
+ runState.thread.interrupt();
+
+ // Stop task
+ if (runState.getStep() < runState.getTaskList().size())
+ {
+ runState.getTaskList().get(runState.getStep()).stop();
+ }
+
+ runState = null;
+ }
+
+ // TODO: pause
+}
diff --git a/src/main/java/org/hydev/hyritone/task/TaskPresets.java b/src/main/java/org/hydev/hyritone/task/TaskPresets.java
new file mode 100644
index 00000000..7c2c92d1
--- /dev/null
+++ b/src/main/java/org/hydev/hyritone/task/TaskPresets.java
@@ -0,0 +1,98 @@
+package org.hydev.hyritone.task;
+
+import lombok.SneakyThrows;
+import org.apache.commons.io.FileUtils;
+import org.hydev.hyritone.Main;
+
+import javax.script.ScriptException;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileVisitOption;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.hydev.hyritone.utils.ScriptUtils.getEngine;
+
+/**
+ * This class contains preset tasks
+ * TODO: Make a UI for task list!
+ *
+ * Class created by the HyDEV Team on 2020-01-24!
+ *
+ * @author HyDEV Team (https://github.com/HyDevelop)
+ * @author Hykilpikonna (https://github.com/hykilpikonna)
+ * @author Vanilla (https://github.com/VergeDX)
+ * @since 2020-01-24 18:23
+ */
+public class TaskPresets
+{
+ // Map
+ * Class created by the HyDEV Team on 2020-01-24!
+ *
+ * @author HyDEV Team (https://github.com/HyDevelop)
+ * @author Hykilpikonna (https://github.com/hykilpikonna)
+ * @author Vanilla (https://github.com/VergeDX)
+ * @since 2020-01-24 20:38
+ */
+@Data
+@AllArgsConstructor
+public class TaskRunState
+{
+ public Thread thread;
+ public TaskList taskList;
+ public int step;
+
+ @Override
+ public String toString()
+ {
+ return "Task " + thread.getId() + " is executing step " + step + " of " + taskList.size() + " " +
+ "| Current Task: " + taskList.get(step).getClass().getSimpleName();
+ }
+}