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 e8a2afef..9058395b 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 @@ -234,7 +234,12 @@ public abstract class GeneratePbUtils { var documentComment = buildDocumentComment(pbMessage); builder.append(documentComment); + // message + var startProtocolId = proto.getStartProtocolId(); + builder.append(StringUtils.format("@Protocol(id = {})", startProtocolId)).append(LS); builder.append(StringUtils.format("public class {} {", pbMessage.getName())).append(LS); + startProtocolId++; + proto.setStartProtocolId(startProtocolId); var pbFields = pbMessage.getFields() .stream() diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/parser/Proto.java b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/parser/Proto.java index 0977a23a..9c90c7e6 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/parser/Proto.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/protobuf/parser/Proto.java @@ -54,6 +54,10 @@ public class Proto { * proto文件的单行注释列表 */ private List comments = new ArrayList<>(); + /** + * 协议的起始Id + */ + private short startProtocolId; public String getName() { return name; @@ -110,4 +114,12 @@ public class Proto { public void setComments(List comments) { this.comments = comments; } + + public short getStartProtocolId() { + return startProtocolId; + } + + public void setStartProtocolId(short startProtocolId) { + this.startProtocolId = startProtocolId; + } } \ No newline at end of file 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 83c5d795..25f78988 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 @@ -16,6 +16,7 @@ package com.zfoo.protocol.serializer.protobuf.parser; import com.zfoo.protocol.collection.CollectionUtils; import com.zfoo.protocol.serializer.protobuf.*; import com.zfoo.protocol.serializer.protobuf.PbField.Cardinality; +import com.zfoo.protocol.util.NumberUtils; import com.zfoo.protocol.util.StringUtils; import java.util.*; @@ -64,7 +65,19 @@ public class ProtoParser { switch (token) { case "//": String line = readSingleLineComment(); - comments.add(line); + // 解析协议开始的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); + } nextLine(); break; case "/*": diff --git a/protocol/src/test/java/com/zfoo/protocol/protobuf/AllTypeBuilderTest.java b/protocol/src/test/java/com/zfoo/protocol/generate/GenerateProtobufTesting.java similarity index 79% rename from protocol/src/test/java/com/zfoo/protocol/protobuf/AllTypeBuilderTest.java rename to protocol/src/test/java/com/zfoo/protocol/generate/GenerateProtobufTesting.java index 1d5592df..65d84306 100644 --- a/protocol/src/test/java/com/zfoo/protocol/protobuf/AllTypeBuilderTest.java +++ b/protocol/src/test/java/com/zfoo/protocol/generate/GenerateProtobufTesting.java @@ -1,6 +1,5 @@ /* - * Copyright 2021 The edap Project - * + * Copyright (C) 2020 The zfoo Authors * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * @@ -11,7 +10,7 @@ * See the License for the specific language governing permissions and limitations under the License. */ -package com.zfoo.protocol.protobuf; +package com.zfoo.protocol.generate; import com.zfoo.protocol.serializer.protobuf.GeneratePbUtils; import com.zfoo.protocol.serializer.protobuf.PbGenerateOperation; @@ -20,15 +19,14 @@ import org.junit.Test; @Ignore -public class AllTypeBuilderTest { +public class GenerateProtobufTesting { @Test public void testAllTypeTest() { var buildOption = new PbGenerateOperation(); buildOption.setProtoPath("D:\\github\\zfoo\\protocol\\src\\test\\resources\\proto"); -// buildOption.setProtoPath("D:\\github\\zoo\\app\\zgame\\zgame-common\\src\\main\\resources\\proto"); buildOption.setOutputPath("D:\\github\\zfoo\\protocol\\src\\test\\tmpsrc/"); - buildOption.setJavaPackage("com.zfoo.protocol.common"); + buildOption.setJavaPackage("com.zfoo.protocol.generate.test"); GeneratePbUtils.create(buildOption); } diff --git a/protocol/src/test/resources/proto/all_type.proto b/protocol/src/test/resources/proto/all_type.proto index a879407d..079bb505 100644 --- a/protocol/src/test/resources/proto/all_type.proto +++ b/protocol/src/test/resources/proto/all_type.proto @@ -1,12 +1,12 @@ syntax = "proto3"; - package test.message; import "one_map.proto"; import "one_message.proto"; -option java_package = "io.edap.protobuf.test.message.v3"; -//option java_outer_classname = "MessageOuter"; +option java_package = "start"; + +// start_protocol_id = 100 message AllType { bool field1 = 1; diff --git a/protocol/src/test/resources/proto/one_map.proto b/protocol/src/test/resources/proto/one_map.proto index c1c94f21..5396ba24 100644 --- a/protocol/src/test/resources/proto/one_map.proto +++ b/protocol/src/test/resources/proto/one_map.proto @@ -5,6 +5,8 @@ package test.message; option java_package = "io.edap.protobuf.test.message.v3"; +// start_protocol_id = 200 + message OneMap { map value = 1; } diff --git a/protocol/src/test/resources/proto/one_message.proto b/protocol/src/test/resources/proto/one_message.proto index 6d380ae7..2d989964 100644 --- a/protocol/src/test/resources/proto/one_message.proto +++ b/protocol/src/test/resources/proto/one_message.proto @@ -5,6 +5,8 @@ package test.message; option java_package = "io.edap.protobuf.test.message.v3"; +// start_protocol_id = 200 + message OneMessage { Proj value = 1; }