player update optimized
This commit is contained in:
@@ -17,6 +17,8 @@ import engine.objects.PlayerCharacter;
|
|||||||
import engine.objects.PlayerCombatStats;
|
import engine.objects.PlayerCombatStats;
|
||||||
import org.pmw.tinylog.Logger;
|
import org.pmw.tinylog.Logger;
|
||||||
|
|
||||||
|
import java.util.concurrent.*;
|
||||||
|
|
||||||
public class UpdateThread implements Runnable {
|
public class UpdateThread implements Runnable {
|
||||||
|
|
||||||
private volatile Long lastRun;
|
private volatile Long lastRun;
|
||||||
@@ -27,36 +29,45 @@ public class UpdateThread implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static final long INSTANCE_DELAY = 1500; // Adjust as needed
|
||||||
|
|
||||||
public void processPlayerUpdate() {
|
public void processPlayerUpdate() {
|
||||||
|
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
for(PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()){
|
for (PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()) {
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
player.update(true);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Logger.error("UPDATE ERROR",e);
|
Logger.error("UPDATE ERROR", e);
|
||||||
|
} finally {
|
||||||
|
executor.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
lastRun = System.currentTimeMillis();
|
try {
|
||||||
while (true) {
|
processPlayerUpdate();
|
||||||
if (System.currentTimeMillis() >= lastRun + instancedelay) { // Correct condition
|
} catch (Exception e) {
|
||||||
this.processPlayerUpdate();
|
Logger.error("Thread Execution Error", e);
|
||||||
lastRun = System.currentTimeMillis(); // Update lastRun after processing
|
|
||||||
}else {
|
|
||||||
try {
|
|
||||||
Thread.sleep(1500); // Pause for 1500ms to reduce CPU usage
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
Logger.error("Thread interrupted", e);
|
|
||||||
Thread.currentThread().interrupt();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Thread.yield();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user