Commit 386e80e7 authored by terrymanu's avatar terrymanu
Browse files

refactor MySQLPacketCodec

parent b71d3dae
Loading
Loading
Loading
Loading
+5 −8
Original line number Diff line number Diff line
@@ -22,23 +22,20 @@ public final class MySQLPacketCodec extends ByteToMessageCodec<AbstractMySQLSent
    @Override
    protected void decode(final ChannelHandlerContext context, final ByteBuf in, final List<Object> out) throws Exception {
        int readableBytes = in.readableBytes();
        if (readableBytes < AbstractMySQLPacket.PAYLOAD_LENGTH) {
        if (readableBytes < AbstractMySQLPacket.PAYLOAD_LENGTH + AbstractMySQLPacket.SEQUENCE_LENGTH) {
            return;
        }
        if (log.isDebugEnabled()) {
            log.debug("Read from client: \n {}", ByteBufUtil.prettyHexDump(in));
        }
        int payloadLength = in.markReaderIndex().readMediumLE();
        //mysql协议包头 内容长度3字节 序号1字节 内容n字节
        //readableBytes的长度为3+1+payloadLength
        if (readableBytes - 4 < payloadLength) {
        int realPacketLength = payloadLength + AbstractMySQLPacket.PAYLOAD_LENGTH + AbstractMySQLPacket.SEQUENCE_LENGTH;
        if (readableBytes < realPacketLength) {
            in.resetReaderIndex();
            return;
        }
        if (readableBytes - 4 > payloadLength) {
            //frame长度为1+payloadLength
            ByteBuf frame = in.readRetainedSlice(payloadLength + 1);
            out.add(frame);
        if (readableBytes > realPacketLength) {
            out.add(in.readRetainedSlice(payloadLength + 1));
            return;
        }
        out.add(in);
+2 −0
Original line number Diff line number Diff line
@@ -14,5 +14,7 @@ public abstract class AbstractMySQLPacket {
    
    public static final int PAYLOAD_LENGTH = 3;
    
    public static final int SEQUENCE_LENGTH = 1;
    
    private int sequenceId;
}