From f485e99f717c8f4388dfb51010e41c0be62b62d8 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期五, 15 三月 2024 14:17:16 +0800 Subject: [PATCH] 雷达连接状态:改为0-客户端不通 1-在线 2-周扫未开 --- src/main/java/com/ard/utils/netty/tcp/ClientHandler.java | 99 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 67 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/ard/utils/netty/tcp/ClientHandler.java b/src/main/java/com/ard/utils/netty/tcp/ClientHandler.java index 4d22142..3b1ed6a 100644 --- a/src/main/java/com/ard/utils/netty/tcp/ClientHandler.java +++ b/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,12 +16,12 @@ 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; import java.util.concurrent.TimeUnit; +import static com.ard.utils.netty.tcp.ClientInitialize.aroundScanfMap; import static com.ard.utils.util.ByteUtils.toLittleEndian; /** @@ -58,19 +57,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(); - // 灏嗗け璐ヤ俊鎭彃鍏et闆嗗悎 - 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,19 +82,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); + 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); } } + /** * 閫氶亾鏁版嵁澶勭悊瀹屾垚 @@ -147,7 +153,7 @@ byte[] payloadCrc32 = ByteUtils.parseCrc32(payload); byte[] footer = {0x01, 0x02, 0x00}; byte[] heart = ByteUtils.appendArrays(header, payload, payloadCrc32, footer); -// byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00}; + //byte[] heart = {0x01, 0x02, 0x01, 0x10, 0x00, 0x00, 0x00, (byte) 0x83, (byte) 0x88, 0x5d, 0x71, 0x01, 0x02, 0x00}; String hexString = DatatypeConverter.printHexBinary(heart); // log.debug("鍙戦�佸績璺�:" + hexString); message.writeBytes(heart); @@ -169,15 +175,15 @@ /** * 瑙f瀽鎶ヨ鏁版嵁 */ - 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 { @@ -186,12 +192,12 @@ //endregion //log.info("鍘熷鏁版嵁:" + DatatypeConverter.printHexBinary(data)); //log.info("闆疯揪淇℃伅锛�" + host + "銆恜ort銆�" + port + "銆怷銆�" + longitude + "銆怸銆�" + lagitude + "銆怹銆�" + altitude); - data = MessageParsing.transferData(data);//鍘绘帀鍖呭ご鍜屽寘灏俱�佹牎楠屽強杞箟 + data = MessageHandler.transferData(data);//鍘绘帀鍖呭ご鍜屽寘灏俱�佹牎楠屽強杞箟 //region 璐熻浇澶磋В鏋� byte[] type = Arrays.copyOfRange(data, 0, 1);//鍛戒护绫诲瀷 // log.info("鍛戒护绫诲瀷:" + DatatypeConverter.printHexBinary(type)); byte[] cmdId = Arrays.copyOfRange(data, 1, 2);//鍛戒护ID - String cmdIdStr=DatatypeConverter.printHexBinary(cmdId); + String cmdIdStr = DatatypeConverter.printHexBinary(cmdId); //log.info("鍛戒护ID:" + DatatypeConverter.printHexBinary(cmdId)); byte[] payloadSize = Arrays.copyOfRange(data, 2, 4);//鏈夋晥璐熻浇澶у皬 payloadSize = toLittleEndian(payloadSize); @@ -205,7 +211,37 @@ List<ArdAlarmRadar> well = new ArrayList<>(); String alarmTime = ""; Integer targetNum = 0; - log.debug("澶勭悊闆疯揪"+radarName+"鏁版嵁-->鍛戒护ID:"+cmdIdStr); + log.debug("澶勭悊闆疯揪" + radarName + "鏁版嵁-->鍛戒护ID:" + cmdIdStr); + //鍓嶇宸ヤ綔鐘舵�佸弽棣� + if (Arrays.equals(cmdId, new byte[]{0x00})) { + //region 鍛婅淇℃伅鍙嶉 + byte[] dfScanAngV = Arrays.copyOfRange(data, 4, 12); + dfScanAngV = toLittleEndian(dfScanAngV); + double ScanAngV = ByteUtils.bytesToDouble(dfScanAngV); + log.info("璁惧鎵弿鐨勪刊浠拌搴�:" + ScanAngV); + + byte[] dfAngDy = Arrays.copyOfRange(data, 12, 20); + dfAngDy = toLittleEndian(dfAngDy); + double AngDy = ByteUtils.bytesToDouble(dfAngDy); + log.info("鍛ㄨ鍥惧儚鐨勫瀭鐩磋鍦鸿搴�:" + AngDy); + + byte[] iImgW = Arrays.copyOfRange(data, 20, 24); + iImgW = toLittleEndian(iImgW); + int ImgW = ByteUtils.bytesToDecimal(iImgW); + log.info("鍛ㄨ鍥惧儚鐨勫:" + ImgW); + byte[] iImgH = Arrays.copyOfRange(data, 24, 28); + iImgH = toLittleEndian(iImgH); + int ImgH = ByteUtils.bytesToDecimal(iImgH); + log.info("鍛ㄨ鍥惧儚鐨勯珮:" + ImgH); + + byte[] cStat = Arrays.copyOfRange(data, 28, 29); + // 鎻愬彇绗�4浣嶈嚦绗�6浣嶇殑鍊� + cStat = toLittleEndian(cStat); + int Stat = cStat[0] & 0b00000001; + log.info("璁惧褰撳墠宸ヤ綔鐘舵��:" + Stat); + aroundScanfMap.put(radar.getIp()+":"+radar.getPort(),Stat); + + } //闆疯揪绉诲姩闃茬伀鎶ヨ if (Arrays.equals(cmdId, new byte[]{0x01})) { //region 鍛婅淇℃伅鍙嶉 @@ -314,15 +350,14 @@ double thetaRadians = Math.toRadians(fTy + 90); // 浣跨敤姝e鸡鍑芥暟璁$畻瀵硅竟闀垮害 Distance = Math.sin(thetaRadians) * Distance; - if(Distance<0) - { + if (Distance < 0) { continue;//杩囨护璺濈灏忎簬0鐨勮剰鏁版嵁 } //log.debug("鐩爣鎶曞奖璺濈(m):" + Distance); Double[] radarXY = {radarLongitude, radarLagitude}; Double[] alarmXY = GisUtils.CalculateCoordinates(radarXY, Distance, (double) fTx); - log.debug("鎶ヨ淇℃伅锛�" + "銆恟adarName銆�" + radarName + "銆恡argetId銆�"+ targetId + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime + "銆恘ame銆�" + alarmPointName+"銆怐istance銆�"+Distance); + log.debug("鎶ヨ淇℃伅锛�" + "銆恟adarName銆�" + radarName + "銆恡argetId銆�" + targetId + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime + "銆恘ame銆�" + alarmPointName + "銆怐istance銆�" + Distance); ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar(); ardAlarmRadar.setTargetId(targetId); ardAlarmRadar.setName(alarmPointName); @@ -349,7 +384,7 @@ radarAlarmData.setAlarmTime(alarmTime); radarAlarmData.setArdAlarmRadars(radarAlarmInfos); MqttProducer.publish(2, false, "radar", JSON.toJSONString(radarAlarmData)); - if (radarFollowInfos.size() >0) { + if (radarFollowInfos.size() > 0) { radarAlarmData.setArdFollowRadars(radarFollowInfos); //褰撳墠闆疯揪鎵弿瀛樺湪寮曞璺熻釜鏁版嵁锛屽彧淇濈暀鏈�鍚庝竴娆¢攣瀹氱殑鏁版嵁 MqttProducer.publish(2, false, "radarFollowGuide", JSON.toJSONString(radarAlarmData)); @@ -436,7 +471,7 @@ //log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + DatatypeConverter.printHexBinary(szName)); String alarmPointName = ByteUtils.bytesToStringZh(szName); // log.info("鎵�灞炲憡璀﹀尯鍩熷悕绉�:" + alarmPointName); - log.debug("鎶ヨ淇℃伅锛�"+ "銆恟adarName銆�" + radarName + "銆恡argetId銆�" + targetId + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime); + log.debug("鎶ヨ淇℃伅锛�" + "銆恟adarName銆�" + radarName + "銆恡argetId銆�" + targetId + "銆恘ame銆�" + alarmPointName + "銆恆larmType銆�" + alarmType + "銆恆larmTime銆�" + alarmTime); ArdAlarmRadar ardAlarmRadar = new ArdAlarmRadar(); ardAlarmRadar.setTargetId(targetId); ardAlarmRadar.setName(alarmPointName); @@ -504,4 +539,4 @@ log.error("闆疯揪鎶ユ枃瑙f瀽寮傚父:" + ex.getMessage()); } } -} \ No newline at end of file +} -- Gitblit v1.9.3