From 76371d641cc76c1b78f3049b7c42231714718707 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=8E=89=E4=B8=9C?= <129883742+liyudong2018@users.noreply.github.com> Date: Thu, 18 Sep 2025 11:20:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/hivekion/room/bean/AbtParentTask.java | 2 +- .../java/com/hivekion/room/bean/BattleRootTask.java | 12 ++++++++---- src/main/java/com/hivekion/room/bean/Room.java | 9 +++++---- .../service/impl/ScenarioTaskServiceImpl.java | 1 + 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/hivekion/room/bean/AbtParentTask.java b/src/main/java/com/hivekion/room/bean/AbtParentTask.java index 04f498f..c9f8982 100644 --- a/src/main/java/com/hivekion/room/bean/AbtParentTask.java +++ b/src/main/java/com/hivekion/room/bean/AbtParentTask.java @@ -62,7 +62,7 @@ public abstract class AbtParentTask implements TaskAction { duringTime.getAndSet(scenarioWsParam.getMag()); } - business(); + }, 0, 1, TimeUnit.SECONDS); } diff --git a/src/main/java/com/hivekion/room/bean/BattleRootTask.java b/src/main/java/com/hivekion/room/bean/BattleRootTask.java index b4ecc35..e18d277 100644 --- a/src/main/java/com/hivekion/room/bean/BattleRootTask.java +++ b/src/main/java/com/hivekion/room/bean/BattleRootTask.java @@ -1,5 +1,6 @@ package com.hivekion.room.bean; +import com.hivekion.Global; import com.hivekion.scenario.entity.ScenarioTask; /** @@ -17,15 +18,18 @@ public class BattleRootTask extends AbtParentTask { public BattleRootTask(ScenarioTask scenarioTask,String roomId) { super(scenarioTask,roomId); } - + //执行一次 @Override public void doSomeThing() { - + //会知道想定ID, resourceId; } - + //固定间隔执行 @Override protected void business() { - + // Global.roomParamMap.get(scenarioTask.getScenarioId() + "," + this.roomId); 可以获取当前想定的步长 + //战斗需要消耗弹药 按时间消耗,30秒 + //人员消耗 + //可能会产生需求,保障需求 } diff --git a/src/main/java/com/hivekion/room/bean/Room.java b/src/main/java/com/hivekion/room/bean/Room.java index 8fb607d..961fe81 100644 --- a/src/main/java/com/hivekion/room/bean/Room.java +++ b/src/main/java/com/hivekion/room/bean/Room.java @@ -10,6 +10,7 @@ import com.hivekion.scenario.bean.ScenarioWsParam; import java.time.format.DateTimeFormatter; import java.util.HashMap; import java.util.Map; +import java.util.NavigableMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentNavigableMap; import java.util.concurrent.ConcurrentSkipListMap; @@ -53,7 +54,7 @@ public class Room implements AutoCloseable { /** * 任务容器 */ - private Map> actionMap = new ConcurrentSkipListMap<>(); + private NavigableMap> actionMap = new ConcurrentSkipListMap<>(); //日期格式化 private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); //线程池 @@ -124,15 +125,15 @@ public class Room implements AutoCloseable { sendRemainTime((totalTime.get() - curTime)); - Map actions = actionMap.get(curTime); + Map actions = actionMap.ceilingEntry(curTime); if (actions != null && !actions.isEmpty()) { - // 先复制key,避免并发删除问题 + for (Map.Entry entry : actions.entrySet()) { actionExecutor.submit(entry.getValue()::doSomeThing); } // 全部执行后再清空 actions.clear(); - // 或者 actionMap.remove(curTime); 如果你不需要重用这个 key + actionMap.remove(curTime); } }, 0, 1, TimeUnit.SECONDS); diff --git a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java index 7666f77..cd9524c 100644 --- a/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java +++ b/src/main/java/com/hivekion/scenario/service/impl/ScenarioTaskServiceImpl.java @@ -50,6 +50,7 @@ public class ScenarioTaskServiceImpl extends //查询想定的持续时间 Scenario scenario = scenarioService.getScenarioById(scenarioId); if (scenario != null) { + //查看想定的持续时间 long duringTime = Duration.between(scenario.getStartTime(),scenario.getEndTime() ) .getSeconds(); RoomManager.startRoom(roomId, scenario, duringTime);