forked from MagicBane/Server
Lock for dirtyload integration.
This commit is contained in:
@@ -236,7 +236,7 @@ public enum InterestManager implements Runnable {
|
|||||||
|
|
||||||
if (distanceSquared > sqr(25))
|
if (distanceSquared > sqr(25))
|
||||||
player.setLastStaticLoc(player.getLoc());
|
player.setLastStaticLoc(player.getLoc());
|
||||||
else if (player.dirtyLoad.get() == false)
|
else if (player.isDirtyLoad() == false)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Get Statics in range
|
// Get Statics in range
|
||||||
@@ -314,7 +314,7 @@ public enum InterestManager implements Runnable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
loadedStaticObjects.addAll(toLoad);
|
loadedStaticObjects.addAll(toLoad);
|
||||||
player.dirtyLoad.set(false);
|
player.setDirtyLoad(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateMobileList(PlayerCharacter player, ClientConnection origin) {
|
private void updateMobileList(PlayerCharacter player, ClientConnection origin) {
|
||||||
@@ -519,22 +519,12 @@ public enum InterestManager implements Runnable {
|
|||||||
if (origin == null)
|
if (origin == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//Update static list
|
// Update loaded upbjects lists
|
||||||
|
|
||||||
try {
|
player.setDirtyLoad(true);
|
||||||
player.dirtyLoad.set(true);
|
|
||||||
updateStaticList(player, origin);
|
updateStaticList(player, origin);
|
||||||
} catch (Exception e) {
|
|
||||||
Logger.error("InterestManager.updateAllStaticPlayers: " + player.getObjectUUID(), e);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Update mobile list
|
|
||||||
|
|
||||||
try {
|
|
||||||
updateMobileList(player, origin);
|
updateMobileList(player, origin);
|
||||||
} catch (Exception e) {
|
|
||||||
Logger.error("InterestManager.updateAllMobilePlayers: " + player.getObjectUUID(), e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void HandleLoadForTeleport(PlayerCharacter playerCharacter) {
|
public synchronized void HandleLoadForTeleport(PlayerCharacter playerCharacter) {
|
||||||
@@ -547,22 +537,12 @@ public enum InterestManager implements Runnable {
|
|||||||
if (origin == null)
|
if (origin == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//Update static list
|
// Update loaded upbjects lists
|
||||||
|
|
||||||
try {
|
playerCharacter.setDirtyLoad(true);
|
||||||
playerCharacter.dirtyLoad.set(true);
|
|
||||||
updateStaticList(playerCharacter, origin);
|
updateStaticList(playerCharacter, origin);
|
||||||
} catch (Exception e) {
|
|
||||||
Logger.error("InterestManager.updateAllStaticPlayers: " + playerCharacter.getObjectUUID(), e);
|
|
||||||
}
|
|
||||||
|
|
||||||
//Update mobile list
|
|
||||||
|
|
||||||
try {
|
|
||||||
updateMobileList(playerCharacter, origin);
|
updateMobileList(playerCharacter, origin);
|
||||||
} catch (Exception e) {
|
|
||||||
Logger.error("InterestManager.updateAllMobilePlayers: " + playerCharacter.getObjectUUID(), e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setObjectDirty(AbstractWorldObject abstractWorldObject) {
|
public static void setObjectDirty(AbstractWorldObject abstractWorldObject) {
|
||||||
@@ -575,7 +555,7 @@ public enum InterestManager implements Runnable {
|
|||||||
for (AbstractWorldObject playerObject : playerList) {
|
for (AbstractWorldObject playerObject : playerList) {
|
||||||
|
|
||||||
PlayerCharacter playerCharacter = (PlayerCharacter) playerObject;
|
PlayerCharacter playerCharacter = (PlayerCharacter) playerObject;
|
||||||
playerCharacter.dirtyLoad.set(true);
|
playerCharacter.setDirtyLoad(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,6 @@ import java.sql.SQLException;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.concurrent.locks.ReadWriteLock;
|
import java.util.concurrent.locks.ReadWriteLock;
|
||||||
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
||||||
@@ -173,7 +172,8 @@ public class PlayerCharacter extends AbstractCharacter {
|
|||||||
private float characterHeight = 0;
|
private float characterHeight = 0;
|
||||||
private boolean lastSwimming = false;
|
private boolean lastSwimming = false;
|
||||||
private boolean isTeleporting = false;
|
private boolean isTeleporting = false;
|
||||||
public AtomicBoolean dirtyLoad = new AtomicBoolean(true);
|
private boolean dirtyLoad = true;
|
||||||
|
private final ReadWriteLock dirtyLock = new ReentrantReadWriteLock(true);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* No Id Constructor
|
* No Id Constructor
|
||||||
@@ -5512,4 +5512,18 @@ public class PlayerCharacter extends AbstractCharacter {
|
|||||||
|
|
||||||
return bargain;
|
return bargain;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDirtyLoad() {
|
||||||
|
boolean dirtyValue;
|
||||||
|
dirtyLock.readLock().lock();
|
||||||
|
dirtyValue = dirtyLoad;
|
||||||
|
dirtyLock.readLock().unlock();
|
||||||
|
return dirtyValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDirtyLoad(boolean dirtyLoad) {
|
||||||
|
dirtyLock.writeLock().lock();
|
||||||
|
this.dirtyLoad = dirtyLoad;
|
||||||
|
dirtyLock.writeLock().unlock();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user