任务相关

This commit is contained in:
李玉东 2025-09-18 11:20:55 +08:00
parent b6bc87ffab
commit 76371d641c
4 changed files with 15 additions and 9 deletions

View File

@ -62,7 +62,7 @@ public abstract class AbtParentTask implements TaskAction {
duringTime.getAndSet(scenarioWsParam.getMag()); duringTime.getAndSet(scenarioWsParam.getMag());
} }
business();
}, 0, 1, TimeUnit.SECONDS); }, 0, 1, TimeUnit.SECONDS);
} }

View File

@ -1,5 +1,6 @@
package com.hivekion.room.bean; package com.hivekion.room.bean;
import com.hivekion.Global;
import com.hivekion.scenario.entity.ScenarioTask; import com.hivekion.scenario.entity.ScenarioTask;
/** /**
@ -17,15 +18,18 @@ public class BattleRootTask extends AbtParentTask {
public BattleRootTask(ScenarioTask scenarioTask,String roomId) { public BattleRootTask(ScenarioTask scenarioTask,String roomId) {
super(scenarioTask,roomId); super(scenarioTask,roomId);
} }
//执行一次
@Override @Override
public void doSomeThing() { public void doSomeThing() {
//会知道想定ID, resourceId;
} }
//固定间隔执行
@Override @Override
protected void business() { protected void business() {
// Global.roomParamMap.get(scenarioTask.getScenarioId() + "," + this.roomId); 可以获取当前想定的步长
//战斗需要消耗弹药 按时间消耗30秒
//人员消耗
//可能会产生需求保障需求
} }

View File

@ -10,6 +10,7 @@ import com.hivekion.scenario.bean.ScenarioWsParam;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.NavigableMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentNavigableMap; import java.util.concurrent.ConcurrentNavigableMap;
import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListMap;
@ -53,7 +54,7 @@ public class Room implements AutoCloseable {
/** /**
* 任务容器 * 任务容器
*/ */
private Map<Long, Map<String, TaskAction>> actionMap = new ConcurrentSkipListMap<>(); private NavigableMap<Long, Map<String, TaskAction>> actionMap = new ConcurrentSkipListMap<>();
//日期格式化 //日期格式化
private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); private DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//线程池 //线程池
@ -124,15 +125,15 @@ public class Room implements AutoCloseable {
sendRemainTime((totalTime.get() - curTime)); sendRemainTime((totalTime.get() - curTime));
Map<String, TaskAction> actions = actionMap.get(curTime); Map<String, TaskAction> actions = actionMap.ceilingEntry(curTime);
if (actions != null && !actions.isEmpty()) { if (actions != null && !actions.isEmpty()) {
// 先复制key避免并发删除问题
for (Map.Entry<String, TaskAction> entry : actions.entrySet()) { for (Map.Entry<String, TaskAction> entry : actions.entrySet()) {
actionExecutor.submit(entry.getValue()::doSomeThing); actionExecutor.submit(entry.getValue()::doSomeThing);
} }
// 全部执行后再清空 // 全部执行后再清空
actions.clear(); actions.clear();
// 或者 actionMap.remove(curTime); 如果你不需要重用这个 key
actionMap.remove(curTime); actionMap.remove(curTime);
} }
}, 0, 1, TimeUnit.SECONDS); }, 0, 1, TimeUnit.SECONDS);

View File

@ -50,6 +50,7 @@ public class ScenarioTaskServiceImpl extends
//查询想定的持续时间 //查询想定的持续时间
Scenario scenario = scenarioService.getScenarioById(scenarioId); Scenario scenario = scenarioService.getScenarioById(scenarioId);
if (scenario != null) { if (scenario != null) {
//查看想定的持续时间
long duringTime = Duration.between(scenario.getStartTime(),scenario.getEndTime() ) long duringTime = Duration.between(scenario.getStartTime(),scenario.getEndTime() )
.getSeconds(); .getSeconds();
RoomManager.startRoom(roomId, scenario, duringTime); RoomManager.startRoom(roomId, scenario, duringTime);