diff --git a/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java b/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java index f7123fe0..3613bf88 100644 --- a/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java +++ b/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java @@ -14,6 +14,7 @@ package com.zfoo.protocol; import com.zfoo.protocol.buffer.ByteBufUtils; import com.zfoo.protocol.collection.HashMapIntShort; +import com.zfoo.protocol.exception.DecodeException; import com.zfoo.protocol.generate.GenerateOperation; import com.zfoo.protocol.registration.IProtocolRegistration; import com.zfoo.protocol.registration.ProtocolAnalysis; @@ -70,7 +71,13 @@ public class ProtocolManager { * ByteBuf convert to byte[] using ByteBufUtils.readAllBytes(ByteBuf) in zfoo */ public static Object read(ByteBuf buffer) { - return protocols[ByteBufUtils.readShort(buffer)].read(buffer); + short protocolId = -1; + try { + protocolId = ByteBufUtils.readShort(buffer); + return protocols[protocolId].read(buffer); + } catch (Throwable e) { + throw new DecodeException(e, protocolId); + } } public static IProtocolRegistration getProtocol(short protocolId) { diff --git a/protocol/src/main/java/com/zfoo/protocol/exception/DecodeException.java b/protocol/src/main/java/com/zfoo/protocol/exception/DecodeException.java new file mode 100644 index 00000000..76ae547c --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/exception/DecodeException.java @@ -0,0 +1,25 @@ +package com.zfoo.protocol.exception; + +import com.zfoo.protocol.util.StringUtils; + +public class DecodeException extends RuntimeException { + /** + * msg id + */ + private final short protocolId; + + public DecodeException(Throwable e, short protocolId) { + super(e); + this.protocolId = protocolId; + } + + public short getProtocolId() { + return protocolId; + } + + @Override + public String toString() { + String sss = super.toString(); + return StringUtils.format("{}, protocolId={} ", sss, protocolId); + } +}