ThreadPool manager rework.
This commit is contained in:
@@ -127,7 +127,7 @@ public final class DenOfEvil extends AbstractNpcAI
|
||||
zone.addSkill(skillId, skillLevel + 1);
|
||||
if (skillLevel == 3) // 3+1=4
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleAi(new KashaDestruction(zone), 2 * 60 * 1000l);
|
||||
ThreadPoolManager.schedule(new KashaDestruction(zone), 2 * 60 * 1000l);
|
||||
zone.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.DEFEAT_KASHA_S_EYES_TO_LIFT_THE_GREAT_CURSE));
|
||||
}
|
||||
else if (skillLevel == 2)
|
||||
@@ -140,7 +140,7 @@ public final class DenOfEvil extends AbstractNpcAI
|
||||
@Override
|
||||
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleAi(new RespawnNewEye(npc.getLocation()), 15000);
|
||||
ThreadPoolManager.schedule(new RespawnNewEye(npc.getLocation()), 15000);
|
||||
final L2EffectZone zone = ZoneManager.getInstance().getZone(npc, L2EffectZone.class);
|
||||
if (zone == null)
|
||||
{
|
||||
@@ -213,7 +213,7 @@ public final class DenOfEvil extends AbstractNpcAI
|
||||
final L2Npc npc = (L2Npc) character;
|
||||
if (CommonUtil.contains(EYE_IDS, npc.getId()))
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleAi(new RespawnNewEye(npc.getLocation()), 15000);
|
||||
ThreadPoolManager.schedule(new RespawnNewEye(npc.getLocation()), 15000);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -129,11 +129,11 @@ public final class Parade extends AbstractNpcAI
|
||||
{
|
||||
// Starts at 8:00 and repeats every 6 hours.
|
||||
final long diff = timeLeftMilli(8, 0, 0), cycle = 3600000L;
|
||||
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Start(), diff, cycle);
|
||||
ThreadPoolManager.scheduleAtFixedRate(new Start(), diff, cycle);
|
||||
|
||||
// Test - Starts 3 minutes after server startup and repeats every 20 minutes.
|
||||
// final long diff = timeLeftMilli(8, 0, 0), cycle = 600000L;
|
||||
// ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Start(), 180000L, cycle);
|
||||
// ThreadPoolManager.scheduleAtFixedRate(new Start(), 180000L, cycle);
|
||||
|
||||
_log.info("Fantasy Isle: Parade starting at " + new SimpleDateFormat("yyyy/MM/dd HH:mm").format(System.currentTimeMillis() + diff) + " and is scheduled each next " + (cycle / 3600000) + " hours.");
|
||||
}
|
||||
@@ -171,9 +171,9 @@ public final class Parade extends AbstractNpcAI
|
||||
public void run()
|
||||
{
|
||||
load();
|
||||
spawnTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Spawn(), 0, 5000);
|
||||
deleteTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Delete(), 10000, 1000);
|
||||
cleanTask = ThreadPoolManager.getInstance().scheduleGeneral(new Clean(), 420000);
|
||||
spawnTask = ThreadPoolManager.scheduleAtFixedRate(new Spawn(), 0, 5000);
|
||||
deleteTask = ThreadPoolManager.scheduleAtFixedRate(new Delete(), 10000, 1000);
|
||||
cleanTask = ThreadPoolManager.schedule(new Clean(), 420000);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -141,7 +141,7 @@ public final class GainakSiege extends AbstractNpcAI
|
||||
final L2SiegeZone zone = ZoneManager.getInstance().getZone(npc, L2SiegeZone.class);
|
||||
if ((zone != null) && (zone.getId() == 60019) && zone.isActive())
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleAi(new RespawnNewAssassin(npc.getLocation()), 60000);
|
||||
ThreadPoolManager.schedule(new RespawnNewAssassin(npc.getLocation()), 60000);
|
||||
}
|
||||
return super.onKill(npc, killer, isSummon);
|
||||
}
|
||||
|
@@ -256,7 +256,7 @@ public final class FourSepulchers extends AbstractNpcAI implements IGameXmlReade
|
||||
if ((doorInfo[0] == sepulcherId) && (doorInfo[1] == currentWave))
|
||||
{
|
||||
openDoor(doorInfo[2], 0);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
closeDoor(doorInfo[2], 0);
|
||||
}, 15000);
|
||||
@@ -578,7 +578,7 @@ public final class FourSepulchers extends AbstractNpcAI implements IGameXmlReade
|
||||
showHtmlFile(player, npcId + "-OK.html", npc, null);
|
||||
|
||||
// Kick all players when/if time is over
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
ZoneManager.getInstance().getZoneById(MANAGER_ZONES.get(npcId)).oustAllPlayers();
|
||||
}, TIME_ATTACK * 60 * 1000);
|
||||
|
@@ -109,7 +109,7 @@ public class AltarOfSacrifice extends AbstractNpcAI
|
||||
|
||||
private void sendMessage(L2Npc npc, NpcStringId npcString, int delay)
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
|
@@ -349,7 +349,7 @@ public final class AwakeningMaster extends AbstractNpcAI
|
||||
player.sendSkillList();
|
||||
}
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
player.sendPacket(ExShowUsm.AWAKENING_END);
|
||||
}, 10000);
|
||||
|
@@ -174,7 +174,7 @@ public class HarnakUndergroundRuinsZone extends AbstractNpcAI
|
||||
_templates.stream().forEach(t -> t.spawn(g -> String.valueOf(g.getName()).equalsIgnoreCase(zoneName.concat("_demonic")), null));
|
||||
zone.getPlayersInside().forEach(temp -> temp.sendPacket(new ExSendUIEvent(temp, false, false, 600, 0, NpcStringId.DEMONIC_SYSTEM_ACTIVATED)));
|
||||
currentInfo.setZoneStage(7);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new changeZoneStage(zone), 600000); // 10min
|
||||
ThreadPoolManager.schedule(new changeZoneStage(zone), 600000); // 10min
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -202,7 +202,7 @@ public class HarnakUndergroundRuinsZone extends AbstractNpcAI
|
||||
if (currentInfo.getZoneStage() < 6)
|
||||
{
|
||||
currentInfo.setZoneStage(currentInfo.getZoneStage() + 1);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new changeZoneStage(zone), 5000);
|
||||
ThreadPoolManager.schedule(new changeZoneStage(zone), 5000);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -248,7 +248,7 @@ public class HarnakUndergroundRuinsZone extends AbstractNpcAI
|
||||
if (calcPoints >= 300)
|
||||
{
|
||||
calcPoints = 300;
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new changeZoneStage(currentZone.getKey()), 1000);
|
||||
ThreadPoolManager.schedule(new changeZoneStage(currentZone.getKey()), 1000);
|
||||
}
|
||||
currentInfo.setCurrentPoint(calcPoints);
|
||||
for (L2PcInstance player : currentZone.getKey().getPlayersInside())
|
||||
|
@@ -258,7 +258,7 @@ public final class QueenAnt extends AbstractNpcAI
|
||||
{
|
||||
((L2MonsterInstance) npc).getMinionList().spawnMinions(npc.getParameters().getMinionList("Privates"));
|
||||
}
|
||||
_task = ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new QueenAntTask(), 5 * 1000, 5 * 1000);
|
||||
_task = ThreadPoolManager.scheduleAtFixedRate(new QueenAntTask(), 5 * 1000, 5 * 1000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@@ -701,7 +701,7 @@ public final class EnergySeeds extends AbstractNpcAI
|
||||
|
||||
public void scheduleRespawn(long waitTime)
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
// if the AI is inactive, do not spawn the NPC
|
||||
if (isSeedActive(_seedId))
|
||||
|
@@ -90,6 +90,6 @@ public class NpcBufferAI implements Runnable
|
||||
|
||||
_npc.doCast(skill);
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, skill.getReuseDelay());
|
||||
ThreadPoolManager.schedule(this, skill.getReuseDelay());
|
||||
}
|
||||
}
|
@@ -53,7 +53,7 @@ public final class NpcBuffers extends AbstractNpcAI
|
||||
final NpcBufferData data = _npcBuffers.getNpcBuffer(npc.getId());
|
||||
for (NpcBufferSkillData skill : data.getSkills())
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleAi(new NpcBufferAI(npc, skill), skill.getInitialDelay());
|
||||
ThreadPoolManager.schedule(new NpcBufferAI(npc, skill), skill.getInitialDelay());
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
@@ -112,7 +112,7 @@ public final class Elpies extends Event
|
||||
Broadcast.toAllOnlinePlayers("Help us exterminate them!");
|
||||
Broadcast.toAllOnlinePlayers("You have " + EVENT_DURATION_MINUTES + " minutes!");
|
||||
|
||||
_eventTask = ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
_eventTask = ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
Broadcast.toAllOnlinePlayers("Time is up!");
|
||||
eventStop();
|
||||
|
@@ -138,7 +138,7 @@ public final class Race extends Event
|
||||
Broadcast.toAllOnlinePlayers("Visit Event Manager in Dion village and signup, you have " + _time_register + " min before Race Start...");
|
||||
|
||||
// Schedule Event end
|
||||
_eventTask = ThreadPoolManager.getInstance().scheduleGeneral(() -> StartRace(), _time_register * 60 * 1000);
|
||||
_eventTask = ThreadPoolManager.schedule(() -> StartRace(), _time_register * 60 * 1000);
|
||||
|
||||
return true;
|
||||
|
||||
@@ -181,7 +181,7 @@ public final class Race extends Event
|
||||
}
|
||||
}
|
||||
// Schedule timeup for Race
|
||||
_eventTask = ThreadPoolManager.getInstance().scheduleGeneral(() -> timeUp(), _time_race * 60 * 1000);
|
||||
_eventTask = ThreadPoolManager.schedule(() -> timeUp(), _time_race * 60 * 1000);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -308,7 +308,6 @@ import handlers.telnethandlers.server.ServerAbort;
|
||||
import handlers.telnethandlers.server.ServerRestart;
|
||||
import handlers.telnethandlers.server.ServerShutdown;
|
||||
import handlers.telnethandlers.server.Status;
|
||||
import handlers.telnethandlers.server.ThreadPoolDebug;
|
||||
import handlers.usercommandhandlers.ChannelDelete;
|
||||
import handlers.usercommandhandlers.ChannelInfo;
|
||||
import handlers.usercommandhandlers.ChannelLeave;
|
||||
@@ -749,7 +748,6 @@ public class MasterHandler
|
||||
TelnetServer.getInstance().addHandler(new ServerRestart());
|
||||
TelnetServer.getInstance().addHandler(new ServerShutdown());
|
||||
TelnetServer.getInstance().addHandler(new Status());
|
||||
TelnetServer.getInstance().addHandler(new ThreadPoolDebug());
|
||||
TelnetServer.getInstance().addHandler(new handlers.telnethandlers.server.Debug());
|
||||
}
|
||||
|
||||
|
@@ -107,7 +107,7 @@ public class AdminMonsterRace implements IAdminCommandHandler
|
||||
activeChar.sendPacket(spk);
|
||||
activeChar.broadcastPacket(spk);
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new RunRace(codes, activeChar), 5000);
|
||||
ThreadPoolManager.schedule(new RunRace(codes, activeChar), 5000);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -137,7 +137,7 @@ public class AdminMonsterRace implements IAdminCommandHandler
|
||||
final MonRaceInfo spk = new MonRaceInfo(codes[2][0], codes[2][1], MonsterRace.getInstance().getMonsters(), MonsterRace.getInstance().getSpeeds());
|
||||
activeChar.sendPacket(spk);
|
||||
activeChar.broadcastPacket(spk);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new RunEnd(activeChar), 30000);
|
||||
ThreadPoolManager.schedule(new RunEnd(activeChar), 30000);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -20,14 +20,12 @@ import java.text.SimpleDateFormat;
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.GameServer;
|
||||
import com.l2jmobius.gameserver.GameTimeController;
|
||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
||||
import com.l2jmobius.gameserver.cache.HtmCache;
|
||||
import com.l2jmobius.gameserver.data.xml.impl.AdminData;
|
||||
import com.l2jmobius.gameserver.handler.IAdminCommandHandler;
|
||||
@@ -72,14 +70,6 @@ public class AdminServerInfo implements IAdminCommandHandler
|
||||
html.replace("%usedMem%", (RunTime.maxMemory() / mb) - (((RunTime.maxMemory() - RunTime.totalMemory()) + RunTime.freeMemory()) / mb));
|
||||
html.replace("%freeMem%", ((RunTime.maxMemory() - RunTime.totalMemory()) + RunTime.freeMemory()) / mb);
|
||||
html.replace("%totalMem%", Runtime.getRuntime().maxMemory() / 1048576);
|
||||
html.replace("%theardInfoGen%", buildTheardInfo("GENERAL"));
|
||||
html.replace("%theardInfoEff%", buildTheardInfo("EFFECTS"));
|
||||
html.replace("%theardInfoAi%", buildTheardInfo("AI"));
|
||||
html.replace("%theardInfoEvent%", buildTheardInfo("EVENT"));
|
||||
html.replace("%theardInfoPack%", buildTheardInfo("PACKETS"));
|
||||
html.replace("%theardInfoIOPack%", buildTheardInfo("IOPACKETS"));
|
||||
html.replace("%theardInfoGenTask%", buildTheardInfo("GENERAL_TASKS"));
|
||||
html.replace("%theardInfoEvnTask%", buildTheardInfo("EVENT_TASKS"));
|
||||
activeChar.sendPacket(html);
|
||||
}
|
||||
return true;
|
||||
@@ -96,22 +86,6 @@ public class AdminServerInfo implements IAdminCommandHandler
|
||||
return days + " Days, " + hours + " Hours, " + TimeUnit.MILLISECONDS.toMinutes(time) + " Minutes";
|
||||
}
|
||||
|
||||
private String buildTheardInfo(String category)
|
||||
{
|
||||
final StringBuilder tb = new StringBuilder();
|
||||
|
||||
tb.append("<table width=\"270\" border=\"0\" bgcolor=\"444444\">");
|
||||
for (Entry<String, Object> info : ThreadPoolManager.getInstance().getStats(category).getSet().entrySet())
|
||||
{
|
||||
tb.append("<tr>");
|
||||
tb.append("<td>" + info.getKey() + ":</td>");
|
||||
tb.append("<td><font color=\"00FF00\">" + info.getValue() + "</font></td>");
|
||||
tb.append("</tr>");
|
||||
}
|
||||
tb.append("</table>");
|
||||
return tb.toString();
|
||||
}
|
||||
|
||||
private int getPlayersCount(String type)
|
||||
{
|
||||
switch (type)
|
||||
|
@@ -46,7 +46,7 @@ public class AdminTest implements IAdminCommandHandler
|
||||
{
|
||||
if (command.equals("admin_stats"))
|
||||
{
|
||||
for (String line : ThreadPoolManager.getInstance().getStats())
|
||||
for (String line : ThreadPoolManager.getStats())
|
||||
{
|
||||
activeChar.sendMessage(line);
|
||||
}
|
||||
|
@@ -57,7 +57,7 @@ public class ClassChange extends AbstractEffect
|
||||
{
|
||||
final L2PcInstance player = effected.getActingPlayer();
|
||||
// TODO: FIX ME - Executing 1 second later otherwise interupted exception during storeCharBase()
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
final int activeClass = player.getClassId().getId();
|
||||
|
||||
|
@@ -67,7 +67,7 @@ public final class ServitorShare extends AbstractEffect
|
||||
|
||||
if (effected != null)
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleEffect(new ScheduledEffectExitTask(effected, info.getSkill().getId()), 100);
|
||||
ThreadPoolManager.schedule(new ScheduledEffectExitTask(effected, info.getSkill().getId()), 100);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -162,7 +162,7 @@ public class JailHandler implements IPunishmentHandler
|
||||
OlympiadManager.getInstance().removeDisconnectedCompetitor(player);
|
||||
}
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new TeleportTask(player, L2JailZone.getLocationIn()), 2000);
|
||||
ThreadPoolManager.schedule(new TeleportTask(player, L2JailZone.getLocationIn()), 2000);
|
||||
|
||||
// Open a Html message to inform the player
|
||||
final NpcHtmlMessage msg = new NpcHtmlMessage();
|
||||
@@ -198,7 +198,7 @@ public class JailHandler implements IPunishmentHandler
|
||||
*/
|
||||
private static void removeFromPlayer(L2PcInstance player)
|
||||
{
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new TeleportTask(player, L2JailZone.getLocationOut()), 2000);
|
||||
ThreadPoolManager.schedule(new TeleportTask(player, L2JailZone.getLocationOut()), 2000);
|
||||
|
||||
// Open a Html message to inform the player
|
||||
final NpcHtmlMessage msg = new NpcHtmlMessage();
|
||||
|
@@ -68,7 +68,7 @@ public class Debug implements ITelnetCommand
|
||||
@Override
|
||||
public String getUsage()
|
||||
{
|
||||
return "Debug <decay/packetsend/PacketTP/IOPacketTP/GeneralTP/full>";
|
||||
return "Debug <decay/packetsend/full>";
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -108,90 +108,6 @@ public class Debug implements ITelnetCommand
|
||||
player.sendPacket(sp);
|
||||
return "Packet has been sent!";
|
||||
}
|
||||
case "PacketTP":
|
||||
{
|
||||
final String str = ThreadPoolManager.getInstance().getPacketStats();
|
||||
int i = 0;
|
||||
File f = new File("./log/StackTrace-PacketTP-" + i + ".txt");
|
||||
while (f.exists())
|
||||
{
|
||||
i++;
|
||||
f = new File("./log/StackTrace-PacketTP-" + i + ".txt");
|
||||
}
|
||||
f.getParentFile().mkdirs();
|
||||
try
|
||||
{
|
||||
Files.write(f.toPath(), str.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Couldn't write packet tp.", e);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
case "IOPacketTP":
|
||||
{
|
||||
final String str = ThreadPoolManager.getInstance().getIOPacketStats();
|
||||
int i = 0;
|
||||
File f = new File("./log/StackTrace-IOPacketTP-" + i + ".txt");
|
||||
while (f.exists())
|
||||
{
|
||||
i++;
|
||||
f = new File("./log/StackTrace-IOPacketTP-" + i + ".txt");
|
||||
}
|
||||
f.getParentFile().mkdirs();
|
||||
try
|
||||
{
|
||||
Files.write(f.toPath(), str.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Couldn't write packet tp.", e);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
case "GeneralTP":
|
||||
{
|
||||
final String str = ThreadPoolManager.getInstance().getGeneralStats();
|
||||
int i = 0;
|
||||
File f = new File("./log/StackTrace-GeneralTP-" + i + ".txt");
|
||||
while (f.exists())
|
||||
{
|
||||
i++;
|
||||
f = new File("./log/StackTrace-GeneralTP-" + i + ".txt");
|
||||
}
|
||||
f.getParentFile().mkdirs();
|
||||
try
|
||||
{
|
||||
Files.write(f.toPath(), str.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Couldn't write packet tp.", e);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
case "GeneralScheduledTP":
|
||||
{
|
||||
final String str = ThreadPoolManager.getInstance().getGeneralStats();
|
||||
int i = 0;
|
||||
File f = new File("./log/StackTrace-GeneralScheduledTP-" + i + ".txt");
|
||||
while (f.exists())
|
||||
{
|
||||
i++;
|
||||
f = new File("./log/StackTrace-GeneralScheduledTP-" + i + ".txt");
|
||||
}
|
||||
f.getParentFile().mkdirs();
|
||||
try
|
||||
{
|
||||
Files.write(f.toPath(), str.getBytes(StandardCharsets.UTF_8), StandardOpenOption.CREATE_NEW, StandardOpenOption.WRITE);
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Couldn't write packet tp.", e);
|
||||
}
|
||||
return str;
|
||||
}
|
||||
case "full":
|
||||
{
|
||||
final Calendar cal = Calendar.getInstance();
|
||||
@@ -283,7 +199,7 @@ public class Debug implements ITelnetCommand
|
||||
}
|
||||
|
||||
sb.append("\r\n## Thread Pool Manager Statistics ##\r\n");
|
||||
for (String line : ThreadPoolManager.getInstance().getStats())
|
||||
for (String line : ThreadPoolManager.getStats())
|
||||
{
|
||||
sb.append(line);
|
||||
sb.append("\r\n");
|
||||
|
@@ -42,9 +42,9 @@ public class Performance implements ITelnetCommand
|
||||
@Override
|
||||
public String handle(ChannelHandlerContext ctx, String[] args)
|
||||
{
|
||||
ThreadPoolManager.getInstance().purge();
|
||||
// ThreadPoolManager.purge();
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (String line : ThreadPoolManager.getInstance().getStats())
|
||||
for (String line : ThreadPoolManager.getStats())
|
||||
{
|
||||
sb.append(line + Config.EOL);
|
||||
}
|
||||
|
@@ -42,9 +42,9 @@ public class Purge implements ITelnetCommand
|
||||
@Override
|
||||
public String handle(ChannelHandlerContext ctx, String[] args)
|
||||
{
|
||||
ThreadPoolManager.getInstance().purge();
|
||||
ThreadPoolManager.purge();
|
||||
final StringBuilder sb = new StringBuilder("STATUS OF THREAD POOLS AFTER PURGE COMMAND:" + Config.EOL);
|
||||
for (String line : ThreadPoolManager.getInstance().getStats())
|
||||
for (String line : ThreadPoolManager.getStats())
|
||||
{
|
||||
sb.append(line + Config.EOL);
|
||||
}
|
||||
|
@@ -1,171 +0,0 @@
|
||||
/*
|
||||
* This file is part of the L2J Mobius project.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
package handlers.telnethandlers.server;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.FutureTask;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import com.l2jmobius.Config;
|
||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
||||
import com.l2jmobius.gameserver.ThreadPoolManager.RunnableWrapper;
|
||||
import com.l2jmobius.gameserver.network.telnet.ITelnetCommand;
|
||||
|
||||
import io.netty.channel.ChannelHandlerContext;
|
||||
|
||||
/**
|
||||
* @author UnAfraid
|
||||
*/
|
||||
public class ThreadPoolDebug implements ITelnetCommand
|
||||
{
|
||||
private static final Logger LOGGER = Logger.getLogger(ThreadPoolDebug.class.getName());
|
||||
|
||||
@Override
|
||||
public String getCommand()
|
||||
{
|
||||
return "threadpooldebug";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUsage()
|
||||
{
|
||||
return "threadpooldebug [effect, general, ai, events]";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String handle(ChannelHandlerContext ctx, String[] args)
|
||||
{
|
||||
String pool = "_generalScheduledThreadPool";
|
||||
if (args.length > 0)
|
||||
{
|
||||
switch (args[0])
|
||||
{
|
||||
case "effect":
|
||||
{
|
||||
pool = "_effectsScheduledThreadPool";
|
||||
break;
|
||||
}
|
||||
case "general":
|
||||
{
|
||||
pool = "_generalScheduledThreadPool";
|
||||
break;
|
||||
}
|
||||
case "ai":
|
||||
{
|
||||
pool = "_aiScheduledThreadPool";
|
||||
break;
|
||||
}
|
||||
case "events":
|
||||
{
|
||||
pool = "_eventScheduledThreadPool";
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
return args[0] + " is not implemented!";
|
||||
}
|
||||
}
|
||||
}
|
||||
final ScheduledThreadPoolExecutor executor = getObject(ThreadPoolManager.class, ThreadPoolManager.getInstance(), pool, ScheduledThreadPoolExecutor.class);
|
||||
if (executor == null)
|
||||
{
|
||||
return "Couldn't retreive " + pool + "!";
|
||||
}
|
||||
|
||||
Class<?> adapterClass;
|
||||
try
|
||||
{
|
||||
adapterClass = Class.forName("java.util.concurrent.Executors$RunnableAdapter");
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return e.getMessage();
|
||||
}
|
||||
|
||||
final Map<String, Integer> tasks = new HashMap<>();
|
||||
for (Runnable run : executor.getQueue())
|
||||
{
|
||||
try
|
||||
{
|
||||
if (run instanceof FutureTask)
|
||||
{
|
||||
final Object callableObject = getObject(FutureTask.class, run, "callable", Object.class);
|
||||
final Object taskObject = getObject(adapterClass, callableObject, "task", Object.class);
|
||||
|
||||
if (taskObject instanceof RunnableWrapper)
|
||||
{
|
||||
final Runnable task = getObject(RunnableWrapper.class, taskObject, "_r", Runnable.class);
|
||||
final String name = task.getClass().getName();
|
||||
final int times = tasks.containsKey(name) ? tasks.get(name) : 0;
|
||||
tasks.put(name, times + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
sb.append(pool + " queue size: " + executor.getQueue().size() + Config.EOL);
|
||||
|
||||
tasks.entrySet().stream().sorted(Comparator.comparingInt(Entry::getValue)).forEach(entry -> sb.append("Class: " + entry.getKey() + " = " + entry.getValue() + Config.EOL));
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static <T> T getObject(Class<?> sourceClass, Object sourceInstance, String fieldName, Class<T> targetClass)
|
||||
{
|
||||
try
|
||||
{
|
||||
final Field field = sourceClass.getDeclaredField(fieldName);
|
||||
|
||||
// Mark down if field was accessible
|
||||
final boolean isAccessible = field.isAccessible();
|
||||
|
||||
// Enforce accessible to retrieve the object associated with this field
|
||||
if (!isAccessible)
|
||||
{
|
||||
field.setAccessible(true);
|
||||
}
|
||||
|
||||
// Get the object
|
||||
final Object fieldObject = field.get(sourceInstance);
|
||||
|
||||
// Restore the original accessible state.
|
||||
field.setAccessible(isAccessible);
|
||||
|
||||
// Make sure the object is the one we expect to be
|
||||
if (targetClass.isInstance(fieldObject))
|
||||
{
|
||||
return targetClass.cast(fieldObject);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LOGGER.log(Level.WARNING, "Error while retrieving object of " + sourceInstance.getClass().getName() + "." + fieldName, e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -22,7 +22,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
||||
@@ -203,7 +202,7 @@ public final class CastleDungeon extends AbstractInstance
|
||||
*/
|
||||
private void spawnRaid(Instance instance)
|
||||
{
|
||||
final ScheduledFuture<?> spawnTask = ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
final ScheduledFuture<?> spawnTask = ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
// Get template id of raid
|
||||
final int npcId;
|
||||
@@ -230,7 +229,7 @@ public final class CastleDungeon extends AbstractInstance
|
||||
|
||||
// Unset spawn task reference
|
||||
instance.setParameter("spawnTask", null);
|
||||
}, 2, TimeUnit.MINUTES);
|
||||
}, 2 * 60 * 1000); // 2 minutes
|
||||
|
||||
// Save timer to instance world
|
||||
instance.setParameter("spawnTask", spawnTask);
|
||||
|
@@ -111,7 +111,7 @@ public final class ChamberOfDelusion extends AbstractInstance
|
||||
changeRoom(instance);
|
||||
|
||||
// Start banish task
|
||||
final ScheduledFuture<?> banishTask = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(() ->
|
||||
final ScheduledFuture<?> banishTask = ThreadPoolManager.scheduleAtFixedRate(() ->
|
||||
{
|
||||
if (instance.getRemainingTime() < 60000)
|
||||
{
|
||||
@@ -410,7 +410,7 @@ public final class ChamberOfDelusion extends AbstractInstance
|
||||
final long nextInterval = (bossRoom) ? 60000L : (ROOM_CHANGE_INTERVAL + getRandom(ROOM_CHANGE_RANDOM_TIME)) * 1000L;
|
||||
if (world.getRemainingTime() > nextInterval)
|
||||
{
|
||||
final ScheduledFuture<?> roomChangeTask = ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
final ScheduledFuture<?> roomChangeTask = ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
try
|
||||
{
|
||||
|
@@ -22,7 +22,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.l2jmobius.commons.util.CommonUtil;
|
||||
import com.l2jmobius.gameserver.ThreadPoolManager;
|
||||
@@ -226,7 +225,7 @@ public final class FortressDungeon extends AbstractInstance
|
||||
*/
|
||||
private void spawnRaid(Instance instance)
|
||||
{
|
||||
final ScheduledFuture<?> spawnTask = ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
final ScheduledFuture<?> spawnTask = ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
// Get template id of raid
|
||||
final int npcId;
|
||||
@@ -247,7 +246,7 @@ public final class FortressDungeon extends AbstractInstance
|
||||
|
||||
// Unset spawn task reference
|
||||
instance.setParameter("spawnTask", null);
|
||||
}, 2, TimeUnit.MINUTES);
|
||||
}, 2 * 60 * 1000); // 2 minutes
|
||||
|
||||
// Save timer to instance world
|
||||
instance.setParameter("spawnTask", spawnTask);
|
||||
|
@@ -168,7 +168,7 @@ public final class Q10292_SevenSignsGirlOfDoubt extends Quest
|
||||
creature1.setRandomWalking(true);
|
||||
final L2Npc creature2 = addSpawn(CREATURE_OF_THE_DUSK2, 89524, -238131, -9632, 56, false, 0, false, player.getInstanceId());
|
||||
creature2.setRandomWalking(true);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(() ->
|
||||
ThreadPoolManager.schedule(() ->
|
||||
{
|
||||
creature1.deleteMe();
|
||||
creature2.deleteMe();
|
||||
|
@@ -291,11 +291,11 @@ public abstract class AirShipController extends AbstractNpcAI
|
||||
playMovie(_dockedShip.getPassengers(), _movie);
|
||||
}
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(_decayTask, 1000);
|
||||
ThreadPoolManager.schedule(_decayTask, 1000);
|
||||
}
|
||||
else
|
||||
{
|
||||
_departSchedule = ThreadPoolManager.getInstance().scheduleGeneral(_departTask, DEPART_INTERVAL);
|
||||
_departSchedule = ThreadPoolManager.schedule(_departTask, DEPART_INTERVAL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -248,7 +248,7 @@ public final class AirShipGludioGracia extends AbstractNpcAI implements Runnable
|
||||
case 1:
|
||||
// _ship.teleToLocation(-167874, 256731, -509, 41035, false);
|
||||
_ship.setOustLoc(OUST_GRACIA);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
|
||||
ThreadPoolManager.schedule(this, 5000);
|
||||
break;
|
||||
case 2:
|
||||
_ship.executePath(WARPGATE_TO_GRACIA);
|
||||
@@ -257,7 +257,7 @@ public final class AirShipGludioGracia extends AbstractNpcAI implements Runnable
|
||||
broadcastInGracia(NpcStringId.THE_REGULARLY_SCHEDULED_AIRSHIP_HAS_ARRIVED_IT_WILL_DEPART_FOR_THE_ADEN_CONTINENT_IN_1_MINUTE);
|
||||
_ship.setInDock(GRACIA_DOCK_ID);
|
||||
_ship.oustPlayers();
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 60000);
|
||||
ThreadPoolManager.schedule(this, 60000);
|
||||
break;
|
||||
case 4:
|
||||
broadcastInGracia(NpcStringId.THE_REGULARLY_SCHEDULED_AIRSHIP_THAT_FLIES_TO_THE_ADEN_CONTINENT_HAS_DEPARTED);
|
||||
@@ -267,7 +267,7 @@ public final class AirShipGludioGracia extends AbstractNpcAI implements Runnable
|
||||
case 5:
|
||||
// _ship.teleToLocation(-157261, 255664, 221, 64781, false);
|
||||
_ship.setOustLoc(OUST_GLUDIO);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
|
||||
ThreadPoolManager.schedule(this, 5000);
|
||||
break;
|
||||
case 6:
|
||||
_ship.executePath(WARPGATE_TO_GLUDIO);
|
||||
@@ -276,7 +276,7 @@ public final class AirShipGludioGracia extends AbstractNpcAI implements Runnable
|
||||
broadcastInGludio(NpcStringId.THE_REGULARLY_SCHEDULED_AIRSHIP_HAS_ARRIVED_IT_WILL_DEPART_FOR_THE_GRACIA_CONTINENT_IN_1_MINUTE);
|
||||
_ship.setInDock(GLUDIO_DOCK_ID);
|
||||
_ship.oustPlayers();
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 60000);
|
||||
ThreadPoolManager.schedule(this, 60000);
|
||||
break;
|
||||
}
|
||||
_cycle++;
|
||||
|
@@ -175,15 +175,15 @@ public class BoatGludinRune implements Runnable
|
||||
{
|
||||
case 0:
|
||||
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN5);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
|
||||
ThreadPoolManager.schedule(this, 240000);
|
||||
break;
|
||||
case 1:
|
||||
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN1);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
|
||||
ThreadPoolManager.schedule(this, 40000);
|
||||
break;
|
||||
case 2:
|
||||
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], LEAVE_GLUDIN0);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
|
||||
ThreadPoolManager.schedule(this, 20000);
|
||||
break;
|
||||
case 3:
|
||||
BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, false);
|
||||
@@ -191,19 +191,19 @@ public class BoatGludinRune implements Runnable
|
||||
_boat.broadcastPacket(GLUDIN_SOUND);
|
||||
_boat.payForRide(7905, 1, -90015, 150422, -3610);
|
||||
_boat.executePath(GLUDIN_TO_RUNE);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 250000);
|
||||
ThreadPoolManager.schedule(this, 250000);
|
||||
break;
|
||||
case 4:
|
||||
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE15);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
case 5:
|
||||
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE10);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
case 6:
|
||||
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE5);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
|
||||
ThreadPoolManager.schedule(this, 240000);
|
||||
break;
|
||||
case 7:
|
||||
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVAL_RUNE1);
|
||||
@@ -222,7 +222,7 @@ public class BoatGludinRune implements Runnable
|
||||
_shoutCount = 0;
|
||||
}
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
|
||||
ThreadPoolManager.schedule(this, 5000);
|
||||
return;
|
||||
}
|
||||
_boat.executePath(RUNE_DOCK);
|
||||
@@ -231,19 +231,19 @@ public class BoatGludinRune implements Runnable
|
||||
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
|
||||
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], GLUDIN_DOCK[0], ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2);
|
||||
_boat.broadcastPacket(RUNE_SOUND);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
case 10:
|
||||
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE5);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
|
||||
ThreadPoolManager.schedule(this, 240000);
|
||||
break;
|
||||
case 11:
|
||||
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE1);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
|
||||
ThreadPoolManager.schedule(this, 40000);
|
||||
break;
|
||||
case 12:
|
||||
BoatManager.getInstance().broadcastPacket(RUNE_DOCK[0], GLUDIN_DOCK[0], LEAVE_RUNE0);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
|
||||
ThreadPoolManager.schedule(this, 20000);
|
||||
break;
|
||||
case 13:
|
||||
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, false);
|
||||
@@ -251,19 +251,19 @@ public class BoatGludinRune implements Runnable
|
||||
_boat.broadcastPacket(RUNE_SOUND);
|
||||
_boat.payForRide(7904, 1, 34513, -38009, -3640);
|
||||
_boat.executePath(RUNE_TO_GLUDIN);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 60000);
|
||||
ThreadPoolManager.schedule(this, 60000);
|
||||
break;
|
||||
case 14:
|
||||
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN15);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
case 15:
|
||||
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN10);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
case 16:
|
||||
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN5);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
|
||||
ThreadPoolManager.schedule(this, 240000);
|
||||
break;
|
||||
case 17:
|
||||
BoatManager.getInstance().broadcastPacket(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVAL_GLUDIN1);
|
||||
@@ -282,7 +282,7 @@ public class BoatGludinRune implements Runnable
|
||||
_shoutCount = 0;
|
||||
}
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
|
||||
ThreadPoolManager.schedule(this, 5000);
|
||||
return;
|
||||
}
|
||||
_boat.executePath(GLUDIN_DOCK);
|
||||
@@ -291,7 +291,7 @@ public class BoatGludinRune implements Runnable
|
||||
BoatManager.getInstance().dockShip(BoatManager.GLUDIN_HARBOR, true);
|
||||
BoatManager.getInstance().broadcastPackets(GLUDIN_DOCK[0], RUNE_DOCK[0], ARRIVED_AT_GLUDIN, ARRIVED_AT_GLUDIN_2);
|
||||
_boat.broadcastPacket(GLUDIN_SOUND);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
}
|
||||
_shoutCount = 0;
|
||||
|
@@ -118,44 +118,44 @@ public class BoatInnadrilTour implements Runnable
|
||||
{
|
||||
case 0:
|
||||
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL5);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
|
||||
ThreadPoolManager.schedule(this, 240000);
|
||||
break;
|
||||
case 1:
|
||||
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL1);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 40000);
|
||||
ThreadPoolManager.schedule(this, 40000);
|
||||
break;
|
||||
case 2:
|
||||
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, LEAVE_INNADRIL0);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 20000);
|
||||
ThreadPoolManager.schedule(this, 20000);
|
||||
break;
|
||||
case 3:
|
||||
BoatManager.getInstance().broadcastPackets(DOCK, DOCK, LEAVING_INNADRIL, INNADRIL_SOUND);
|
||||
_boat.payForRide(0, 1, 107092, 219098, -3952);
|
||||
_boat.executePath(TOUR);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 650000);
|
||||
ThreadPoolManager.schedule(this, 650000);
|
||||
break;
|
||||
case 4:
|
||||
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL20);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
case 5:
|
||||
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL15);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
case 6:
|
||||
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL10);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
case 7:
|
||||
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL5);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 240000);
|
||||
ThreadPoolManager.schedule(this, 240000);
|
||||
break;
|
||||
case 8:
|
||||
BoatManager.getInstance().broadcastPacket(DOCK, DOCK, ARRIVAL1);
|
||||
break;
|
||||
case 9:
|
||||
BoatManager.getInstance().broadcastPackets(DOCK, DOCK, ARRIVED_AT_INNADRIL, INNADRIL_SOUND);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 300000);
|
||||
ThreadPoolManager.schedule(this, 300000);
|
||||
break;
|
||||
}
|
||||
_cycle++;
|
||||
|
@@ -117,7 +117,7 @@ public class BoatRunePrimeval implements Runnable
|
||||
break;
|
||||
case 1:
|
||||
BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], ARRIVED_AT_PRIMEVAL, ARRIVED_AT_PRIMEVAL_2, PRIMEVAL_SOUND);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 180000);
|
||||
ThreadPoolManager.schedule(this, 180000);
|
||||
break;
|
||||
case 2:
|
||||
BoatManager.getInstance().broadcastPackets(PRIMEVAL_DOCK, RUNE_DOCK[0], LEAVING_PRIMEVAL, PRIMEVAL_SOUND);
|
||||
@@ -138,7 +138,7 @@ public class BoatRunePrimeval implements Runnable
|
||||
_shoutCount = 0;
|
||||
}
|
||||
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 5000);
|
||||
ThreadPoolManager.schedule(this, 5000);
|
||||
return;
|
||||
}
|
||||
_boat.executePath(RUNE_DOCK);
|
||||
@@ -146,7 +146,7 @@ public class BoatRunePrimeval implements Runnable
|
||||
case 4:
|
||||
BoatManager.getInstance().dockShip(BoatManager.RUNE_HARBOR, true);
|
||||
BoatManager.getInstance().broadcastPackets(RUNE_DOCK[0], PRIMEVAL_DOCK, ARRIVED_AT_RUNE, ARRIVED_AT_RUNE_2, RUNE_SOUND);
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(this, 180000);
|
||||
ThreadPoolManager.schedule(this, 180000);
|
||||
break;
|
||||
}
|
||||
_shoutCount = 0;
|
||||
|
Reference in New Issue
Block a user