diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/decoder/YouDianProtocolDecoder.java b/jsowell-netty/src/main/java/com/jsowell/netty/decoder/YouDianProtocolDecoder.java index c0e1f7422..0afba46f5 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/decoder/YouDianProtocolDecoder.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/decoder/YouDianProtocolDecoder.java @@ -61,13 +61,13 @@ public class YouDianProtocolDecoder extends ByteToMessageDecoder { } // 检查包头是否是 68 协议 - // if (buffer.readableBytes() >= HEADER_LENGTH_68) { - // if (buffer.getUnsignedByte(beginReader) == 0x68) { - // // 处理 68 协议 - // decode68Message(buffer, out, beginReader); - // return; - // } - // } + if (buffer.readableBytes() >= HEADER_LENGTH_68) { + if (buffer.getUnsignedByte(beginReader) == 0x68) { + // 处理 68 协议 + decode68Message(buffer, out, beginReader); + return; + } + } // 未知协议,还原读指针 buffer.resetReaderIndex(); @@ -85,34 +85,34 @@ public class YouDianProtocolDecoder extends ByteToMessageDecoder { } // 判断是否为68包头 - // private boolean isStartOf68Header(ByteBuf buffer, int beginReader) { - // if (buffer.readableBytes() >= HEADER_LENGTH_68) { - // return buffer.getUnsignedByte(beginReader) == 0x68; - // } - // return false; - // } + private boolean isStartOf68Header(ByteBuf buffer, int beginReader) { + if (buffer.readableBytes() >= HEADER_LENGTH_68) { + return buffer.getUnsignedByte(beginReader) == 0x68; + } + return false; + } // 处理68协议消息 - // private void decode68Message(ByteBuf buffer, List out, int beginReader) { - // // 检查剩余数据是否足够 - // if (buffer.readableBytes() < HEADER_LENGTH_68 + 1 + 2) { - // buffer.readerIndex(beginReader); - // return; - // } - // - // // 获取消息长度 - // int length = buffer.getUnsignedByte(beginReader + HEADER_LENGTH_68); - // // 检查剩余数据是否足够 - // if (buffer.readableBytes() < HEADER_LENGTH_68 + 1 + length + 2) { - // buffer.readerIndex(beginReader); - // return; - // } - // - // // 读取 data 数据 最后+2是帧校验域长度 - // ByteBuf frame = buffer.retainedSlice(beginReader, HEADER_LENGTH_68 + 1 + length + 2); - // buffer.readerIndex(beginReader + HEADER_LENGTH_68 + 1 + length + 2); - // out.add(frame); - // } + private void decode68Message(ByteBuf buffer, List out, int beginReader) { + // 检查剩余数据是否足够 + if (buffer.readableBytes() < HEADER_LENGTH_68 + 1 + 2) { + buffer.readerIndex(beginReader); + return; + } + + // 获取消息长度 + int length = buffer.getUnsignedByte(beginReader + HEADER_LENGTH_68); + // 检查剩余数据是否足够 + if (buffer.readableBytes() < HEADER_LENGTH_68 + 1 + length + 2) { + buffer.readerIndex(beginReader); + return; + } + + // 读取 data 数据 最后+2是帧校验域长度 + ByteBuf frame = buffer.retainedSlice(beginReader, HEADER_LENGTH_68 + 1 + length + 2); + buffer.readerIndex(beginReader + HEADER_LENGTH_68 + 1 + length + 2); + out.add(frame); + } // 处理DNY协议消息 private void decodeDnyMessage(ByteBuf buffer, List out, int beginReader) {