package com.ard.work.component.websocket.handler; import com.alibaba.fastjson2.JSON; import com.ard.work.service.control.UavControlService; import com.ard.work.domain.message.BaseMessage; import com.ard.work.domain.message.UavControlMessage; import com.ard.work.component.websocket.utils.WebSocketUtil; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; @Service public class UavControlManager extends BaseSubscriptionManager> { @Resource private UavControlService uavControlService; /** * 发送控制请求 */ public void sendControlRequest(Long controllerId, String boxSn, String type, Long requester) { UavControlMessage message = new UavControlMessage(boxSn, type, requester,null); BaseMessage baseMessage = new BaseMessage<>("control", message); WebSocketUtil.sendMessage(controllerId, JSON.toJSONString(baseMessage)); } /** * 发送控制同意通知 */ public void sendControlApproval(Long requesterId, String boxSn, String type) { UavControlMessage message = new UavControlMessage(boxSn, type, null,true); BaseMessage baseMessage = new BaseMessage<>("control", message); WebSocketUtil.sendMessage(requesterId, JSON.toJSONString(baseMessage)); } /** * 发送控制拒绝通知 */ public void sendControlRejection(Long requesterId, String boxSn, String type) { UavControlMessage message = new UavControlMessage(boxSn, type, null,false); BaseMessage baseMessage = new BaseMessage<>("control", message); WebSocketUtil.sendMessage(requesterId, JSON.toJSONString(baseMessage)); } /** * 发送控制释放通知 */ public void sendControlRelease(String boxSn, String type) { UavControlMessage message = new UavControlMessage(boxSn, type, null,null); BaseMessage baseMessage = new BaseMessage<>("control", message); WebSocketUtil.sendMessageAll(JSON.toJSONString(baseMessage)); } /** * 获取指定设备的当前操作者信息 * 该方法重写自父类,用于获取无人机和载荷的当前控制者用户ID * * @param boxSn 设备序列号,用于标识特定的设备 * @return 返回一个映射,包含无人机(fly)和载荷(payload)的当前控制者用户ID */ @Override protected Map getData(String boxSn) { // 获取当前控制飞行的用户ID Long flyUserId = uavControlService.getCurrentController(boxSn, "fly"); // 获取当前控制载荷的用户ID Long payloadUserId = uavControlService.getCurrentController(boxSn, "payload"); // 创建一个映射,用于存储飞行和载荷的当前控制者用户ID Map map=new HashMap<>(); map.put("boxSn", boxSn); // 将飞行当前控制者用户ID添加到映射中 map.put("flyController", flyUserId); // 将载荷当前控制者用户ID添加到映射中 map.put("payloadController", payloadUserId); // 返回包含当前控制者信息的映射 return map; } @Override protected String getMessageType() { return "controller"; } }