Rename and clean up MaplePartySearchCoordinator

This commit is contained in:
P0nk
2021-09-09 21:30:38 +02:00
parent c02efc5ca1
commit fbb0a08663
3 changed files with 93 additions and 86 deletions

View File

@@ -47,7 +47,7 @@ public class PartySearchCharacter {
public Character callPlayer(int leaderid, int callerMapid) { public Character callPlayer(int leaderid, int callerMapid) {
Character chr = player.get(); Character chr = player.get();
if (chr == null || !MaplePartySearchCoordinator.isInVicinity(callerMapid, chr.getMapId())) { if (chr == null || !PartySearchCoordinator.isInVicinity(callerMapid, chr.getMapId())) {
return null; return null;
} }

View File

@@ -42,28 +42,27 @@ import java.util.*;
import java.util.Map.Entry; import java.util.Map.Entry;
/** /**
*
* @author Ronan * @author Ronan
*/ */
public class MaplePartySearchCoordinator { public class PartySearchCoordinator {
private Map<Job, PartySearchStorage> storage = new HashMap<>(); private final Map<Job, PartySearchStorage> storage = new HashMap<>();
private Map<Job, PartySearchEchelon> upcomers = new HashMap<>(); private final Map<Job, PartySearchEchelon> upcomers = new HashMap<>();
private List<Character> leaderQueue = new LinkedList<>(); private final List<Character> leaderQueue = new LinkedList<>();
private final MonitoredReentrantReadWriteLock leaderQueueLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.WORLD_PARTY_SEARCH_QUEUE, true); private final MonitoredReentrantReadWriteLock leaderQueueLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.WORLD_PARTY_SEARCH_QUEUE, true);
private final MonitoredReadLock leaderQueueRLock = MonitoredReadLockFactory.createLock(leaderQueueLock); private final MonitoredReadLock leaderQueueRLock = MonitoredReadLockFactory.createLock(leaderQueueLock);
private final MonitoredWriteLock leaderQueueWLock = MonitoredWriteLockFactory.createLock(leaderQueueLock); private final MonitoredWriteLock leaderQueueWLock = MonitoredWriteLockFactory.createLock(leaderQueueLock);
private Map<Integer, Character> searchLeaders = new HashMap<>(); private final Map<Integer, Character> searchLeaders = new HashMap<>();
private Map<Integer, LeaderSearchMetadata> searchSettings = new HashMap<>(); private final Map<Integer, LeaderSearchMetadata> searchSettings = new HashMap<>();
private Map<Character, LeaderSearchMetadata> timeoutLeaders = new HashMap<>(); private final Map<Character, LeaderSearchMetadata> timeoutLeaders = new HashMap<>();
private int updateCount = 0; private int updateCount = 0;
private static Map<Integer, Set<Integer>> mapNeighbors = fetchNeighbouringMaps(); private static final Map<Integer, Set<Integer>> mapNeighbors = fetchNeighbouringMaps();
private static Map<Integer, Job> jobTable = instantiateJobTable(); private static final Map<Integer, Job> jobTable = instantiateJobTable();
private static Map<Integer, Set<Integer>> fetchNeighbouringMaps() { private static Map<Integer, Set<Integer>> fetchNeighbouringMaps() {
Map<Integer, Set<Integer>> mapLinks = new HashMap<>(); Map<Integer, Set<Integer>> mapLinks = new HashMap<>();
@@ -139,9 +138,9 @@ public class MaplePartySearchCoordinator {
} }
private class LeaderSearchMetadata { private class LeaderSearchMetadata {
private int minLevel; private final int minLevel;
private int maxLevel; private final int maxLevel;
private List<Job> searchedJobs; private final List<Job> searchedJobs;
private int reentryCount; private int reentryCount;
@@ -176,7 +175,7 @@ public class MaplePartySearchCoordinator {
} }
public MaplePartySearchCoordinator() { public PartySearchCoordinator() {
for (Job job : jobTable.values()) { for (Job job : jobTable.values()) {
storage.put(job, new PartySearchStorage()); storage.put(job, new PartySearchStorage());
upcomers.put(job, new PartySearchEchelon()); upcomers.put(job, new PartySearchEchelon());
@@ -236,7 +235,9 @@ public class MaplePartySearchCoordinator {
} }
public void registerPartyLeader(Character leader, int minLevel, int maxLevel, int jobs) { public void registerPartyLeader(Character leader, int minLevel, int maxLevel, int jobs) {
if (searchLeaders.containsKey(leader.getId())) return; if (searchLeaders.containsKey(leader.getId())) {
return;
}
searchSettings.put(leader.getId(), new LeaderSearchMetadata(minLevel, maxLevel, jobs)); searchSettings.put(leader.getId(), new LeaderSearchMetadata(minLevel, maxLevel, jobs));
searchLeaders.put(leader.getId(), leader); searchLeaders.put(leader.getId(), leader);
@@ -244,7 +245,9 @@ public class MaplePartySearchCoordinator {
} }
private void registerPartyLeader(Character leader, LeaderSearchMetadata settings) { private void registerPartyLeader(Character leader, LeaderSearchMetadata settings) {
if (searchLeaders.containsKey(leader.getId())) return; if (searchLeaders.containsKey(leader.getId())) {
return;
}
searchSettings.put(leader.getId(), settings); searchSettings.put(leader.getId(), settings);
searchLeaders.put(leader.getId(), leader); searchLeaders.put(leader.getId(), leader);
@@ -393,7 +396,9 @@ public class MaplePartySearchCoordinator {
if (party != null && party.getMembers().size() < 6) { if (party != null && party.getMembers().size() < 6) {
addQueueLeader(leader); addQueueLeader(leader);
} else { } else {
if (leader.isLoggedinWorld()) leader.dropMessage(5, "Your Party Search token session has finished as your party reached full capacity."); if (leader.isLoggedinWorld()) {
leader.dropMessage(5, "Your Party Search token session has finished as your party reached full capacity.");
}
searchLeaders.remove(leader.getId()); searchLeaders.remove(leader.getId());
searchSettings.remove(leader.getId()); searchSettings.remove(leader.getId());
} }
@@ -407,7 +412,9 @@ public class MaplePartySearchCoordinator {
if (leader.isLoggedinWorld()) { if (leader.isLoggedinWorld()) {
if (settings != null) { if (settings != null) {
recycledLeaders.add(new Pair<>(leader, settings)); recycledLeaders.add(new Pair<>(leader, settings));
if (YamlConfig.config.server.USE_DEBUG && leader.isGM()) leader.dropMessage(5, "Your Party Search token session is now on waiting queue for up to 7 minutes, to get it working right away please stop your Party Search and retry again later."); if (YamlConfig.config.server.USE_DEBUG && leader.isGM()) {
leader.dropMessage(5, "Your Party Search token session is now on waiting queue for up to 7 minutes, to get it working right away please stop your Party Search and retry again later.");
}
} else { } else {
leader.dropMessage(5, "Your Party Search token session expired, please stop your Party Search and retry again later."); leader.dropMessage(5, "Your Party Search token session expired, please stop your Party Search and retry again later.");
} }

View File

@@ -40,7 +40,7 @@ import net.server.audit.locks.factory.MonitoredWriteLockFactory;
import net.server.channel.Channel; import net.server.channel.Channel;
import net.server.channel.CharacterIdChannelPair; import net.server.channel.CharacterIdChannelPair;
import net.server.coordinator.matchchecker.MatchCheckerCoordinator; import net.server.coordinator.matchchecker.MatchCheckerCoordinator;
import net.server.coordinator.partysearch.MaplePartySearchCoordinator; import net.server.coordinator.partysearch.PartySearchCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteResult; import net.server.coordinator.world.MapleInviteCoordinator.InviteResult;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType; import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
@@ -89,7 +89,7 @@ public class World {
private PlayerStorage players = new PlayerStorage(); private PlayerStorage players = new PlayerStorage();
private ServicesManager services = new ServicesManager(WorldServices.SAVE_CHARACTER); private ServicesManager services = new ServicesManager(WorldServices.SAVE_CHARACTER);
private MatchCheckerCoordinator matchChecker = new MatchCheckerCoordinator(); private MatchCheckerCoordinator matchChecker = new MatchCheckerCoordinator();
private MaplePartySearchCoordinator partySearch = new MaplePartySearchCoordinator(); private PartySearchCoordinator partySearch = new PartySearchCoordinator();
private final MonitoredReentrantReadWriteLock chnLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.WORLD_CHANNELS, true); private final MonitoredReentrantReadWriteLock chnLock = new MonitoredReentrantReadWriteLock(MonitoredLockType.WORLD_CHANNELS, true);
private MonitoredReadLock chnRLock = MonitoredReadLockFactory.createLock(chnLock); private MonitoredReadLock chnRLock = MonitoredReadLockFactory.createLock(chnLock);
@@ -517,7 +517,7 @@ public class World {
return matchChecker; return matchChecker;
} }
public MaplePartySearchCoordinator getPartySearchCoordinator() { public PartySearchCoordinator getPartySearchCoordinator() {
return partySearch; return partySearch;
} }