101 lines
2.8 KiB
Java
101 lines
2.8 KiB
Java
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;
|
|
|
|
/**
|
|
* [类的简要说明]
|
|
* <p>
|
|
* [详细描述,可选]
|
|
* <p>
|
|
*
|
|
* @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<String, Object> pathMap = room.getPathMap();
|
|
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);
|
|
|
|
} catch (Exception e) {
|
|
log.error("error::", e);
|
|
}
|
|
|
|
});
|
|
}
|
|
}
|
|
}
|