任务相关
This commit is contained in:
parent
b6bc87ffab
commit
76371d641c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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秒
|
||||||
|
//人员消耗
|
||||||
|
//可能会产生需求,保障需求
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user