Files
Server/src/engine/workthreads/ProcessUpdate.java
T
2025-02-16 17:52:34 -06:00

43 lines
1.3 KiB
Java

package engine.workthreads;
import engine.job.AbstractJob;
import engine.job.JobThread;
import engine.objects.PlayerCharacter;
import org.pmw.tinylog.Logger;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock;
public class ProcessUpdate implements Runnable{
private final ReentrantLock lock = new ReentrantLock();
private PlayerCharacter playerCharacter;
public ProcessUpdate(PlayerCharacter pc){
this.playerCharacter = pc;
}
public void run() {
try {
if (this.playerCharacter != null) {
if (lock.tryLock(10, TimeUnit.SECONDS)) { // Timeout to prevent deadlock
try {
this.playerCharacter.update(true);
} finally {
lock.unlock();
}
} else {
Logger.warn("JobThread could not acquire lock in time, skipping job.");
}
}
} catch (Exception e) {
Logger.error(e);
}
}
public static void startUpdate(PlayerCharacter pc) {
ProcessUpdate updateThread = new ProcessUpdate(pc);
Thread thread = new Thread(updateThread);
thread.setName(pc.getObjectUUID() + " UPDATE");
thread.start();
}
}