From aae5582f9f64a7ac3d66b82f98e6beaa7c530b6b Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Thu, 3 Jun 2021 13:24:25 +0800 Subject: [PATCH] =?UTF-8?q?perf[protocol]:=20=E4=BC=98=E5=8C=96=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E6=A3=80=E6=9F=A5=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zfoo/protocol/ProtocolManager.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java b/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java index 1ea0ea8e..8d368baa 100644 --- a/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java +++ b/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java @@ -149,6 +149,14 @@ public class ProtocolManager { public static synchronized void initProtocol(Set> protocolClassSet, GenerateOperation generateOperation) { AssertionUtils.notNull(tempSubProtocolIdMap, "[{}]已经初始完成,只能parseProtocol一次,请不要重复初始化", ProtocolManager.class.getSimpleName()); try { + for (var protocolClass : protocolClassSet) { + var id = getProtocolIdByClass(protocolClass); + var previous = tempProtocolClassMap.put(id, protocolClass); + if (previous != null) { + throw new RunException("[{}][{}]协议号[protocolId:{}]重复", protocolClass.getCanonicalName(), previous.getCanonicalName(), id); + } + } + for (var protocolClass : protocolClassSet) { try { var registration = parseProtocolRegistration(protocolClass, ProtocolModule.DEFAULT_PROTOCOL_MODULE); @@ -199,7 +207,10 @@ public class ProtocolManager { // 协议号是否和id是否相等 AssertionUtils.isTrue(packet.protocolId() == id, "[class:{}]协议序列号[{}]和协议文件里的协议序列号不相等", clazz.getCanonicalName(), PROTOCOL_ID); - tempProtocolClassMap.put(id, clazz); + var previous = tempProtocolClassMap.put(id, clazz); + if (previous != null) { + throw new RunException("[{}][{}]协议号[protocolId:{}]重复", clazz.getCanonicalName(), previous.getCanonicalName(), id); + } } } @@ -391,10 +402,6 @@ public class ProtocolManager { private static ProtocolRegistration parseProtocolRegistration(Class clazz, ProtocolModule module) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException, InstantiationException { var protocolId = checkProtocol(clazz); - if (protocols[protocolId] != null) { - throw new RunException("[{}][{}]协议号[protocolId:{}]重复", protocols[protocolId].protocolConstructor().getDeclaringClass().getCanonicalName(), clazz.getCanonicalName(), protocolId); - } - var fields = new ArrayList(); for (var field : clazz.getDeclaredFields()) { var modifiers = field.getModifiers();