Added repeating tasks to TaskQueue
This commit is contained in:
parent
0a8db1cd02
commit
bfd5c02b0c
@ -25,6 +25,14 @@ public class RenderTaskQueue {
|
||||
private static final TaskQueue HANDLER =
|
||||
new TaskQueue(GraphicsInterface::isRenderThread);
|
||||
|
||||
public static void schedule(Runnable task) {
|
||||
HANDLER.schedule(task);
|
||||
}
|
||||
|
||||
public static void removeScheduled(Runnable task) {
|
||||
HANDLER.removeScheduled(task);
|
||||
}
|
||||
|
||||
public static void invokeLater(Runnable task) {
|
||||
HANDLER.invokeLater(task);
|
||||
}
|
||||
|
@ -17,6 +17,7 @@
|
||||
*******************************************************************************/
|
||||
package ru.windcorp.progressia.common.util;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
@ -29,12 +30,22 @@ import ru.windcorp.jputil.functions.ThrowingRunnable;
|
||||
public class TaskQueue {
|
||||
|
||||
private final Queue<Runnable> queue = new ConcurrentLinkedQueue<>();
|
||||
private final Collection<Runnable> repeating = new ConcurrentLinkedQueue<>();
|
||||
|
||||
private final BooleanSupplier runNow;
|
||||
|
||||
public TaskQueue(BooleanSupplier runNow) {
|
||||
this.runNow = runNow;
|
||||
}
|
||||
|
||||
public void schedule(Runnable task) {
|
||||
repeating.add(task);
|
||||
}
|
||||
|
||||
public void removeScheduled(Runnable task) {
|
||||
repeating.remove(task);
|
||||
}
|
||||
|
||||
public void invokeLater(Runnable task) {
|
||||
queue.add(task);
|
||||
}
|
||||
@ -106,6 +117,10 @@ public class TaskQueue {
|
||||
tasks.next().run();
|
||||
tasks.remove();
|
||||
}
|
||||
|
||||
for (Runnable task : repeating) {
|
||||
task.run();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,8 +1,5 @@
|
||||
package ru.windcorp.progressia.server;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
@ -34,7 +31,6 @@ public class Server {
|
||||
private final ClientManager clientManager = new ClientManager(this);
|
||||
|
||||
private final TaskQueue taskQueue = new TaskQueue(this::isServerThread);
|
||||
private final Collection<Consumer<Server>> repeatingTasks = Collections.synchronizedCollection(new ArrayList<>());
|
||||
|
||||
private final TickingSettings tickingSettings = new TickingSettings();
|
||||
|
||||
@ -42,7 +38,7 @@ public class Server {
|
||||
this.world = new WorldLogic(world, this);
|
||||
this.serverThread = new ServerThread(this);
|
||||
|
||||
invokeEveryTick(this::scheduleChunkTicks);
|
||||
schedule(this::scheduleChunkTicks);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -80,7 +76,7 @@ public class Server {
|
||||
*
|
||||
* @param task the task to run
|
||||
* @see #invokeNow(Runnable)
|
||||
* @see #invokeEveryTick(Consumer)
|
||||
* @see #schedule(Consumer)
|
||||
*/
|
||||
public void invokeLater(Runnable task) {
|
||||
taskQueue.invokeLater(task);
|
||||
@ -98,7 +94,7 @@ public class Server {
|
||||
*
|
||||
* @param task the task to run
|
||||
* @see #invokeLater(Runnable)
|
||||
* @see #invokeEveryTick(Consumer)
|
||||
* @see #schedule(Consumer)
|
||||
*/
|
||||
public void invokeNow(Runnable task) {
|
||||
taskQueue.invokeNow(task);
|
||||
@ -110,8 +106,8 @@ public class Server {
|
||||
taskQueue.waitAndInvoke(task);
|
||||
}
|
||||
|
||||
public void invokeEveryTick(Consumer<Server> task) {
|
||||
repeatingTasks.add(task);
|
||||
public void schedule(Consumer<Server> task) {
|
||||
taskQueue.schedule(() -> task.accept(this));
|
||||
}
|
||||
|
||||
public void requestChange(Change change) {
|
||||
@ -161,7 +157,6 @@ public class Server {
|
||||
*/
|
||||
public void tick() {
|
||||
taskQueue.runTasks();
|
||||
repeatingTasks.forEach(t -> t.accept(this));
|
||||
}
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user