diff --git a/protocol/README.md b/protocol/README.md index c7e3704a..b9555080 100644 --- a/protocol/README.md +++ b/protocol/README.md @@ -172,8 +172,6 @@ your protocol number a little more compactly, so that your protocol number will ``` syntax = "proto3"; package test.message; - // start_protocol_id = 500 - // The above starting ID indicates which protocol number of the entire file starts with message SimpleObject { int64 aa = 1; diff --git a/protocol/README_CN.md b/protocol/README_CN.md index 46b2629c..265c6c15 100644 --- a/protocol/README_CN.md +++ b/protocol/README_CN.md @@ -149,8 +149,6 @@ cpu: i9900k ``` syntax = "proto3"; package test.message; - // start_protocol_id = 500 - // 上面这个起始id表示整个文件的协议号从哪个开始 message SimpleObject { int64 aa = 1; diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GeneratePbUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GeneratePbUtils.java index e6262f7c..4525e861 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GeneratePbUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/GeneratePbUtils.java @@ -22,6 +22,7 @@ import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.serializer.protobuf.parser.Proto; import com.zfoo.protocol.serializer.protobuf.parser.ProtoParser; import com.zfoo.protocol.util.FileUtils; +import com.zfoo.protocol.util.NumberUtils; import com.zfoo.protocol.util.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,7 +56,7 @@ public abstract class GeneratePbUtils { } // java package path if (StringUtils.isNotEmpty(pbGenerateOperation.getJavaPackage())) { - protocolOutputPath = protocolOutputPath + File.separator+ pbGenerateOperation.getJavaPackage().replaceAll(StringUtils.PERIOD_REGEX, "/"); + protocolOutputPath = protocolOutputPath + File.separator + pbGenerateOperation.getJavaPackage().replaceAll(StringUtils.PERIOD_REGEX, "/"); } var protoPathFile = new File(pbGenerateOperation.getProtoPath()); @@ -91,11 +92,20 @@ public abstract class GeneratePbUtils { // parse protobuf proto ProtoParser parser = new ProtoParser(protoString); Proto proto = parser.parse(); - proto.setName(FileUtils.fileSimpleName(protoFile.getName())); + var protoSimpleName = FileUtils.fileSimpleName(protoFile.getName()); + + var protoName = StringUtils.substringAfterFirst(protoSimpleName, "_"); + var startProtocolIdStr = StringUtils.substringBeforeFirst(protoSimpleName, "_"); + if (!NumberUtils.isNumeric(startProtocolIdStr)) { + throw new RuntimeException(StringUtils.format("proto:[{}] name format is number_xxx.proto", protoName)); + } + + var startProtocolId = Short.parseShort(startProtocolIdStr); + proto.setName(protoName); + proto.setStartProtocolId(startProtocolId); protos.add(proto); // auto generate protocolId - var startProtocolId = proto.getStartProtocolId(); for (var pbMessage : proto.getPbMessages()) { pbMessage.setProtocolId(startProtocolId++); } @@ -110,7 +120,7 @@ public abstract class GeneratePbUtils { var protocolName = pbMessage.getName(); if (protocolIdMap.containsKey(protocolId)) { var pair = protocolIdMap.get(protocolId); - throw new RuntimeException(StringUtils.format("duplicate protocolId:[{}] in [{}]:[{}] and [{}]:[{}], consider proto start_protocol_id is too close" + throw new RuntimeException(StringUtils.format("duplicate protocolId:[{}] in [{}]:[{}] and [{}]:[{}], consider proto start protocol id is too close" , protocolId, pair.getKey().getName(), pair.getValue().getName(), proto.getName(), protocolName)); } if (protocolNameMap.containsKey(protocolName)) { diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/parser/ProtoParser.java b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/parser/ProtoParser.java index 25f78988..79de27e3 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/parser/ProtoParser.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/parser/ProtoParser.java @@ -65,19 +65,8 @@ public class ProtoParser { switch (token) { case "//": String line = readSingleLineComment(); - // 解析协议开始的start_protocol_id line = StringUtils.trim(line); - if (line.startsWith("start_protocol_id")) { - var splits = line.split("="); - for (var s : splits) { - s = s.trim(); - if (NumberUtils.isInteger(s)) { - proto.setStartProtocolId(Short.parseShort(s)); - } - } - } else { - comments.add(line); - } + comments.add(line); nextLine(); break; case "/*": diff --git a/protocol/src/test/protobuf/one_enum.proto b/protocol/src/test/protobuf/200_one_enum.proto similarity index 100% rename from protocol/src/test/protobuf/one_enum.proto rename to protocol/src/test/protobuf/200_one_enum.proto diff --git a/protocol/src/test/protobuf/all_type.proto b/protocol/src/test/protobuf/300_all_type.proto similarity index 88% rename from protocol/src/test/protobuf/all_type.proto rename to protocol/src/test/protobuf/300_all_type.proto index 09945357..9e1d5d0a 100644 --- a/protocol/src/test/protobuf/all_type.proto +++ b/protocol/src/test/protobuf/300_all_type.proto @@ -1,8 +1,7 @@ syntax = "proto3"; package test.message; -import "one_map.proto"; -import "one_message.proto"; -// start_protocol_id = 300 +import "400_one_map.proto"; +import "500_one_message.proto"; // 如果字段的tag超过1000,则视这个字段为需要兼容的协议字段 diff --git a/protocol/src/test/protobuf/one_map.proto b/protocol/src/test/protobuf/400_one_map.proto similarity index 86% rename from protocol/src/test/protobuf/one_map.proto rename to protocol/src/test/protobuf/400_one_map.proto index a68aea2e..939b7fa3 100644 --- a/protocol/src/test/protobuf/one_map.proto +++ b/protocol/src/test/protobuf/400_one_map.proto @@ -1,7 +1,5 @@ syntax = "proto3"; package test.message; -// start_protocol_id = 400 - message OneMap { map value = 1; diff --git a/protocol/src/test/protobuf/one_message.proto b/protocol/src/test/protobuf/500_one_message.proto similarity index 81% rename from protocol/src/test/protobuf/one_message.proto rename to protocol/src/test/protobuf/500_one_message.proto index b10e9a66..3e79180f 100644 --- a/protocol/src/test/protobuf/one_message.proto +++ b/protocol/src/test/protobuf/500_one_message.proto @@ -1,8 +1,5 @@ syntax = "proto3"; package test.message; -// start_protocol_id = 500 -// 上面这个起始id表示整个文件的协议号从哪个开始 - message OneMessage { Proj value = 1;