初次提交
This commit is contained in:
parent
08ee625021
commit
ba59c13054
|
@ -28,12 +28,12 @@ public class CodeGenerator {
|
|||
})
|
||||
.packageConfig(builder -> {
|
||||
builder.parent("com.hivekion") // 设置父包名
|
||||
.moduleName("baseData") // 设置模块名(可选)
|
||||
.moduleName("scenario") // 设置模块名(可选)
|
||||
.pathInfo(Collections.singletonMap(OutputFile.xml,
|
||||
basePath + "/src/main/resources/mapper/tbl")); // 设置mapperXml生成路径
|
||||
})
|
||||
.strategyConfig(builder -> {
|
||||
builder.addInclude("TBL_ORG_SUPPLIER".toLowerCase()) // 设置需要生成的表名(多个用逗号分隔)
|
||||
builder.addInclude("TBL_BATTLE_SUPPLIER".toLowerCase()) // 设置需要生成的表名(多个用逗号分隔)
|
||||
.addTablePrefix("tbl_"); // 设置过滤表前缀
|
||||
})
|
||||
.execute();
|
||||
|
|
|
@ -31,6 +31,7 @@ public class ScenarioResourceController {
|
|||
|
||||
@PostMapping("/save")
|
||||
public ResponseData<Boolean> save(@RequestBody ScenarioResource scenarioResource) {
|
||||
|
||||
if (scenarioResource.getId() == null) {
|
||||
scenarioResource.setId(IdUtils.simpleUUID());
|
||||
scenarioResource.setUserName(SecurityUtils.getCurrentLoginUser().getUsername());
|
||||
|
|
|
@ -2,8 +2,11 @@ package com.hivekion.scenario.controller;
|
|||
|
||||
import com.hivekion.Global;
|
||||
import com.hivekion.baseData.controller.BaseController;
|
||||
import com.hivekion.baseData.entity.Scenario;
|
||||
import com.hivekion.baseData.service.ScenarioService;
|
||||
import com.hivekion.common.entity.PagedResultVo;
|
||||
import com.hivekion.common.entity.ResponseData;
|
||||
import com.hivekion.common.enums.ResultCodeEnum;
|
||||
import com.hivekion.common.security.SecurityUtils;
|
||||
import com.hivekion.common.uuid.IdUtils;
|
||||
import com.hivekion.scenario.bean.ScenarioWsParam;
|
||||
|
@ -39,7 +42,8 @@ public class ScenarioRoomController extends BaseController {
|
|||
private ScenarioTaskService scenarioTaskService;
|
||||
@Resource
|
||||
private ScenarioRoomService scenarioRoomService;
|
||||
|
||||
@Resource
|
||||
private ScenarioService scenarioService;
|
||||
/**
|
||||
* 查询想定列表
|
||||
*
|
||||
|
@ -81,6 +85,14 @@ public class ScenarioRoomController extends BaseController {
|
|||
|
||||
@PostMapping("/start")
|
||||
public ResponseData<Void> start(@RequestBody ScenarioRoom room) {
|
||||
//验证
|
||||
Scenario scenario = scenarioService.getScenarioById(room.getScenarioId());
|
||||
if(scenario==null){
|
||||
return ResponseData.generator(ResultCodeEnum.PARAMETER_ERROR.getCode(),"想定不存在",null);
|
||||
}
|
||||
if(scenarioRoomService.getById(room.getId())==null){
|
||||
return ResponseData.generator(ResultCodeEnum.PARAMETER_ERROR.getCode(),"房间不存在",null);
|
||||
};
|
||||
scenarioTaskService.start(room.getScenarioId(), room.getId());
|
||||
return ResponseData.success(null);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.hivekion.scenario.service;
|
|||
import com.hivekion.scenario.entity.ScenarioResource;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
|
@ -14,5 +15,5 @@ import java.util.List;
|
|||
*/
|
||||
public interface ScenarioResourceService extends IService<ScenarioResource> {
|
||||
List<ScenarioResource> getResourceList(ScenarioResource resource);
|
||||
|
||||
Map<String,ScenarioResource> resourceMap();
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.hivekion.scenario.service;
|
|||
import com.hivekion.baseData.entity.Scenario;
|
||||
import com.hivekion.scenario.TaskFinishedCall;
|
||||
import com.hivekion.scenario.entity.ScenarioTask;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* [类的简要说明]
|
||||
|
@ -19,7 +20,8 @@ public interface TaskLogicService {
|
|||
void handleMoveTask(ScenarioTask task, Scenario scenario, String roomId,double speed,
|
||||
TaskFinishedCall call);
|
||||
//战斗任务
|
||||
void handleBattleTask(ScenarioTask task, Scenario scenario, String roomId);
|
||||
void handleBattleTask(ScenarioTask task, Scenario scenario, String roomId,
|
||||
List<Integer> injuredTimeList);
|
||||
//保障任务
|
||||
|
||||
void supplierTask(ScenarioTask task,Scenario scenario, String roomId);
|
||||
|
|
|
@ -11,8 +11,10 @@ import com.hivekion.scenario.service.IResourceService;
|
|||
import com.hivekion.scenario.service.ScenarioResourceService;
|
||||
import com.hivekion.team.entity.Teaminfo;
|
||||
import com.hivekion.team.service.ITeaminfoService;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
|
@ -99,5 +101,9 @@ public class ScenarioResourceServiceImpl extends
|
|||
return scenarioResourceList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, ScenarioResource> resourceMap() {
|
||||
|
||||
return this.list().stream().collect(Collectors.toMap(ScenarioResource::getId, r -> r));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package com.hivekion.scenario.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
|
@ -16,8 +15,10 @@ import com.hivekion.scenario.mapper.ScenarioTaskMapper;
|
|||
import com.hivekion.scenario.service.ScenarioTaskService;
|
||||
import com.hivekion.scenario.service.TaskLogicService;
|
||||
import com.hivekion.thread.SpringGlobalTaskManager;
|
||||
import java.time.Duration;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.Random;
|
||||
import javax.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
@ -51,7 +52,6 @@ public class ScenarioTaskServiceImpl extends
|
|||
private TaskLogicService taskLogicService;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public void start(Integer scenarioId, String roomId) {
|
||||
log.info("scenarioId::{},roomId::{}", scenarioId, roomId);
|
||||
|
@ -72,7 +72,7 @@ public class ScenarioTaskServiceImpl extends
|
|||
ScenarioTask queryTask = new ScenarioTask();
|
||||
queryTask.setScenarioId(scenarioId);
|
||||
redisUtil.hset(roomId + "_" + scenarioId, "taskList",
|
||||
JSON.toJSONString(queryTaskList(queryTask)));
|
||||
JSONArray.toJSONString(queryTaskList(queryTask)));
|
||||
new Thread(() -> {
|
||||
|
||||
springGlobalTaskManager.startPerSecondTask(roomId + "_" + scenarioId + "_task", () -> {
|
||||
|
@ -90,7 +90,11 @@ public class ScenarioTaskServiceImpl extends
|
|||
|
||||
@Override
|
||||
public void stop(Integer id, String roomId) {
|
||||
if (Global.roomParamMap.get(id + "_" + roomId) != null) {
|
||||
Global.roomParamMap.get(id + "_" + roomId).setMag(1);
|
||||
}
|
||||
|
||||
springGlobalTaskManager.cancelTask(roomId + "_" + id + "_task");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -115,7 +119,7 @@ public class ScenarioTaskServiceImpl extends
|
|||
int duringTime = getCurrentDuringTime(currentScenario, roomId);
|
||||
|
||||
duringTime = duringTime + mag;
|
||||
log.info("duringTime::{}",duringTime);
|
||||
log.info("duringTime::{}", duringTime);
|
||||
redisUtil.hset(roomId + "_" + currentScenario.getId(), "duringTime", duringTime + "");
|
||||
}
|
||||
|
||||
|
@ -147,7 +151,7 @@ public class ScenarioTaskServiceImpl extends
|
|||
|
||||
if (currentScenario.getStartTime().plusSeconds(duringTime)
|
||||
.isAfter(resource.getLastBegTime())) {
|
||||
log.info("{}","start_"+resource.getWeatherType());
|
||||
log.info("{}", "start_" + resource.getWeatherType());
|
||||
resource.setStatus("running");
|
||||
ResponseCmdInfo<Void> responseCmdInfo = new ResponseCmdInfo<>();
|
||||
responseCmdInfo.setScenarioId(currentScenario.getId());
|
||||
|
@ -162,7 +166,7 @@ public class ScenarioTaskServiceImpl extends
|
|||
if ("running".equals(resource.getStatus())) {
|
||||
if (currentScenario.getStartTime().plusSeconds(duringTime)
|
||||
.isAfter(resource.getLastEndTime())) {
|
||||
log.info("{}","stopped_"+resource.getWeatherType());
|
||||
log.info("{}", "stopped_" + resource.getWeatherType());
|
||||
resource.setStatus("stopped");
|
||||
ResponseCmdInfo<Void> responseCmdInfo = new ResponseCmdInfo<>();
|
||||
responseCmdInfo.setScenarioId(currentScenario.getId());
|
||||
|
@ -204,36 +208,59 @@ public class ScenarioTaskServiceImpl extends
|
|||
|
||||
private void taskTrigger(Scenario currentScenario, String roomId) {
|
||||
try {
|
||||
log.info("{}", JSON.toJSONString(currentScenario));
|
||||
|
||||
Object statusObj = redisUtil.hget(roomId + "_" + currentScenario.getId(), "status");
|
||||
if (statusObj != null && statusObj.toString().equals("running")) {
|
||||
Object taskListObj = redisUtil.hget(roomId + "_" + currentScenario.getId(), "taskList");
|
||||
if (taskListObj != null) {
|
||||
|
||||
if (taskListObj instanceof List<?>) {
|
||||
List<?> taskList = (List<?>) taskListObj;
|
||||
for (Object task : taskList) {
|
||||
List<ScenarioTask> taskList = JSONArray.parseArray(taskListObj.toString(),
|
||||
ScenarioTask.class);
|
||||
|
||||
ScenarioTask scenarioTask = (ScenarioTask) task;
|
||||
for (ScenarioTask scenarioTask : taskList) {
|
||||
int duringTime = getCurrentDuringTime(currentScenario, roomId);
|
||||
log.info("task duringTime::{},{},{}", duringTime,
|
||||
currentScenario.getStartTime().plusSeconds(duringTime), scenarioTask.getStartTime());
|
||||
if (currentScenario.getStartTime().plusSeconds(duringTime)
|
||||
.isAfter(scenarioTask.getStartTime())) {
|
||||
switch (scenarioTask.getTaskType()) {
|
||||
case "1":
|
||||
|
||||
taskLogicService.handleMoveTask(scenarioTask, currentScenario, roomId, 18.0,
|
||||
null);
|
||||
|
||||
break;
|
||||
case "2":
|
||||
taskLogicService.handleBattleTask(scenarioTask, currentScenario, roomId);
|
||||
Random random = new Random();
|
||||
List<Integer> randomIntList = new ArrayList<>();
|
||||
long continueSeconds =
|
||||
Duration.between(scenarioTask.getStartTime(), scenarioTask.getEndTime())
|
||||
.toMinutes() * 60;
|
||||
for (int i = 0; i < 5; i++) {
|
||||
randomIntList.add(random.nextInt((int) continueSeconds) + 1);
|
||||
}
|
||||
|
||||
taskLogicService.handleBattleTask(scenarioTask, currentScenario, roomId,
|
||||
randomIntList);
|
||||
|
||||
break;
|
||||
case "4":
|
||||
case "5":
|
||||
case "6":
|
||||
case "7":
|
||||
default:
|
||||
|
||||
log.info("start a type=7 task");
|
||||
taskLogicService.supplierTask(scenarioTask, currentScenario, roomId);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
redisUtil.hset(roomId + "_" + currentScenario.getId(), "taskList",
|
||||
JSONArray.toJSONString(taskList));
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("error::", e);
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package com.hivekion.scenario.service.impl;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.hivekion.Global;
|
||||
import com.hivekion.baseData.entity.Scenario;
|
||||
import com.hivekion.common.MultiPointGeoPosition;
|
||||
|
@ -52,7 +53,8 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|||
Map<String, Object> dataMap = new HashMap<>();
|
||||
cmdInfo.setData(dataMap);
|
||||
dataMap.put("resourceId", scenarioTask.getResourceId());
|
||||
|
||||
cmdInfo.setScenarioId(scenarioTask.getScenarioId());
|
||||
cmdInfo.setRoom(roomId);
|
||||
if ("init".equals(scenarioTask.getStatus())) {
|
||||
scenarioTask.setStatus("running");
|
||||
|
||||
|
@ -66,22 +68,21 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|||
.bodyToMono(String.class)
|
||||
.block();
|
||||
com.alibaba.fastjson2.JSONObject resultObject = JSON.parseObject(result);
|
||||
if (resultObject != null) {
|
||||
if (result != null) {
|
||||
cmdInfo.setCmdType("init_path_planning");
|
||||
cmdInfo.setScenarioId(scenarioTask.getScenarioId());
|
||||
cmdInfo.setRoom(roomId);
|
||||
|
||||
|
||||
dataMap.put("points", resultObject);
|
||||
|
||||
redisUtil.hset(roomId + "_" + currentScenario.getId(),
|
||||
scenarioTask.getId() + "_path_points", resultObject.getJSONArray("paths"));
|
||||
scenarioTask.getId() + "_path_points", result);
|
||||
}
|
||||
|
||||
Global.sendCmdInfoQueue.add(cmdInfo);
|
||||
//获取物资信息
|
||||
//设置获取物资信息
|
||||
StatisticBean statistic = statisticService.statistic(scenarioTask.getResourceId());
|
||||
redisUtil.hset(roomId + "_" + currentScenario.getId(),
|
||||
"resourceId_statistic_" + scenarioTask.getResourceId(), statistic);
|
||||
"resourceId_statistic_" + scenarioTask.getResourceId(), JSON.toJSONString(statistic));
|
||||
} else if ("running".equals(scenarioTask.getStatus())) {
|
||||
|
||||
//消耗油料
|
||||
|
@ -97,47 +98,47 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|||
setStatistic(scenarioTask, currentScenario, roomId, statistic);
|
||||
}
|
||||
//更新坐标
|
||||
List<double[]> points = new ArrayList<>();
|
||||
cmdInfo.setCmdType("current_position");
|
||||
Object pathsObj = redisUtil.hget(roomId + "_" + currentScenario.getId(),
|
||||
scenarioTask.getId() + "_path_points");
|
||||
if (pathsObj != null) {
|
||||
com.alibaba.fastjson2.JSONArray paths = (com.alibaba.fastjson2.JSONArray) pathsObj;
|
||||
com.alibaba.fastjson2.JSONObject jsonObject = (com.alibaba.fastjson2.JSONObject) paths.get(
|
||||
0);
|
||||
com.alibaba.fastjson2.JSONArray pointsArray = jsonObject.getJSONObject("paths")
|
||||
.getJSONObject("points").getJSONArray("coordinates");
|
||||
|
||||
for (int i = 0; i < pointsArray.size(); i++) {
|
||||
com.alibaba.fastjson2.JSONArray coordinateArray = pointsArray.getJSONArray(i);
|
||||
double[] data = new double[coordinateArray.size()];
|
||||
for (int j = 0; j < coordinateArray.size(); j++) {
|
||||
data[j] = coordinateArray.getDouble(j);
|
||||
}
|
||||
points.add(data);
|
||||
}
|
||||
}
|
||||
//查看当前想定持续的时间
|
||||
Object duringObj = redisUtil.hget(roomId + "_" + currentScenario.getId(),
|
||||
"duringTime");
|
||||
if (duringObj != null) {
|
||||
int oldValue = duringObj instanceof Integer ? (Integer) duringObj : 0;
|
||||
PositionResult result = MultiPointGeoPosition.getPosition(points, speed,
|
||||
oldValue);
|
||||
dataMap.put("currentPosition", result);
|
||||
if (result.reached) {
|
||||
if (call != null) {
|
||||
call.doneTask();
|
||||
}
|
||||
}
|
||||
}
|
||||
Global.sendCmdInfoQueue.add(cmdInfo);
|
||||
// List<double[]> points = new ArrayList<>();
|
||||
// cmdInfo.setCmdType("current_position");
|
||||
// Object pathsObj = redisUtil.hget(roomId + "_" + currentScenario.getId(),
|
||||
// scenarioTask.getId() + "_path_points");
|
||||
// if (pathsObj != null) {
|
||||
// JSONObject paths = JSONObject.parseObject(pathsObj.toString());
|
||||
//
|
||||
// com.alibaba.fastjson2.JSONArray pointsArray = paths.getJSONArray("paths").getJSONObject(0)
|
||||
// .getJSONObject("points").getJSONArray("coordinates");
|
||||
//
|
||||
// for (int i = 0; i < pointsArray.size(); i++) {
|
||||
// com.alibaba.fastjson2.JSONArray coordinateArray = pointsArray.getJSONArray(i);
|
||||
// double[] data = new double[coordinateArray.size()];
|
||||
// for (int j = 0; j < coordinateArray.size(); j++) {
|
||||
// data[j] = coordinateArray.getDouble(j);
|
||||
// }
|
||||
// points.add(data);
|
||||
// }
|
||||
// }
|
||||
// //查看当前想定持续的时间
|
||||
// Object duringObj = redisUtil.hget(roomId + "_" + currentScenario.getId(),
|
||||
// "duringTime");
|
||||
// if (duringObj != null) {
|
||||
// int oldValue = duringObj instanceof Integer ? (Integer) duringObj : 0;
|
||||
// PositionResult result = MultiPointGeoPosition.getPosition(points, speed,
|
||||
// oldValue);
|
||||
// dataMap.put("currentPosition", result);
|
||||
// if (result.reached) {
|
||||
// if (call != null) {
|
||||
// call.doneTask();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// Global.sendCmdInfoQueue.add(cmdInfo);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleBattleTask(ScenarioTask task, Scenario scenario, String roomId) {
|
||||
public void handleBattleTask(ScenarioTask task, Scenario scenario, String roomId,
|
||||
List<Integer> injuredTime) {
|
||||
StatisticBean statistic = getStatistic(task, scenario, roomId);
|
||||
int duringTime = getCurrentDuringTime(scenario, roomId);
|
||||
long seconds =
|
||||
|
@ -150,10 +151,20 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|||
.setCurrent(statistic.getAmmunition().getTotal() - seconds * ammunitionUsePerSecond);
|
||||
setStatistic(task, scenario, roomId, statistic);
|
||||
|
||||
|
||||
}
|
||||
//受伤
|
||||
injuredTime.forEach(time -> {
|
||||
if (time == seconds) {
|
||||
if (statistic.getPerson().getCurrent() > 0) {
|
||||
statistic.getPerson().setCurrent(statistic.getPerson().getCurrent() - 1);
|
||||
}
|
||||
|
||||
}
|
||||
});
|
||||
//产生任务
|
||||
|
||||
setStatistic(task, scenario, roomId, statistic);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
|
@ -172,7 +183,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|||
Object statisticObj = redisUtil.hget(roomId + "_" + scenario.getId(),
|
||||
"resourceId_statistic_" + task.getResourceId());
|
||||
if (statisticObj != null) {
|
||||
return (StatisticBean) statisticObj;
|
||||
return JSON.parseObject(statisticObj.toString(), StatisticBean.class);
|
||||
}
|
||||
return new StatisticBean();
|
||||
}
|
||||
|
@ -181,11 +192,13 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|||
private void setStatistic(ScenarioTask task, Scenario scenario, String roomId,
|
||||
StatisticBean bean) {
|
||||
redisUtil.hset(roomId + "_" + scenario.getId(),
|
||||
"resourceId_statistic_" + task.getResourceId(), bean);
|
||||
"resourceId_statistic_" + task.getResourceId(), JSON.toJSONString(bean));
|
||||
//推送到前端
|
||||
ResponseCmdInfo<Map<String, Object>> cmdInfo = new ResponseCmdInfo<>();
|
||||
Map<String, Object> dataMap = new HashMap<>();
|
||||
cmdInfo.setData(dataMap);
|
||||
cmdInfo.setScenarioId(scenario.getId());
|
||||
cmdInfo.setRoom(roomId);
|
||||
dataMap.put("resourceId", task.getResourceId());
|
||||
dataMap.put("statistic", bean);
|
||||
Global.sendCmdInfoQueue.add(cmdInfo);
|
||||
|
@ -193,6 +206,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|||
|
||||
/**
|
||||
* 获取当前想定从开始到现在时间
|
||||
*
|
||||
* @param scenario
|
||||
* @param roomId
|
||||
* @return
|
||||
|
@ -200,7 +214,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
|
|||
private int getCurrentDuringTime(Scenario scenario, String roomId) {
|
||||
Object duringTime = redisUtil.hget(roomId + "_" + scenario.getId(), "duringTime");
|
||||
if (duringTime != null) {
|
||||
return (Integer) duringTime;
|
||||
return Integer.parseInt(duringTime.toString());
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -25,5 +25,5 @@ public class StatisticBean {
|
|||
private FuelInfo fuel = new FuelInfo();
|
||||
//药材
|
||||
private MedicalInfo medical = new MedicalInfo();
|
||||
|
||||
private String status = "init";
|
||||
}
|
||||
|
|
|
@ -1,10 +1,7 @@
|
|||
package com.hivekion.ws;
|
||||
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.hivekion.Global;
|
||||
import com.hivekion.common.entity.RequestCmdInfo;
|
||||
import com.hivekion.common.entity.ResponseCmdInfo;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import javax.websocket.OnClose;
|
||||
|
@ -56,6 +53,10 @@ public class WsServer {
|
|||
Map<String, Session> sessionMap = new ConcurrentHashMap<>();
|
||||
sessionMap.put(session.getId(), session);
|
||||
SESSION_MAP.get(scenarioId).put(room, sessionMap);
|
||||
|
||||
} else {
|
||||
|
||||
SESSION_MAP.get(scenarioId).get(room).put(session.getId(), session);
|
||||
}
|
||||
|
||||
|
||||
|
@ -110,18 +111,19 @@ public class WsServer {
|
|||
}
|
||||
|
||||
public static void sendMessage(Integer scenarioId, String room, String message) {
|
||||
log.info("send {},{},{}",message,scenarioId,room);
|
||||
log.info("send {},{},{}", message, scenarioId, room);
|
||||
Object lock = lockMap.computeIfAbsent(scenarioId, k -> new Object());
|
||||
synchronized (lock) {
|
||||
Map<String, Map<String, Session>> roomMap = SESSION_MAP.get(String.valueOf(scenarioId));
|
||||
if(roomMap!=null){
|
||||
log.info("roomMap:{}", roomMap);
|
||||
if (roomMap != null) {
|
||||
if (roomMap.containsKey(room)) {
|
||||
Map<String, Session> singleRoomMap = roomMap.get(room);
|
||||
singleRoomMap.forEach((sessionId, session) -> {
|
||||
try{
|
||||
try {
|
||||
session.getBasicRemote().sendText(message);
|
||||
}catch (Exception e){
|
||||
log.error("error::",e);
|
||||
} catch (Exception e) {
|
||||
log.error("error::", e);
|
||||
}
|
||||
|
||||
});
|
||||
|
|
Loading…
Reference in New Issue
Block a user