Files
Server/src/engine/workthreads/UpdateThread.java
T

82 lines
2.9 KiB
Java
Raw Normal View History

2025-01-01 10:31:46 -06:00
// • ▌ ▄ ·. ▄▄▄· ▄▄ • ▪ ▄▄· ▄▄▄▄· ▄▄▄· ▐▄▄▄ ▄▄▄ .
// ·██ ▐███▪▐█ ▀█ ▐█ ▀ ▪██ ▐█ ▌▪▐█ ▀█▪▐█ ▀█ •█▌ ▐█▐▌·
// ▐█ ▌▐▌▐█·▄█▀▀█ ▄█ ▀█▄▐█·██ ▄▄▐█▀▀█▄▄█▀▀█ ▐█▐ ▐▌▐▀▀▀
// ██ ██▌▐█▌▐█ ▪▐▌▐█▄▪▐█▐█▌▐███▌██▄▪▐█▐█ ▪▐▌██▐ █▌▐█▄▄▌
// ▀▀ █▪▀▀▀ ▀ ▀ ·▀▀▀▀ ▀▀▀·▀▀▀ ·▀▀▀▀ ▀ ▀ ▀▀ █▪ ▀▀▀
// Magicbane Emulator Project © 2013 - 2022
// www.magicbane.com
package engine.workthreads;
import engine.Enum;
import engine.gameManager.SessionManager;
import engine.gameManager.SimulationManager;
import engine.objects.Bane;
import engine.objects.PlayerCharacter;
2025-01-22 16:05:01 -06:00
import engine.objects.PlayerCombatStats;
2025-01-01 10:31:46 -06:00
import org.pmw.tinylog.Logger;
2025-02-16 17:40:08 -06:00
import java.util.concurrent.*;
2025-01-01 10:31:46 -06:00
public class UpdateThread implements Runnable {
2025-01-18 03:11:45 -06:00
private volatile Long lastRun;
public static final Long instancedelay = 1000L;
2025-01-01 10:31:46 -06:00
public UpdateThread() {
Logger.info(" UpdateThread thread has started!");
}
2025-02-16 17:40:08 -06:00
private static final long INSTANCE_DELAY = 1500; // Adjust as needed
2025-01-01 10:31:46 -06:00
public void processPlayerUpdate() {
2025-02-16 17:40:08 -06:00
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
2025-01-01 10:31:46 -06:00
try {
2025-02-16 17:40:08 -06:00
for (PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()) {
2025-01-18 03:11:45 -06:00
if (player != null) {
2025-02-16 17:40:08 -06:00
Future<?> future = executor.submit(() -> {
try {
player.update(true);
} catch (Exception e) {
Logger.error(e);
}
});
try {
future.get(10, TimeUnit.SECONDS); // Enforce max execution time
} catch (TimeoutException e) {
Logger.error("Player update timed out for: " + player.getName());
future.cancel(true); // Attempt to cancel the task
} catch (Exception e) {
Logger.error(e);
}
2025-01-18 03:11:45 -06:00
}
2025-01-01 10:31:46 -06:00
}
} catch (Exception e) {
2025-02-16 17:40:08 -06:00
Logger.error("UPDATE ERROR", e);
} finally {
executor.shutdown();
2025-01-01 10:31:46 -06:00
}
}
2025-02-16 17:40:08 -06:00
@Override
2025-01-01 10:31:46 -06:00
public void run() {
2025-02-16 17:40:08 -06:00
try {
processPlayerUpdate();
} catch (Exception e) {
Logger.error("Thread Execution Error", e);
2025-01-01 10:31:46 -06:00
}
}
public static void startUpdateThread() {
Thread updateThread;
updateThread = new Thread(new UpdateThread());
updateThread.setName("updateThread");
updateThread.start();
}
}