diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java b/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java index eaeaf2801..4f43ded4b 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/BytesUtil.java @@ -301,6 +301,12 @@ public class BytesUtil { return src; } + public static void main(String[] args) { + byte[] length = new byte[] {0x09, 0x00}; + int i = BytesUtil.bytesToIntLittle(length); + System.out.println(i); + } + /** * byte数组中取int数值,本方法适用于(低位在前,高位在后 )的顺序。小端模式 */ diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/decoder/StartAndLengthFieldFrameDecoder.java b/jsowell-netty/src/main/java/com/jsowell/netty/decoder/StartAndLengthFieldFrameDecoder.java index 69b486f94..9300fb909 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/decoder/StartAndLengthFieldFrameDecoder.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/decoder/StartAndLengthFieldFrameDecoder.java @@ -45,7 +45,7 @@ public class StartAndLengthFieldFrameDecoder extends ByteToMessageDecoder { byte[] headerBytes = new byte[HEADER_LENGTH_DNY]; buffer.getBytes(beginReader, headerBytes, 0, HEADER_LENGTH_DNY); String header = new String(headerBytes, StandardCharsets.UTF_8); - + // log.info("检查包头是否是DNY, header:{}", header); if ("DNY".equals(header)) { // 处理 DNY 协议 decodeDnyMessage(buffer, out, beginReader); @@ -117,6 +117,7 @@ public class StartAndLengthFieldFrameDecoder extends ByteToMessageDecoder { // 获取消息长度 int length = buffer.getUnsignedByte(beginReader + HEADER_LENGTH_DNY); + // log.info("获取消息长度, length:{}", length); // 检查剩余数据是否足够 if (buffer.readableBytes() < HEADER_LENGTH_DNY + 1 + length) { buffer.readerIndex(beginReader); @@ -124,8 +125,8 @@ public class StartAndLengthFieldFrameDecoder extends ByteToMessageDecoder { } // 读取 data 数据 - ByteBuf frame = buffer.retainedSlice(beginReader, HEADER_LENGTH_DNY + 1 + length); - buffer.readerIndex(beginReader + HEADER_LENGTH_DNY + 1 + length); + ByteBuf frame = buffer.retainedSlice(beginReader, HEADER_LENGTH_DNY + length + 2); + buffer.readerIndex(beginReader + HEADER_LENGTH_DNY + length + 2); out.add(frame); } diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/decoder/StartAndLengthFieldFrameDecoder2.java b/jsowell-netty/src/main/java/com/jsowell/netty/decoder/StartAndLengthFieldFrameDecoder2.java index a6b0d5977..a8a2cf924 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/decoder/StartAndLengthFieldFrameDecoder2.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/decoder/StartAndLengthFieldFrameDecoder2.java @@ -8,7 +8,7 @@ import io.netty.handler.codec.ByteToMessageDecoder; import lombok.extern.slf4j.Slf4j; import java.util.List; - +@Deprecated @Slf4j public class StartAndLengthFieldFrameDecoder2 extends ByteToMessageDecoder { private static final int HEADER_LENGTH_DNY = 3; // "DNY" 包头的长度 diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ChargingPileHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ChargingPileHandler.java index 7339de6fa..6c57c7b71 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ChargingPileHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ChargingPileHandler.java @@ -1,5 +1,6 @@ package com.jsowell.netty.server.electricbicycles; +import com.jsowell.common.util.BytesUtil; import com.jsowell.netty.domain.ChargingPileMessage; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelHandlerContext; @@ -8,10 +9,12 @@ import io.netty.channel.ChannelInboundHandlerAdapter; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; +import javax.swing.*; import java.net.InetSocketAddress; import java.time.Instant; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; @ChannelHandler.Sharable @@ -47,48 +50,48 @@ public class ChargingPileHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { - log.info("加载客户端报文=== channelId:{}, mag:{}", ctx.channel().id(), msg.toString()); + log.info("加载客户端报文=== channelId:{}, mag:{}", ctx.channel().id(), BytesUtil.binary((byte[]) msg, 16)); // if (!(msg instanceof ChargingPileMessage)) { // return; // } - ChargingPileMessage message = (ChargingPileMessage) msg; - byte command = message.getCommand(); - - switch (command) { - case 0x11: - handleHeartbeat(ctx, message); - break; - case 0x12: - handleTimeRequest(ctx, message); - break; - case 0x15: - handleFirmwareUpgradeRequest(ctx, message); - break; - case (byte) 0xFA: - handleFirmwareUpgradeResponse(ctx, message); - break; - case 0x31: - handleReboot(ctx, message); - break; - case 0x32: - handleCommunicationModuleReboot(ctx, message); - break; - case 0x33: - handleClearUpgradeData(ctx, message); - break; - case 0x34: - handleChangeIPAddress(ctx, message); - break; - case 0x35: - handleSubdeviceVersionUpload(ctx, message); - break; - case 0x3B: - handleFSKParameterRequest(ctx, message); - break; - default: - log.info("Unknown command: " + String.format("0x%02X", command)); - } + // ChargingPileMessage message = (ChargingPileMessage) msg; + // byte command = message.getCommand(); + // + // switch (command) { + // case 0x11: + // handleHeartbeat(ctx, message); + // break; + // case 0x12: + // handleTimeRequest(ctx, message); + // break; + // case 0x15: + // handleFirmwareUpgradeRequest(ctx, message); + // break; + // case (byte) 0xFA: + // handleFirmwareUpgradeResponse(ctx, message); + // break; + // case 0x31: + // handleReboot(ctx, message); + // break; + // case 0x32: + // handleCommunicationModuleReboot(ctx, message); + // break; + // case 0x33: + // handleClearUpgradeData(ctx, message); + // break; + // case 0x34: + // handleChangeIPAddress(ctx, message); + // break; + // case 0x35: + // handleSubdeviceVersionUpload(ctx, message); + // break; + // case 0x3B: + // handleFSKParameterRequest(ctx, message); + // break; + // default: + // log.info("Unknown command: " + String.format("0x%02X", command)); + // } } private void handleHeartbeat(ChannelHandlerContext ctx, ChargingPileMessage message) { diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerChannelInitializer.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerChannelInitializer.java index fd7b91cf7..03e6ff0ee 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerChannelInitializer.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerChannelInitializer.java @@ -1,9 +1,7 @@ package com.jsowell.netty.server.electricbicycles; import com.jsowell.netty.decoder.ChargingPileDecoder; -import com.jsowell.netty.decoder.ProtocolDnyDecoder; import com.jsowell.netty.decoder.StartAndLengthFieldFrameDecoder; -import com.jsowell.netty.decoder.StartAndLengthFieldFrameDecoder2; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.channel.socket.SocketChannel; @@ -26,7 +24,7 @@ public class ElectricBicyclesServerChannelInitializer extends ChannelInitializer @Override protected void initChannel(SocketChannel channel) throws Exception { ChannelPipeline pipeline = channel.pipeline(); - pipeline.addLast("frameDecoder", new ChargingPileDecoder()); + pipeline.addLast("frameDecoder", new StartAndLengthFieldFrameDecoder()); pipeline.addLast("decoder", new ByteArrayDecoder()); pipeline.addLast("encoder", new ByteArrayDecoder()); //读超时时间设置为10s,0表示不监控