|
|
|
@ -17,6 +17,8 @@ import engine.objects.PlayerCharacter;
@@ -17,6 +17,8 @@ import engine.objects.PlayerCharacter;
|
|
|
|
|
import engine.objects.PlayerCombatStats; |
|
|
|
|
import org.pmw.tinylog.Logger; |
|
|
|
|
|
|
|
|
|
import java.util.concurrent.*; |
|
|
|
|
|
|
|
|
|
public class UpdateThread implements Runnable { |
|
|
|
|
|
|
|
|
|
private volatile Long lastRun; |
|
|
|
@ -27,36 +29,45 @@ public class UpdateThread implements Runnable {
@@ -27,36 +29,45 @@ public class UpdateThread implements Runnable {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final long INSTANCE_DELAY = 1500; // Adjust as needed
|
|
|
|
|
|
|
|
|
|
public void processPlayerUpdate() { |
|
|
|
|
ExecutorService executor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
for(PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()){ |
|
|
|
|
for (PlayerCharacter player : SessionManager.getAllActivePlayerCharacters()) { |
|
|
|
|
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) { |
|
|
|
|
Logger.error("UPDATE ERROR",e); |
|
|
|
|
Logger.error("UPDATE ERROR", e); |
|
|
|
|
} finally { |
|
|
|
|
executor.shutdown(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
lastRun = System.currentTimeMillis(); |
|
|
|
|
while (true) { |
|
|
|
|
if (System.currentTimeMillis() >= lastRun + instancedelay) { // Correct condition
|
|
|
|
|
this.processPlayerUpdate(); |
|
|
|
|
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(); |
|
|
|
|
try { |
|
|
|
|
processPlayerUpdate(); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
Logger.error("Thread Execution Error", e); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|