| | |
| | | package com.ard.work.service.impl; |
| | | |
| | | import com.ard.common.utils.ByteUtils; |
| | | import com.ard.work.aspect.annotation.CheckTakeoffAltitude; |
| | | import com.ard.work.aspect.annotation.CheckControlRight; |
| | | import com.ard.work.aspect.annotation.CheckTakeoffAltitude; |
| | | import com.ard.work.component.forest.TyClient; |
| | | import com.ard.work.component.netty.TcpClientUtil; |
| | | import com.ard.work.component.netty.command.BaseCmd; |
| | | import com.ard.work.component.netty.command.camera.*; |
| | | import com.ard.work.component.netty.command.manual.*; |
| | | import com.ard.work.component.netty.command.register.*; |
| | | import com.ard.work.component.netty.command.settings.*; |
| | | import com.ard.work.component.netty.command.speaker.*; |
| | | import com.ard.work.component.netty.command.wayline.*; |
| | | import com.ard.work.domain.dto.camera.*; |
| | | import com.ard.work.domain.dto.manual.*; |
| | | import com.ard.work.domain.dto.speaker.*; |
| | | import com.ard.work.domain.dto.wayline.*; |
| | | import com.ard.work.domain.entity.ArdDroneInfo; |
| | | import com.ard.work.domain.entity.ArdServerInfo; |
| | | import com.ard.work.domain.receiver.*; |
| | | import com.ard.work.component.forest.TyClient; |
| | | import com.ard.work.domain.cache.UavSignalInfoCache; |
| | | import com.ard.work.domain.cache.UavStateCache; |
| | | import com.ard.work.domain.cache.UavTelemetryDataCache; |
| | | import com.ard.work.domain.dto.BoxHistoryDTO; |
| | | import com.ard.work.domain.dto.BoxPhotosDTO; |
| | | import com.ard.work.domain.dto.BoxSettingsDTO; |
| | | import com.ard.work.domain.dto.control.AbsAngleControlDTO; |
| | | import com.ard.work.domain.dto.control.AngleControlDTO; |
| | | import com.ard.work.domain.dto.control.SpeedControlDTO; |
| | | import com.ard.work.domain.dto.converter.wayline.PlanLineDataConverter; |
| | | import com.ard.work.domain.dto.settings.ReturnHeightSettingDTO; |
| | | import com.ard.work.domain.dto.settings.ReturnPointSettingDTO; |
| | | import com.ard.work.domain.dto.settings.VideoStreamSettingDTO; |
| | | import com.ard.work.domain.dto.signal.SignalInfo; |
| | | import com.ard.work.domain.dto.state.UavState; |
| | | import com.ard.work.domain.dto.telemetry.TelemetryData; |
| | | import com.ard.work.component.netty.command.control.AbsAngleControlCmd; |
| | | import com.ard.work.component.netty.command.control.AngleControlCmd; |
| | | import com.ard.work.component.netty.command.control.SpeedControlCmd; |
| | | import com.ard.work.component.netty.command.manual.*; |
| | | import com.ard.work.component.netty.command.notice.BoxPowerStatusReplyCmd; |
| | | import com.ard.work.component.netty.command.notice.FlyWayEndReplyCmd; |
| | | import com.ard.work.component.netty.command.notice.UavReadyReplyCmd; |
| | | import com.ard.work.component.netty.command.real.SignalInfoCmd; |
| | | import com.ard.work.component.netty.command.real.UavStateCmd; |
| | | import com.ard.work.component.netty.command.real.UavTelemetryDataCmd; |
| | | import com.ard.work.component.netty.command.register.*; |
| | | import com.ard.work.component.netty.command.settings.*; |
| | | import com.ard.work.component.netty.command.speaker.*; |
| | | import com.ard.work.component.netty.command.wayline.*; |
| | | import com.ard.work.component.netty.handler.ErrorCodeEnum; |
| | | import com.ard.work.component.netty.protobuf.TelemetryDataPB; |
| | | import com.ard.work.domain.cache.UavSignalInfoCache; |
| | | import com.ard.work.domain.cache.UavStateCache; |
| | | import com.ard.work.domain.cache.UavTelemetryDataCache; |
| | | import com.ard.work.domain.dto.BoxHistoryDTO; |
| | | import com.ard.work.domain.dto.BoxPhotosDTO; |
| | | import com.ard.work.domain.dto.BoxSettingsDTO; |
| | | import com.ard.work.domain.dto.camera.*; |
| | | import com.ard.work.domain.dto.control.AbsAngleControlDTO; |
| | | import com.ard.work.domain.dto.control.AngleControlDTO; |
| | | import com.ard.work.domain.dto.control.SpeedControlDTO; |
| | | import com.ard.work.domain.dto.converter.wayline.PlanLineDataConverter; |
| | | import com.ard.work.domain.dto.manual.*; |
| | | import com.ard.work.domain.dto.settings.ReturnHeightSettingDTO; |
| | | import com.ard.work.domain.dto.settings.ReturnPointSettingDTO; |
| | | import com.ard.work.domain.dto.settings.VideoStreamSettingDTO; |
| | | import com.ard.work.domain.dto.signal.SignalInfo; |
| | | import com.ard.work.domain.dto.speaker.*; |
| | | import com.ard.work.domain.dto.state.UavState; |
| | | import com.ard.work.domain.dto.telemetry.TelemetryData; |
| | | import com.ard.work.domain.dto.wayline.*; |
| | | import com.ard.work.domain.entity.ArdDroneInfo; |
| | | import com.ard.work.domain.entity.ArdServerInfo; |
| | | import com.ard.work.domain.message.UavControlType; |
| | | import com.ard.work.domain.receiver.*; |
| | | import com.ard.work.service.IArdDroneInfoService; |
| | | import com.ard.work.service.IArdServerInfoService; |
| | | import com.ard.work.service.ITyService; |
| | | import com.ard.work.domain.message.UavControlType; |
| | | import io.netty.channel.Channel; |
| | | import io.netty.channel.ChannelFuture; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.net.InetSocketAddress; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | import static com.ard.work.component.netty.TyTcpClientManager.channels; |
| | | |
| | | /** |
| | | * TyServiceImpl |
| | |
| | | private TyClient tyClient; |
| | | |
| | | /** |
| | | * 获取六合token信息 |
| | | * 获取边缘服务器token信息 |
| | | * |
| | | * @return AccessTokenReceiver |
| | | */ |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取云盒列表 |
| | | * 获取全部云盒列表 |
| | | * |
| | | * @return List<BoxInfoReceiver> |
| | | */ |
| | |
| | | List<ArdServerInfo> ardServerInfos = ardServerService.selectArdServerInfoList(new ArdServerInfo()); |
| | | return getBoxList(ardServerInfos); |
| | | } |
| | | |
| | | /** |
| | | * 获取指定服务器云盒列表 |
| | | * |
| | | * @return List<BoxInfoReceiver> |
| | | */ |
| | | @Override |
| | | public List<BoxInfoReceiver> getBoxList(String serverId) { |
| | | TyHttpCommonReceiver<List<BoxInfoReceiver>> boxList = tyClient.getBoxList(serverId); |
| | | return boxList.getContent(); |
| | | } |
| | | /** |
| | | * 获取直播地址 |
| | | * |
| | |
| | | @Override |
| | | public BoxStreamUrlReceiver getBoxLiveUrl(String boxSn) { |
| | | ArdDroneInfo ardDroneInfo = ardDroneService.selectArdDroneByboxSn(boxSn); |
| | | if(ardDroneInfo== null){ |
| | | log.warn("未找到对应的飞行器信息,boxSn:{}",boxSn); |
| | | return null; |
| | | } |
| | | TyHttpCommonReceiver<BoxStreamUrlReceiver> boxLiveUrl = tyClient.getBoxLiveUrl(ardDroneInfo.getServerId(),boxSn); |
| | | return boxLiveUrl.getContent(); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 注册六合平台 |
| | | * 注册边缘服务器平台 |
| | | */ |
| | | @Override |
| | | public Boolean registerMessage(String serverId) { |
| | |
| | | RegisterCmd registerMessage = new RegisterCmd(tyToken.getCompanyId(), tyToken.getAccessToken().getBytes()); |
| | | this.sendMessage(serverId, registerMessage); |
| | | } catch (Exception e) { |
| | | log.error("注册六合平台失败:{}", e.getMessage()); |
| | | log.error("注册边缘服务器平台失败:{}", e.getMessage()); |
| | | } |
| | | return true; |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 处理六合服务器返回的消息 |
| | | * 处理边缘服务器返回的消息 |
| | | */ |
| | | @Override |
| | | public void processReplyMessage(String key, BaseCmd tyCommand) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 根据[服务器id]获取六合盒子列表 |
| | | * 根据[服务器id]获取边缘服务器盒子列表 |
| | | */ |
| | | @Override |
| | | public List<BoxInfoReceiver> getBoxSnToList(String id) { |
| | |
| | | ErrorCodeEnum.getDescByCode(errorCode)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 发送消息 |
| | | */ |
| | | private void sendMessage(String key, BaseCmd msg) { |
| | | try { |
| | | ChannelFuture future = channels.get(key).getChannelFuture(); |
| | | Channel channel = future.channel(); |
| | | if (channel.isActive()) { |
| | | InetSocketAddress ipSocket = (InetSocketAddress) channel.remoteAddress(); |
| | | String host = ipSocket.getHostString(); |
| | | int port = ipSocket.getPort(); |
| | | channel.writeAndFlush(msg); // 发送编码后的数据 |
| | | log.debug("向六合服务器【{}:{}】发送数据,命令码:{}", host, port, String.format("0x%02X", msg.getCmdCode() & 0xFF)); |
| | | } else { |
| | | log.error("与六合服务器链接断开,无法发送数据!"); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("发送消息异常:{}", e.getMessage()); |
| | | } |
| | | TcpClientUtil.sendMessage(key, msg); |
| | | } |
| | | |
| | | } |