From cdeb057ab6d041660332ab53f31c84f8a4e83074 Mon Sep 17 00:00:00 2001 From: grimm <1769111741@qq.com> Date: Mon, 6 May 2024 17:55:47 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AB=9E=E6=8A=80=E5=9C=BA=E5=8F=91=E5=A5=96?= =?UTF-8?q?=E7=BA=BF=E7=A8=8B=E6=B1=A0=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/ljsd/GameApplication.java | 2 - .../ljsd/jieling/logic/arena/ArenaLogic.java | 17 +---- .../ljsd/jieling/thread/ThreadManager.java | 68 ++----------------- .../java/com/ljsd/jieling/util/TaskKit.java | 32 +++++++++ 4 files changed, 38 insertions(+), 81 deletions(-) diff --git a/serverlogic/src/main/java/com/ljsd/GameApplication.java b/serverlogic/src/main/java/com/ljsd/GameApplication.java index 0921a0ae8..1ddefecd4 100644 --- a/serverlogic/src/main/java/com/ljsd/GameApplication.java +++ b/serverlogic/src/main/java/com/ljsd/GameApplication.java @@ -8,7 +8,6 @@ import com.ljsd.jieling.db.redis.RedisUtil; import com.ljsd.jieling.hotfix.HotfixUtil; import com.ljsd.jieling.logic.GlobleSystemLogic; import com.ljsd.jieling.logic.activity.crossService.CrossServiceLogic; -import com.ljsd.jieling.logic.arena.ArenaLogic; import com.ljsd.jieling.logic.dao.ServerConfig; import com.ljsd.jieling.logic.family.GuildLogic; import com.ljsd.jieling.network.NetManager; @@ -63,7 +62,6 @@ public class GameApplication { GlobleSystemLogic.getInstence().getCrossGroup(); GuildLogic.getInstance().guildCacheHandle(); HotfixUtil.getInstance(); - ArenaLogic.getInstance().dailySendReward(); //控制台gm Scanner sc = new Scanner(System.in); while (sc.hasNext()) { diff --git a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java index 9ec0ddf2b..3771d0da0 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/logic/arena/ArenaLogic.java @@ -3,9 +3,6 @@ package com.ljsd.jieling.logic.arena; import com.ljsd.GameApplication; import com.ljsd.fight.ArenaRecord; import com.ljsd.fight.FightType; -import com.ljsd.jieling.core.GlobalsDef; -import com.ljsd.jieling.config.clazzStaticCfg.SArenaRobotStaticConfig; -import com.ljsd.jieling.core.FunctionIdEnum; import com.ljsd.jieling.db.mongo.MongoUtil; import com.ljsd.jieling.db.redis.RedisKey; import com.ljsd.jieling.db.redis.RedisUtil; @@ -35,7 +32,6 @@ import com.ljsd.jieling.logic.rank.RankEnum; import com.ljsd.jieling.logic.redpacket.WelfareRedPackEvent; import com.ljsd.jieling.logic.redpacket.WelfareRedPacketType; import com.ljsd.jieling.network.session.ISession; -import com.ljsd.jieling.thread.ThreadManager; import com.ljsd.jieling.util.*; import config.*; import manager.STableManager; @@ -47,7 +43,6 @@ import rpc.protocols.CommonProto; import rpc.protocols.FightInfoProto; import rpc.protocols.MessageTypeProto; import util.MathUtils; -import util.StringUtil; import util.TimeUtils; import java.util.*; @@ -913,14 +908,6 @@ public class ArenaLogic { return nextMonday - TimeUtils.HOUR; } - /** - * 新竞技场每日发奖 - */ - public void dailySendReward(){ - ThreadManager.scheduleDailyCycleTask(this::newArenaRewardPrimaryDaily,21,0,0); - ThreadManager.scheduleDailyCycleTask(this::newArenaRewardAdvancedDaily,21,1,0); - } - /** * 赛季结束赋值重置标记 */ @@ -935,7 +922,7 @@ public class ArenaLogic { /** * 新竞技场每日奖励 */ - public void newArenaRewardPrimaryDaily(){ + public static void newArenaRewardPrimaryDaily(){ Thread.currentThread().setName("arena_primary_daily_sendReward"); long start = TimeUtils.now(); List localRooms = SArenaRoom.getLocalRooms(); @@ -995,7 +982,7 @@ public class ArenaLogic { /** * 新竞技场赛季奖励 */ - public void newArenaRewardAdvancedDaily(){ + public static void newArenaRewardAdvancedDaily(){ Thread.currentThread().setName("arena_Advanced_daily_sendReward"); long start = TimeUtils.now(); // 缓存锁,保证只有一个服务器执行 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java index 5747f58ad..5149ba716 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/thread/ThreadManager.java @@ -2,6 +2,7 @@ package com.ljsd.jieling.thread; import com.ljsd.IManager; +import com.ljsd.jieling.logic.arena.ArenaLogic; import com.ljsd.jieling.logic.dao.UserManager; import com.ljsd.jieling.logic.rank.CrossRankManager; import com.ljsd.jieling.thread.task.*; @@ -11,7 +12,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import util.TimeUtils; -import java.util.Calendar; import java.util.HashSet; import java.util.Set; import java.util.concurrent.*; @@ -126,6 +126,9 @@ public class ThreadManager implements IManager { TaskKit.scheduleAtFixedRate(UserManager::checkOffline, 2, 1, TimeUnit.HOURS); // 跨服排行榜 每俩小时运行一次 TaskKit.scheduleAtFixedRate(CrossRankManager::crossRankHandle, 60, 7200, TimeUnit.SECONDS); + // 新竞技场每日奖励发放 + TaskKit.scheduleDailyCycleTask(ArenaLogic::newArenaRewardPrimaryDaily,21,0,0); + TaskKit.scheduleDailyCycleTask(ArenaLogic::newArenaRewardAdvancedDaily,21,1,0); // 定时重启线程池 scheduledFutureSets.add(scheduledExecutor.scheduleAtFixedRate(new Thread(() -> { long lastMilis = System.currentTimeMillis(); @@ -137,69 +140,6 @@ public class ThreadManager implements IManager { }), delayForMinute, 1, TimeUnit.SECONDS)); } - /** - * 每日循环,指定时间运行任务 - * @param hourOfDay 小时/24 - * @param minute 分 - * @param second 秒 - * @param task 任务 - */ - public static void scheduleDailyCycleTask(Runnable task, int hourOfDay, int minute, int second) { - // 获取当前时间 - Calendar now = Calendar.getInstance(); - Calendar nextRun = (Calendar) now.clone(); - - // 设置下一次执行任务的时间 - nextRun.set(Calendar.HOUR_OF_DAY, hourOfDay); - nextRun.set(Calendar.MINUTE, minute); - nextRun.set(Calendar.SECOND, second); - nextRun.set(Calendar.MILLISECOND, 0); - - // 如果今天的执行时间已经过去,则第一次执行时间设为明天 - if (nextRun.before(now)) { - nextRun.add(Calendar.DATE, 1); - } - - // 计算从当前时间到下一个执行时间的延迟 - long initialDelay = nextRun.getTimeInMillis() - now.getTimeInMillis(); - - // 以24小时为周期执行任务 - long period = 24 * 60 * 60 * 1000; - - TaskKit.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS); - } - - /** - * 周循环定时任务 - * @param task 任务 - * @param dayOfWeek 周几 - * @param hourOfDay 时 - * @param minute 分 - * @param second 秒 - */ - public static void scheduleWeeklyCycleTask(Runnable task, int dayOfWeek, int hourOfDay, int minute, int second) { - Calendar now = Calendar.getInstance(); - Calendar nextRun = (Calendar) now.clone(); - - nextRun.set(Calendar.DAY_OF_WEEK, dayOfWeek); - nextRun.set(Calendar.HOUR_OF_DAY, hourOfDay); - nextRun.set(Calendar.MINUTE, minute); - nextRun.set(Calendar.SECOND, second); - nextRun.set(Calendar.MILLISECOND, 0); - - // 如果这周的执行时间已经过去,则将下一次执行时间设为下周 - if (nextRun.before(now) || nextRun.equals(now)) { - nextRun.add(Calendar.DATE, 7); - } - - // 计算从当前时间到下一次执行时间的延迟 - long initialDelay = nextRun.getTimeInMillis() - now.getTimeInMillis(); - // 设置周期为一周 - long period = 7 * 24 * 60 * 60 * 1000; - - scheduledExecutor.scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS); - } - /** * 在指定的延时之后运行一次任务。 * @param task 具体待执行的任务 diff --git a/serverlogic/src/main/java/com/ljsd/jieling/util/TaskKit.java b/serverlogic/src/main/java/com/ljsd/jieling/util/TaskKit.java index 5457d1d5d..546ca9024 100644 --- a/serverlogic/src/main/java/com/ljsd/jieling/util/TaskKit.java +++ b/serverlogic/src/main/java/com/ljsd/jieling/util/TaskKit.java @@ -136,6 +136,38 @@ public abstract class TaskKit { timerList.add(timer); } + /** + * 每日循环,指定时间运行任务 + * @param hourOfDay 小时/24 + * @param minute 分 + * @param second 秒 + * @param task 任务 + */ + public static void scheduleDailyCycleTask(Runnable task, int hourOfDay, int minute, int second) { + // 获取当前时间 + Calendar now = Calendar.getInstance(); + Calendar nextRun = (Calendar) now.clone(); + + // 设置下一次执行任务的时间 + nextRun.set(Calendar.HOUR_OF_DAY, hourOfDay); + nextRun.set(Calendar.MINUTE, minute); + nextRun.set(Calendar.SECOND, second); + nextRun.set(Calendar.MILLISECOND, 0); + + // 如果今天的执行时间已经过去,则第一次执行时间设为明天 + if (nextRun.before(now)) { + nextRun.add(Calendar.DATE, 1); + } + + // 计算从当前时间到下一个执行时间的延迟 + long initialDelay = nextRun.getTimeInMillis() - now.getTimeInMillis(); + + // 以24小时为周期执行任务 + long period = 24 * 60 * 60 * 1000; + + scheduleAtFixedRate(task, initialDelay, period, TimeUnit.MILLISECONDS); + } + /** * 调整线程池大小 */