From d13d90cf9f370136b22a01af486c1040f9e2ad8c Mon Sep 17 00:00:00 2001 From: sunquanxiao Date: Thu, 10 Jul 2025 19:18:52 +0800 Subject: [PATCH] ref[net]: refactor generate protocol file --- .../com/zfoo/net/packet/PacketService.java | 35 +------------ .../main/java/com/zfoo/net/router/Router.java | 3 +- .../generate/GenerateProtocolFile.java | 52 +++++++++++++++++++ 3 files changed, 55 insertions(+), 35 deletions(-) diff --git a/net/src/main/java/com/zfoo/net/packet/PacketService.java b/net/src/main/java/com/zfoo/net/packet/PacketService.java index 3911ec2b..b157442f 100644 --- a/net/src/main/java/com/zfoo/net/packet/PacketService.java +++ b/net/src/main/java/com/zfoo/net/packet/PacketService.java @@ -50,39 +50,6 @@ public class PacketService implements IPacketService { */ public static final int PACKET_HEAD_LENGTH = 4; - /** - * 网络包的约定规则如下: - * 1. 客户端的请求约定以Request结尾,服务器的响应约定以Response结尾 - * 2. 服务器内部请求约定以Ask结尾,服务器内部的响应约定以Answer结尾 - * 3. 服务器主动通知客户端以Notice结尾 - * 4. 公共的协议放在common模块 - * 5. 内部协议范围不允许使用 - */ - public static final String NET_REQUEST_SUFFIX = "Request"; - public static final String NET_RESPONSE_SUFFIX = "Response"; - - public static final String NET_ASK_SUFFIX = "Ask"; - public static final String NET_ANSWER_SUFFIX = "Answer"; - - public static final String NET_NOTICE_SUFFIX = "Notice"; - - - public static final String NET_COMMON_MODULE = "common"; - - public static final Predicate netGenerateProtocolFilter = it -> { - var clazz = it.protocolConstructor().getDeclaringClass(); - var className = clazz.getSimpleName(); - if (className.endsWith(NET_ASK_SUFFIX) || className.endsWith(NET_ANSWER_SUFFIX)) { - return false; - } - - var module = ProtocolManager.moduleByModuleId(it.module()); - return clazz == SignalAttachment.class - || className.endsWith(NET_REQUEST_SUFFIX) - || className.endsWith(NET_RESPONSE_SUFFIX) - || className.endsWith(NET_NOTICE_SUFFIX) - || module.getName().matches(NET_COMMON_MODULE); - }; public PacketService() { @@ -110,7 +77,7 @@ public class PacketService implements IPacketService { generateOperation.getGenerateLanguages().addAll(codeLanguageSet); } // 设置生成协议的过滤器 - GenerateProtocolFile.generateProtocolFilter = netGenerateProtocolFilter; + GenerateProtocolFile.generateProtocolFilter = GenerateProtocolFile.DefaultNetGenerateProtocolFilter; // 解析protocol.xml文件,并将协议生成ProtocolRegistration var resource = applicationContext.getResource(ResourceUtils.CLASSPATH_URL_PREFIX + protocolLocation); diff --git a/net/src/main/java/com/zfoo/net/router/Router.java b/net/src/main/java/com/zfoo/net/router/Router.java index 061eed61..5bb5f8d1 100644 --- a/net/src/main/java/com/zfoo/net/router/Router.java +++ b/net/src/main/java/com/zfoo/net/router/Router.java @@ -41,6 +41,7 @@ import com.zfoo.protocol.ProtocolManager; import com.zfoo.protocol.collection.ArrayUtils; import com.zfoo.protocol.exception.ExceptionUtils; import com.zfoo.protocol.exception.RunException; +import com.zfoo.protocol.generate.GenerateProtocolFile; import com.zfoo.protocol.util.*; import io.netty.util.collection.ShortObjectHashMap; import org.slf4j.Logger; @@ -436,7 +437,7 @@ public class Router implements IRouter { // These rules are not necessary, but can reduce us from making low-level mistakes // If the request class name ends with Request which is for outer net client, then the attachment can not be a SignalAttachment // If the request class name ends with Ask which is for intranet client, then attachment can not be a GatewayAttachment - if (attachmentClazz != null && packetName.endsWith(PacketService.NET_ASK_SUFFIX)) { + if (attachmentClazz != null && packetName.endsWith(GenerateProtocolFile.NET_ASK_SUFFIX)) { AssertionUtils.isTrue(!attachmentClazz.equals(GatewayAttachment.class), "[class:{}] [method:{}] [packet:{}] can not match with [attachment:{}]!", bean.getClass().getName(), methodName, packetName, GatewayAttachment.class.getCanonicalName()); } diff --git a/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolFile.java b/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolFile.java index 4ebbcfc5..779a40bc 100644 --- a/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolFile.java +++ b/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolFile.java @@ -40,6 +40,58 @@ public abstract class GenerateProtocolFile { */ public static Predicate generateProtocolFilter = registration -> true; + + // ----------------------------------------------------------------------------------------------------------------- + /** + * EN: The conventions for network packets are as follows: + * 1. Client requests should end with "Request", and server responses should end with "Response". + * 2. Internal server requests should end with "Ask", and internal server responses should end with "Answer". + * 3. Server-initiated notifications to the client should end with "Notice". + * 4. Common protocols should be placed in the common module. + * 5. Internal protocols are not allowed to be used outside their scope. + *

+ * CN: 网络包的约定规则如下: + * 1. 客户端的请求约定以Request结尾,服务器的响应约定以Response结尾 + * 2. 服务器内部请求约定以Ask结尾,服务器内部的响应约定以Answer结尾 + * 3. 服务器主动通知客户端以Notice结尾 + * 4. 公共的协议放在common模块 + * 5. 内部协议范围不允许使用 + */ + public static final String NET_REQUEST_SUFFIX = "Request"; + public static final String NET_RESPONSE_SUFFIX = "Response"; + public static final String NET_NOTICE_SUFFIX = "Notice"; + + public static final String NET_ASK_SUFFIX = "Ask"; + public static final String NET_ANSWER_SUFFIX = "Answer"; + + public static final String NET_COMMON_PACKAGE = "common"; + public static final String NET_ATTACHMENT_PACKAGE = "attachment"; + + public static final Predicate DefaultNetGenerateProtocolFilter = it -> { + var clazz = it.protocolConstructor().getDeclaringClass(); + var className = clazz.getSimpleName(); + if (className.endsWith(NET_ASK_SUFFIX) || className.endsWith(NET_ANSWER_SUFFIX)) { + return false; + } + + if (className.endsWith(NET_REQUEST_SUFFIX) || className.endsWith(NET_RESPONSE_SUFFIX) || className.endsWith(NET_NOTICE_SUFFIX)) { + return true; + } + + if (clazz.getPackageName().endsWith(NET_COMMON_PACKAGE) || clazz.getPackageName().endsWith(NET_ATTACHMENT_PACKAGE)) { + return true; + } + + var module = ProtocolManager.moduleByModuleId(it.module()); + if (module.getName().equals(NET_COMMON_PACKAGE) || module.getName().equals(NET_ATTACHMENT_PACKAGE)) { + return true; + } + return false; + }; + + + // ----------------------------------------------------------------------------------------------------------------- + public static int localVariableId = 0; public static StringBuilder addTab(StringBuilder builder, int deep) {