ConsoleScheduler.java 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package me.hammerle.snuviscript;
  2. import java.util.ArrayList;
  3. import me.hammerle.snuviscript.code.ISnuviScheduler;
  4. public class ConsoleScheduler implements ISnuviScheduler
  5. {
  6. private class Task
  7. {
  8. private Runnable r;
  9. private long delay;
  10. public Task(Runnable r, long delay)
  11. {
  12. this.r = r;
  13. this.delay = delay;
  14. }
  15. public void tick()
  16. {
  17. delay--;
  18. if(delay <= 0 && r != null)
  19. {
  20. r.run();
  21. r = null;
  22. activeTasks--;
  23. }
  24. }
  25. public void set(Runnable r, long delay)
  26. {
  27. this.r = r;
  28. this.delay = delay;
  29. }
  30. public boolean isFree()
  31. {
  32. return r == null;
  33. }
  34. }
  35. private int activeTasks = 0;
  36. private final ArrayList<Task> tasks = new ArrayList<>();
  37. @Override
  38. public int scheduleTask(Runnable r, long delay)
  39. {
  40. activeTasks++;
  41. for(int i = 0; i < tasks.size(); i++)
  42. {
  43. Task t = tasks.get(i);
  44. if(t.isFree())
  45. {
  46. t.set(r, delay);
  47. return -1;
  48. }
  49. }
  50. tasks.add(new Task(r, delay));
  51. return -1;
  52. }
  53. public void tick()
  54. {
  55. while(activeTasks > 0)
  56. {
  57. for(int i = 0; i < tasks.size(); i++)
  58. {
  59. tasks.get(i).tick();
  60. }
  61. }
  62. }
  63. }