‘liusuyi’
2023-12-28 8f224dbf1a1bd1a65dead7ceda8dd0a3fa567115
src/main/java/com/ard/utils/netty/tcp/ClientHandler.java
@@ -8,7 +8,6 @@
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;
@@ -17,7 +16,6 @@
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;
@@ -58,19 +56,19 @@
     */
    @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);
    }
@@ -83,20 +81,26 @@
     * @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);
        }
    }
    /**
     * 通道数据处理完成
@@ -170,15 +174,15 @@
    /**
     * 解析报警数据
     */
    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 {
@@ -187,7 +191,7 @@
            //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));
@@ -315,8 +319,7 @@
                    double thetaRadians = Math.toRadians(fTy + 90);
                    // 使用正弦函数计算对边长度
                    Distance = Math.sin(thetaRadians) * Distance;
                    if(Distance<0)
                    {
                    if (Distance < 0) {
                        continue;//过滤距离小于0的脏数据
                    }
                    //log.debug("目标投影距离(m):" + Distance);