package com.hivekion.thread; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson.JSON; import com.hivekion.Global; import com.hivekion.common.entity.RequestCmdInfo; import com.hivekion.common.entity.ResponseCmdInfo; import com.hivekion.room.RoomManager; import com.hivekion.room.bean.Room; import com.hivekion.scenario.entity.ScenarioResource; import java.util.HashMap; import java.util.Map; import lombok.extern.slf4j.Slf4j; /** * [类的简要说明] *

* [详细描述,可选] *

* * @author LiDongYU * @since 2025/7/22 */ @Slf4j public class HandleReceiveRunnable implements Runnable { @Override public void run() { while (!Thread.currentThread().isInterrupted()) { try { RequestCmdInfo requestCmdInfo = Global.receiveCmdInfoQueue.take(); handleMessage(requestCmdInfo); //消息分发业务bean处理 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 { log.warn("==================WebsocketMsgWrapper is null=========================="); } } catch (Exception e) { log.error("error::", e); } } } private void handleMessage(RequestCmdInfo requestCmdInfo) { 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) { log.info("接收到请求路线信息::{}", JSON.toJSONString(requestCmdInfo)); Room room = RoomManager.getRoom(requestCmdInfo.getRoom()); if (room != null) { Map pathMap = room.getPathMap(); pathMap.forEach((k, v) -> { try { Map dataMap = new HashMap<>(); Map resourceMap = room.getScenarioResourceMap(); dataMap.put("teamType", resourceMap.get(k).getType()); ResponseCmdInfo 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); } catch (Exception e) { log.error("error::", e); } }); } } }