Dynamic World/Channel deployment + Channel scheduler update

Added "8-slot SETUP expand" item on the CashShop.
Solved a concurrency issue on the fameGainByQuest method.
Refactored many resource freeing modules throughout the source code.
Implemented dynamic deployment of worlds and channels on the server system. Only creation of channels and worlds are available on this feature.
Added a dedicated worker for schedules requested on EventManager.
Fixed a potential cause for deadlocks on the channel schedulers' system.
Refactored many schedules used by the EventManager and Channel, futher improving overall scheduling performance on the server.
This commit is contained in:
ronancpl
2018-07-23 20:45:41 -03:00
parent bee8b5259b
commit 8aadf7c369
48 changed files with 1152 additions and 260 deletions

View File

@@ -54,7 +54,6 @@ import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
import net.server.audit.locks.MonitoredReentrantLock;
import net.server.Server;
import net.server.channel.Channel;
@@ -95,10 +94,10 @@ public class MapleMonster extends AbstractLoadedMapleLife {
private int parentMobOid = 0;
private final HashMap<Integer, AtomicInteger> takenDamage = new HashMap<>();
private Lock externalLock = new MonitoredReentrantLock(MonitoredLockType.MOB_EXT);
private Lock monsterLock = new MonitoredReentrantLock(MonitoredLockType.MOB, true);
private Lock statiLock = new MonitoredReentrantLock(MonitoredLockType.MOB_STATI);
private Lock animationLock = new MonitoredReentrantLock(MonitoredLockType.MOB_ANI);
private MonitoredReentrantLock externalLock = new MonitoredReentrantLock(MonitoredLockType.MOB_EXT);
private MonitoredReentrantLock monsterLock = new MonitoredReentrantLock(MonitoredLockType.MOB, true);
private MonitoredReentrantLock statiLock = new MonitoredReentrantLock(MonitoredLockType.MOB_STATI);
private MonitoredReentrantLock animationLock = new MonitoredReentrantLock(MonitoredLockType.MOB_ANI);
public MapleMonster(int id, MapleMonsterStats stats) {
super(id);
@@ -1476,4 +1475,11 @@ public class MapleMonster extends AbstractLoadedMapleLife {
public final void changeDifficulty(final int difficulty, boolean pqMob) {
changeLevelByDifficulty(difficulty, pqMob);
}
public final void disposeLocks() {
externalLock.dispose();
monsterLock.dispose();
statiLock.dispose();
animationLock.dispose();
}
}