liusuyi
2025-02-20 ab55c60112c72fcfe7836a91a278f316cddd7c00
ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
@@ -3,7 +3,7 @@
import com.alibaba.fastjson2.JSON;
import com.ard.common.exception.NoPermissionException;
import com.ard.common.utils.SecurityUtils;
import com.ard.tianyu.websocket.domain.ControlRequestMessage;
import com.ard.tianyu.websocket.domain.ControlMessage;
import com.ard.tianyu.websocket.domain.WsMessage;
import com.ard.tianyu.websocket.utils.WebSocketUtil;
import lombok.extern.slf4j.Slf4j;
@@ -22,14 +22,14 @@
    public static final ConcurrentHashMap<String, Long> controlRequestMap = new ConcurrentHashMap<>();
    // 发送通知(通过 WebSocket推送)
    public void notifyMessage(String boxSn, String action, Long controller, Long requester) {
        ControlRequestMessage controlRequestMessage = ControlRequestMessage.builder()
    public void notifyMessage(String boxSn, String action, Long source, Long target) {
        ControlMessage controlMessage = ControlMessage.builder()
                .boxSn(boxSn)
                .requester(requester)
                .userId(source)
                .action(action)
                .build();
        WsMessage<ControlRequestMessage> wsMessage = new WsMessage<>("controlRequest", controlRequestMessage);
        WebSocketUtil.sendMessage(controller.toString(), JSON.toJSONString(wsMessage));
        WsMessage<ControlMessage> wsMessage = new WsMessage<>("controlRequest", controlMessage);
        WebSocketUtil.sendMessage(target.toString(), JSON.toJSONString(wsMessage));
    }
    // 申请控制
@@ -46,7 +46,9 @@
            // 则将控制请求加入请求队列
            controlRequestMap.put(boxSn, requester);
            // 通知当前控制者,有新的控制请求
            notifyMessage(boxSn, "request", controller, requester);
            notifyMessage(boxSn, "request", requester, controller);
        } else {
            throw new NoPermissionException("当前已经获取控制权,无需重复申请");
        }
        return false; // 等待当前控制者的同意
    }
@@ -60,15 +62,17 @@
            if (approve) {
                // 同意控制,将控制权赋予请求者
                droneControlMap.put(boxSn, requester);
                notifyMessage(boxSn, "approve", requester, controller);
                notifyMessage(boxSn, "approve", controller, requester);
            } else {
                notifyMessage(boxSn, "reject", requester, controller);
                notifyMessage(boxSn, "reject", controller, requester);
            }
            // 无论同意还是拒绝,都移除控制请求
            controlRequestMap.remove(boxSn);
            return true;
        }
        return false;
        else {
            throw new NoPermissionException("无申请不需要处理控制权");
        }
    }
    // 释放控制