From 6b9ae203a193666e1d21638fb9de43af1392c690 Mon Sep 17 00:00:00 2001 From: godotg Date: Sat, 22 Oct 2022 19:57:09 +0800 Subject: [PATCH] =?UTF-8?q?del[protocol]:=20=E5=88=A0=E9=99=A4checkSubProt?= =?UTF-8?q?ocol=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zfoo/net/router/route/PacketBus.java | 4 +-- .../registration/ProtocolAnalysis.java | 35 +++++++++---------- .../protobuf/GenerateProtobufUtils.java | 5 ++- 3 files changed, 20 insertions(+), 24 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/router/route/PacketBus.java b/net/src/main/java/com/zfoo/net/router/route/PacketBus.java index 7284d6be..e04276cf 100644 --- a/net/src/main/java/com/zfoo/net/router/route/PacketBus.java +++ b/net/src/main/java/com/zfoo/net/router/route/PacketBus.java @@ -28,7 +28,6 @@ import com.zfoo.protocol.IPacket; import com.zfoo.protocol.ProtocolManager; import com.zfoo.protocol.collection.ArrayUtils; import com.zfoo.protocol.exception.RunException; -import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.util.AssertionUtils; import com.zfoo.protocol.util.ReflectionUtils; import com.zfoo.protocol.util.StringUtils; @@ -120,8 +119,7 @@ public abstract class PacketBus { } try { - var protocolId = ProtocolAnalysis.getProtocolIdAndCheckClass(packetClazz); - + var protocolId = ProtocolManager.protocolId(packetClazz); // 将receiver注册到IProtocolRegistration var protocolRegistration = ProtocolManager.getProtocol(protocolId); AssertionUtils.notNull(protocolRegistration, "协议类[class:{}][protocolId:{}]没有注册", packetClazz.getSimpleName(), protocolId); diff --git a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java index 0eb28e46..2c8ece0e 100644 --- a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java +++ b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java @@ -160,13 +160,13 @@ public class ProtocolAnalysis { for (var protocolDefinition : moduleDefinition.getProtocols()) { var location = protocolDefinition.getLocation(); var clazz = Class.forName(location); - var id = getProtocolIdAndCheckClass(clazz); + var protocolId = ProtocolManager.protocolId(clazz); var registration = parseProtocolRegistration(clazz, module); if (protocolDefinition.isEnhance()) { enhanceList.add(registration); } // 注册协议 - protocols[id] = registration; + protocols[protocolId] = registration; } } enhance(generateOperation, enhanceList); @@ -281,7 +281,7 @@ public class ProtocolAnalysis { } private static ProtocolRegistration parseProtocolRegistration(Class clazz, ProtocolModule module) { - var protocolId = getProtocolIdAndCheckClass(clazz); + var protocolId = ProtocolManager.protocolId(clazz); // 对象需要被序列化的属性 var fields = customFieldOrder(clazz); @@ -382,10 +382,13 @@ public class ProtocolAnalysis { return MapField.valueOf(keyRegistration, valueRegistration, type); } else { // 是一个协议引用变量 - var referenceProtocolId = getProtocolIdAndCheckClass(field.getType()); - checkSubProtocol(clazz, referenceProtocolId, field.getType()); - subProtocolIdMap.computeIfAbsent(getProtocolIdAndCheckClass(clazz), it -> new HashSet<>()).add(referenceProtocolId); - return ObjectProtocolField.valueOf(referenceProtocolId); + if (!protocolIdMap.containsKey(field.getType())) { + throw new RunException("协议[{}]的子协议[{}]没有注册", clazz.getCanonicalName(), field.getType().getCanonicalName()); + } + var protocolId = ProtocolManager.protocolId(clazz); + var subProtocolId = ProtocolManager.protocolId(field.getType()); + subProtocolIdMap.computeIfAbsent(protocolId, it -> new HashSet<>()).add(subProtocolId); + return ObjectProtocolField.valueOf(subProtocolId); } } @@ -420,10 +423,13 @@ public class ProtocolAnalysis { throw new RunException("不支持数组和集合联合使用[type:{}]类型", type); } else { // 是一个协议引用变量 - var referenceProtocolId = getProtocolIdAndCheckClass(clazz); - checkSubProtocol(currentProtocolClass, referenceProtocolId, clazz); - subProtocolIdMap.computeIfAbsent(getProtocolIdAndCheckClass(currentProtocolClass), it -> new HashSet<>()).add(referenceProtocolId); - return ObjectProtocolField.valueOf(referenceProtocolId); + if (!protocolIdMap.containsKey(clazz)) { + throw new RunException("协议[{}]的子协议[{}]没有注册", currentProtocolClass.getCanonicalName(), clazz.getCanonicalName()); + } + var protocolId = ProtocolManager.protocolId(currentProtocolClass); + var subProtocolId = ProtocolManager.protocolId(clazz); + subProtocolIdMap.computeIfAbsent(protocolId, it -> new HashSet<>()).add(subProtocolId); + return ObjectProtocolField.valueOf(subProtocolId); } } throw new RunException("[type:{}]类型不正确", type); @@ -523,13 +529,6 @@ public class ProtocolAnalysis { return protocolId; } - private static void checkSubProtocol(Class clazz, short id, Class subClass) { - var registerProtocolClass = protocolClassMap.get(id); - if (registerProtocolClass == null || !registerProtocolClass.equals(subClass)) { - throw new RunException("协议[{}]的子协议[{}][{}]没有注册", clazz.getCanonicalName(), id, subClass.getCanonicalName()); - } - } - private static void checkAllModules() { // 模块id不能重复 var moduleIdSet = new HashSet(); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GenerateProtobufUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GenerateProtobufUtils.java index 6b8cae30..2caff372 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GenerateProtobufUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GenerateProtobufUtils.java @@ -21,7 +21,6 @@ import com.zfoo.protocol.generate.GenerateOperation; import com.zfoo.protocol.generate.GenerateProtocolNote; import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.IProtocolRegistration; -import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.registration.ProtocolRegistration; import com.zfoo.protocol.registration.field.*; import com.zfoo.protocol.serializer.CodeLanguage; @@ -124,7 +123,7 @@ public abstract class GenerateProtobufUtils { for (var protos : xmlProtobuf.getProtos()) { for (var protocol : protos.getProtocols()) { var protocolClass = Class.forName(protocol.getLocation()); - var protocolId = ProtocolAnalysis.getProtocolIdAndCheckClass(protocolClass); + var protocolId = ProtocolManager.protocolId(protocolClass); var protocolRegistration = ProtocolManager.getProtocol(protocolId); if (allGenerateProtocols.contains(protocolRegistration)) { @@ -191,7 +190,7 @@ public abstract class GenerateProtobufUtils { for (var protocol : protos.getProtocols()) { var protocolClass = Class.forName(protocol.getLocation()); - var protocolId = ProtocolAnalysis.getProtocolIdAndCheckClass(protocolClass); + var protocolId = ProtocolManager.protocolId(protocolClass); var protocolRegistration = ProtocolManager.getProtocol(protocolId); builder.append("// id = ").append(protocolId).append(LS);