From c2227595849f4efd2fd8205ad4d43832b53c94ba Mon Sep 17 00:00:00 2001 From: MobiusDev <8391001+MobiusDevelopment@users.noreply.github.com> Date: Wed, 27 Sep 2017 13:05:52 +0000 Subject: [PATCH] Simplified DecayTaskManager logic. --- .../taskmanager/DecayTaskManager.java | 27 ++++--------------- .../taskmanager/DecayTaskManager.java | 27 ++++--------------- .../taskmanager/DecayTaskManager.java | 27 ++++--------------- .../taskmanager/DecayTaskManager.java | 24 +++++------------ .../taskmanager/DecayTaskManager.java | 27 ++++--------------- 5 files changed, 26 insertions(+), 106 deletions(-) diff --git a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java index fc7e03308c..b14573bf0d 100644 --- a/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java +++ b/L2J_Mobius_1.0_Ertheia/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java @@ -19,12 +19,11 @@ package com.l2jmobius.gameserver.taskmanager; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import com.l2jmobius.Config; +import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; @@ -34,8 +33,6 @@ import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; */ public final class DecayTaskManager { - private final ScheduledExecutorService _decayExecutor = Executors.newSingleThreadScheduledExecutor(); - protected final Map> _decayTasks = new ConcurrentHashMap<>(); /** @@ -66,34 +63,20 @@ public final class DecayTaskManager delay += Config.SPOILED_CORPSE_EXTEND_TIME; } - add(character, delay, TimeUnit.SECONDS); + add(character, delay); } /** * Adds a decay task for the specified character.
*
- * If the decay task already exists it cancels it and re-adds it. * @param character the character * @param delay the delay - * @param timeUnit the time unit of the delay parameter */ - public void add(L2Character character, long delay, TimeUnit timeUnit) + public void add(L2Character character, long delay) { - ScheduledFuture decayTask = _decayExecutor.schedule(new DecayTask(character), delay, TimeUnit.SECONDS); - - decayTask = _decayTasks.put(character, decayTask); - // if decay task already existed cancel it so we use the new time - if (decayTask != null) + if (!_decayTasks.containsKey(character)) { - if (!decayTask.cancel(false)) - { - // old decay task was completed while canceling it remove and cancel the new one - decayTask = _decayTasks.remove(character); - if (decayTask != null) - { - decayTask.cancel(false); - } - } + _decayTasks.put(character, ThreadPoolManager.schedule(new DecayTask(character), delay * 1000)); } } diff --git a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java index fc7e03308c..b14573bf0d 100644 --- a/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java +++ b/L2J_Mobius_2.5_Underground/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java @@ -19,12 +19,11 @@ package com.l2jmobius.gameserver.taskmanager; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import com.l2jmobius.Config; +import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; @@ -34,8 +33,6 @@ import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; */ public final class DecayTaskManager { - private final ScheduledExecutorService _decayExecutor = Executors.newSingleThreadScheduledExecutor(); - protected final Map> _decayTasks = new ConcurrentHashMap<>(); /** @@ -66,34 +63,20 @@ public final class DecayTaskManager delay += Config.SPOILED_CORPSE_EXTEND_TIME; } - add(character, delay, TimeUnit.SECONDS); + add(character, delay); } /** * Adds a decay task for the specified character.
*
- * If the decay task already exists it cancels it and re-adds it. * @param character the character * @param delay the delay - * @param timeUnit the time unit of the delay parameter */ - public void add(L2Character character, long delay, TimeUnit timeUnit) + public void add(L2Character character, long delay) { - ScheduledFuture decayTask = _decayExecutor.schedule(new DecayTask(character), delay, TimeUnit.SECONDS); - - decayTask = _decayTasks.put(character, decayTask); - // if decay task already existed cancel it so we use the new time - if (decayTask != null) + if (!_decayTasks.containsKey(character)) { - if (!decayTask.cancel(false)) - { - // old decay task was completed while canceling it remove and cancel the new one - decayTask = _decayTasks.remove(character); - if (decayTask != null) - { - decayTask.cancel(false); - } - } + _decayTasks.put(character, ThreadPoolManager.schedule(new DecayTask(character), delay * 1000)); } } diff --git a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java index fc7e03308c..b14573bf0d 100644 --- a/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java +++ b/L2J_Mobius_3.0_Helios/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java @@ -19,12 +19,11 @@ package com.l2jmobius.gameserver.taskmanager; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import com.l2jmobius.Config; +import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; @@ -34,8 +33,6 @@ import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; */ public final class DecayTaskManager { - private final ScheduledExecutorService _decayExecutor = Executors.newSingleThreadScheduledExecutor(); - protected final Map> _decayTasks = new ConcurrentHashMap<>(); /** @@ -66,34 +63,20 @@ public final class DecayTaskManager delay += Config.SPOILED_CORPSE_EXTEND_TIME; } - add(character, delay, TimeUnit.SECONDS); + add(character, delay); } /** * Adds a decay task for the specified character.
*
- * If the decay task already exists it cancels it and re-adds it. * @param character the character * @param delay the delay - * @param timeUnit the time unit of the delay parameter */ - public void add(L2Character character, long delay, TimeUnit timeUnit) + public void add(L2Character character, long delay) { - ScheduledFuture decayTask = _decayExecutor.schedule(new DecayTask(character), delay, TimeUnit.SECONDS); - - decayTask = _decayTasks.put(character, decayTask); - // if decay task already existed cancel it so we use the new time - if (decayTask != null) + if (!_decayTasks.containsKey(character)) { - if (!decayTask.cancel(false)) - { - // old decay task was completed while canceling it remove and cancel the new one - decayTask = _decayTasks.remove(character); - if (decayTask != null) - { - decayTask.cancel(false); - } - } + _decayTasks.put(character, ThreadPoolManager.schedule(new DecayTask(character), delay * 1000)); } } diff --git a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java index 0cfb8d2bcb..6893e43250 100644 --- a/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java +++ b/L2J_Mobius_CT_2.6_HighFive/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java @@ -19,12 +19,11 @@ package com.l2jmobius.gameserver.taskmanager; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import com.l2jmobius.Config; +import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; @@ -34,8 +33,6 @@ import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; */ public final class DecayTaskManager { - private final ScheduledExecutorService _decayExecutor = Executors.newSingleThreadScheduledExecutor(); - protected final Map> _decayTasks = new ConcurrentHashMap<>(); /** @@ -61,34 +58,25 @@ public final class DecayTaskManager delay = Config.DEFAULT_CORPSE_TIME; } - if ((character instanceof L2Attackable) && (((L2Attackable) character).isSpoiled() || ((L2Attackable) character).isSeeded())) + if (character.isAttackable() && (((L2Attackable) character).isSpoiled() || ((L2Attackable) character).isSeeded())) { delay += Config.SPOILED_CORPSE_EXTEND_TIME; } - add(character, delay, TimeUnit.SECONDS); + add(character, delay); } /** * Adds a decay task for the specified character.
*
- * If the decay task already exists it cancels it and re-adds it. * @param character the character * @param delay the delay - * @param timeUnit the time unit of the delay parameter */ - public void add(L2Character character, long delay, TimeUnit timeUnit) + public void add(L2Character character, long delay) { - ScheduledFuture decayTask = _decayTasks.put(character, _decayExecutor.schedule(new DecayTask(character), delay, TimeUnit.SECONDS)); - - if ((decayTask == null) || decayTask.cancel(false)) + if (!_decayTasks.containsKey(character)) { - return; - } - decayTask = _decayTasks.remove(character); - if (decayTask != null) - { - decayTask.cancel(false); + _decayTasks.put(character, ThreadPoolManager.schedule(new DecayTask(character), delay * 1000)); } } diff --git a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java index fc7e03308c..b14573bf0d 100644 --- a/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java +++ b/L2J_Mobius_Classic_2.0_Saviors/java/com/l2jmobius/gameserver/taskmanager/DecayTaskManager.java @@ -19,12 +19,11 @@ package com.l2jmobius.gameserver.taskmanager; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; import com.l2jmobius.Config; +import com.l2jmobius.gameserver.ThreadPoolManager; import com.l2jmobius.gameserver.model.actor.L2Attackable; import com.l2jmobius.gameserver.model.actor.L2Character; import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; @@ -34,8 +33,6 @@ import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate; */ public final class DecayTaskManager { - private final ScheduledExecutorService _decayExecutor = Executors.newSingleThreadScheduledExecutor(); - protected final Map> _decayTasks = new ConcurrentHashMap<>(); /** @@ -66,34 +63,20 @@ public final class DecayTaskManager delay += Config.SPOILED_CORPSE_EXTEND_TIME; } - add(character, delay, TimeUnit.SECONDS); + add(character, delay); } /** * Adds a decay task for the specified character.
*
- * If the decay task already exists it cancels it and re-adds it. * @param character the character * @param delay the delay - * @param timeUnit the time unit of the delay parameter */ - public void add(L2Character character, long delay, TimeUnit timeUnit) + public void add(L2Character character, long delay) { - ScheduledFuture decayTask = _decayExecutor.schedule(new DecayTask(character), delay, TimeUnit.SECONDS); - - decayTask = _decayTasks.put(character, decayTask); - // if decay task already existed cancel it so we use the new time - if (decayTask != null) + if (!_decayTasks.containsKey(character)) { - if (!decayTask.cancel(false)) - { - // old decay task was completed while canceling it remove and cancel the new one - decayTask = _decayTasks.remove(character); - if (decayTask != null) - { - decayTask.cancel(false); - } - } + _decayTasks.put(character, ThreadPoolManager.schedule(new DecayTask(character), delay * 1000)); } }