package com.ard.tianyu.websocket.handler;
|
|
import com.alibaba.fastjson2.JSON;
|
import com.ard.tianyu.service.control.UavControlService;
|
import com.ard.tianyu.websocket.domain.BaseMessage;
|
import com.ard.tianyu.websocket.domain.UavControlMessage;
|
import com.ard.tianyu.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<Map<String, Long>> {
|
|
@Resource
|
private UavControlService uavControlService;
|
/**
|
* 发送控制请求
|
*/
|
public void sendControlRequest(Long controllerId, String boxSn, String type, Long requester) {
|
UavControlMessage message = new UavControlMessage(boxSn, type, requester,null);
|
BaseMessage<UavControlMessage> 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<UavControlMessage> 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<UavControlMessage> 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<UavControlMessage> baseMessage = new BaseMessage<>("control", message);
|
WebSocketUtil.sendMessageAll(JSON.toJSONString(baseMessage));
|
}
|
|
/**
|
* 获取指定设备的当前操作者信息
|
* 该方法重写自父类,用于获取无人机和载荷的当前控制者用户ID
|
*
|
* @param boxSn 设备序列号,用于标识特定的设备
|
* @return 返回一个映射,包含无人机(fly)和载荷(payload)的当前控制者用户ID
|
*/
|
@Override
|
protected Map<String, Long> getData(String boxSn) {
|
// 获取当前控制飞行的用户ID
|
Long flyUserId = uavControlService.getCurrentController(boxSn, "fly");
|
// 获取当前控制载荷的用户ID
|
Long payloadUserId = uavControlService.getCurrentController(boxSn, "payload");
|
// 创建一个映射,用于存储飞行和载荷的当前控制者用户ID
|
Map<String, Long> map=new HashMap<>();
|
// 将飞行当前控制者用户ID添加到映射中
|
map.put("flyController", flyUserId);
|
// 将载荷当前控制者用户ID添加到映射中
|
map.put("payloadController", payloadUserId);
|
// 返回包含当前控制者信息的映射
|
return map;
|
}
|
|
@Override
|
protected String getMessageType() {
|
return "controller";
|
}
|
}
|