| | |
| | | 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; |
| | |
| | | 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)); |
| | | } |
| | | |
| | | // 申请控制 |
| | |
| | | // 则将控制请求加入请求队列 |
| | | controlRequestMap.put(boxSn, requester); |
| | | // 通知当前控制者,有新的控制请求 |
| | | notifyMessage(boxSn, "request", controller, requester); |
| | | notifyMessage(boxSn, "request", requester, controller); |
| | | } else { |
| | | throw new NoPermissionException("当前已经获取控制权,无需重复申请"); |
| | | } |
| | | return false; // 等待当前控制者的同意 |
| | | } |
| | |
| | | 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("无申请不需要处理控制权"); |
| | | } |
| | | } |
| | | |
| | | // 释放控制 |