| | |
| | | import com.ard.utils.util.GisUtils; |
| | | import com.ard.utils.mqtt.MqttProducer; |
| | | import io.netty.buffer.ByteBuf; |
| | | import io.netty.channel.Channel; |
| | | import io.netty.channel.ChannelHandlerContext; |
| | | import io.netty.channel.ChannelId; |
| | | import io.netty.channel.SimpleChannelInboundHandler; |
| | |
| | | |
| | | import javax.xml.bind.DatatypeConverter; |
| | | import java.net.InetSocketAddress; |
| | | import java.net.SocketAddress; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.ScheduledFuture; |
| | |
| | | */ |
| | | @Override |
| | | public void channelInactive(ChannelHandlerContext ctx) throws Exception { |
| | | ChannelId id = ctx.channel().id(); |
| | | InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress(); |
| | | int port = ipSocket.getPort(); |
| | | String host = ipSocket.getHostString(); |
| | | log.error("与设备" + host + ":" + port + "连接断开!"); |
| | | ArdEquipRadar ardEquipRadar = ClientInitialize.tureConnectMap.get(host+ ":" + port); |
| | | String ipPort = ipSocket.getHostString() + ":" + ipSocket.getPort(); |
| | | log.error("与设备" + ipPort + "连接断开!"); |
| | | // 连接断开后的最后处理 |
| | | ctx.pipeline().remove(this); |
| | | ctx.deregister(); |
| | | ctx.close(); |
| | | |
| | | // 将失败信息插入Set集合 |
| | | ClientInitialize.falseConnectSet.add(ardEquipRadar); |
| | | ArdEquipRadar radar = ClientInitialize.trueConnectMap.get(ipPort); |
| | | if (radar != null) { |
| | | ClientInitialize.falseConnectSet.add(radar); |
| | | ClientInitialize.trueConnectMap.remove(ipPort); |
| | | } |
| | | super.channelInactive(ctx); |
| | | } |
| | | |
| | |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) throws Exception { |
| | | public void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) { |
| | | InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress(); |
| | | int port = ipSocket.getPort(); |
| | | String host = ipSocket.getHostString(); |
| | | ArdEquipRadar ardEquipRadar = ClientInitialize.tureConnectMap.get(host+":"+port); |
| | | MessageParsing messageParsing = ClientInitialize.MessageMap.get(host + ":" + port); |
| | | String ipPort = ipSocket.getHostString() + ":" + ipSocket.getPort(); |
| | | ArdEquipRadar radar = ClientInitialize.trueConnectMap.get(ipPort); |
| | | if (radar == null) { |
| | | return; |
| | | } |
| | | MessageHandler messageHandler = ClientInitialize.SucMessageHandlerMap.get(ipPort); |
| | | if (messageHandler == null) { |
| | | return; |
| | | } |
| | | // 处理接收到的消息 |
| | | byte[] byteArray = new byte[msg.readableBytes()]; |
| | | msg.getBytes(msg.readerIndex(), byteArray); |
| | | byte[] bytes = messageParsing.receiveCompletePacket(byteArray); |
| | | byte[] bytes = messageHandler.receiveCompletePacket(byteArray); |
| | | if (bytes != null) { |
| | | processData(ardEquipRadar, bytes); |
| | | processData(radar, bytes); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 通道数据处理完成 |
| | |
| | | /** |
| | | * 解析报警数据 |
| | | */ |
| | | public void processData(ArdEquipRadar ardEquipRadarbyte, byte[] data) { |
| | | public void processData(ArdEquipRadar radar, byte[] data) { |
| | | try { |
| | | String radarId = ardEquipRadarbyte.getId(); |
| | | String radarName = ardEquipRadarbyte.getName(); |
| | | Double radarLongitude = ardEquipRadarbyte.getLongitude(); |
| | | Double radarLagitude = ardEquipRadarbyte.getLatitude(); |
| | | Double radarAltitude = ardEquipRadarbyte.getAltitude(); |
| | | String radarId = radar.getId(); |
| | | String radarName = radar.getName(); |
| | | Double radarLongitude = radar.getLongitude(); |
| | | Double radarLagitude = radar.getLatitude(); |
| | | Double radarAltitude = radar.getAltitude(); |
| | | //region crc校验-目前仅用于显示校验结果 |
| | | Boolean crc32Check = MessageParsing.CRC32Check(data); |
| | | Boolean crc32Check = MessageHandler.CRC32Check(data); |
| | | if (!crc32Check) { |
| | | log.debug("CRC32校验不通过"); |
| | | } else { |
| | |
| | | //endregion |
| | | //log.info("原始数据:" + DatatypeConverter.printHexBinary(data)); |
| | | //log.info("雷达信息:" + host + "【port】" + port + "【X】" + longitude + "【Y】" + lagitude + "【Z】" + altitude); |
| | | data = MessageParsing.transferData(data);//去掉包头和包尾、校验及转义 |
| | | data = MessageHandler.transferData(data);//去掉包头和包尾、校验及转义 |
| | | //region 负载头解析 |
| | | byte[] type = Arrays.copyOfRange(data, 0, 1);//命令类型 |
| | | // log.info("命令类型:" + DatatypeConverter.printHexBinary(type)); |
| | |
| | | double thetaRadians = Math.toRadians(fTy + 90); |
| | | // 使用正弦函数计算对边长度 |
| | | Distance = Math.sin(thetaRadians) * Distance; |
| | | if(Distance<0) |
| | | { |
| | | if (Distance < 0) { |
| | | continue;//过滤距离小于0的脏数据 |
| | | } |
| | | //log.debug("目标投影距离(m):" + Distance); |