From ab55c60112c72fcfe7836a91a278f316cddd7c00 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Thu, 20 Feb 2025 16:58:07 +0800
Subject: [PATCH] 添加无人机控制权申请、处理、释放
---
ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java | 26 +++++++++++++++-----------
1 files changed, 15 insertions(+), 11 deletions(-)
diff --git a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java b/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
index 31d6be5..908a009 100644
--- a/ard-work/src/main/java/com/ard/tianyu/service/impl/UavControlManager.java
+++ b/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));
}
// 申请控制
@@ -42,11 +42,13 @@
}
// 如果无人机已经有控制者,则发送申请给当前控制者
Long controller = droneControlMap.get(boxSn);
- if(!controller.equals(requester)) {
+ if (!controller.equals(requester)) {
// 则将控制请求加入请求队列
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("无申请不需要处理控制权");
+ }
}
// 释放控制
--
Gitblit v1.9.3