simulation-backend/src/main/java/com/hivekion/thread/HandleReceiveRunnable.java

101 lines
2.8 KiB
Java
Raw Normal View History

2025-09-11 14:29:58 +08:00
package com.hivekion.thread;
2025-09-19 20:20:34 +08:00
import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.hivekion.Global;
import com.hivekion.common.entity.RequestCmdInfo;
2025-09-21 01:53:44 +08:00
import com.hivekion.common.entity.ResponseCmdInfo;
2025-09-21 00:26:28 +08:00
import com.hivekion.room.RoomManager;
import com.hivekion.room.bean.Room;
2025-09-21 01:53:44 +08:00
import com.hivekion.scenario.entity.ScenarioResource;
import java.util.HashMap;
2025-09-21 00:26:28 +08:00
import java.util.Map;
2025-09-19 20:20:34 +08:00
import lombok.extern.slf4j.Slf4j;
2025-09-11 14:29:58 +08:00
/**
* [类的简要说明]
* <p>
* [详细描述可选]
* <p>
*
* @author LiDongYU
* @since 2025/7/22
*/
2025-09-19 20:20:34 +08:00
@Slf4j
2025-09-17 13:58:20 +08:00
public class HandleReceiveRunnable implements Runnable {
2025-09-11 14:29:58 +08:00
@Override
public void run() {
2025-09-19 20:20:34 +08:00
while (!Thread.currentThread().isInterrupted()) {
2025-09-21 00:26:28 +08:00
try {
2025-09-19 20:20:34 +08:00
RequestCmdInfo requestCmdInfo = Global.receiveCmdInfoQueue.take();
2025-09-21 01:53:44 +08:00
handleMessage(requestCmdInfo);
2025-09-19 20:20:34 +08:00
//消息分发业务bean处理
2025-09-21 00:26:28 +08:00
if (SpringUtil.getBean(WebsocketMsgWrapper.class) != null) {
try {
WebsocketMsgWrapper websocketMsgWrapper = SpringUtil.getBean(WebsocketMsgWrapper.class);
websocketMsgWrapper.msgHandle(requestCmdInfo.getScenarioId(), requestCmdInfo.getRoom(),
requestCmdInfo.getResourceId(), requestCmdInfo.getMessage());
} catch (Exception e) {
log.error("error::", e);
}
} else {
2025-09-19 20:20:34 +08:00
log.warn("==================WebsocketMsgWrapper is null==========================");
}
2025-09-11 14:29:58 +08:00
2025-09-19 20:20:34 +08:00
} catch (Exception e) {
log.error("error::", e);
}
}
2025-09-11 14:29:58 +08:00
}
2025-09-21 00:26:28 +08:00
private void handleMessage(RequestCmdInfo requestCmdInfo) {
2025-09-21 01:53:44 +08:00
2025-09-21 00:26:28 +08:00
try {
switch (requestCmdInfo.getCmdType()) {
case "get_init_path":
handleGetInitPath(requestCmdInfo);
break;
default:
break;
}
} catch (Exception e) {
log.error("error::", e);
}
}
private void handleGetInitPath(RequestCmdInfo requestCmdInfo) {
2025-09-21 01:53:44 +08:00
log.info("接收到请求路线信息::{}", JSON.toJSONString(requestCmdInfo));
2025-09-21 00:26:28 +08:00
Room room = RoomManager.getRoom(requestCmdInfo.getRoom());
2025-09-21 01:53:44 +08:00
if (room != null) {
2025-09-21 00:26:28 +08:00
Map<String, Object> pathMap = room.getPathMap();
2025-09-21 01:53:44 +08:00
pathMap.forEach((k, v) -> {
try {
Map<String, Object> dataMap = new HashMap<>();
Map<String, ScenarioResource> resourceMap = room.getScenarioResourceMap();
dataMap.put("teamType", resourceMap.get(k).getType());
ResponseCmdInfo<Object> respObj = new ResponseCmdInfo<>();
dataMap.put("resourceId", k);
dataMap.put("points", v);
respObj.setData(dataMap);
respObj.setRoom(requestCmdInfo.getRoom());
respObj.setScenarioId(requestCmdInfo.getScenarioId());
respObj.setCmdType("path_init");
Global.sendCmdInfoQueue.add(respObj);
2025-09-21 00:26:28 +08:00
2025-09-21 01:53:44 +08:00
} catch (Exception e) {
log.error("error::", e);
2025-09-21 00:26:28 +08:00
}
});
}
}
2025-09-11 14:29:58 +08:00
}