From bba3f5e69d80c074ea323a839f71d4af58bf74db Mon Sep 17 00:00:00 2001 From: godotg Date: Thu, 30 Nov 2023 18:53:51 +0800 Subject: [PATCH] perf[protocol]: all protocol files are generated in a single protocol file --- .../registration/ProtocolAnalysis.java | 17 +++--- .../serializer/lua/GenerateLuaUtils.java | 54 ++++++++++++------- .../lua-one/ProtocolBaseTemplate.lua | 13 +++++ .../lua-one/ProtocolManagerTemplate.lua | 1 - .../lua-one/ProtocolReaderTemplate.lua | 7 +++ ...ocolTemplate1.lua => ProtocolTemplate.lua} | 0 .../resources/lua-one/ProtocolTemplate2.lua | 35 ------------ .../lua-one/ProtocolWriterTemplate.lua | 13 +++++ 8 files changed, 76 insertions(+), 64 deletions(-) create mode 100644 protocol/src/main/resources/lua-one/ProtocolBaseTemplate.lua create mode 100644 protocol/src/main/resources/lua-one/ProtocolReaderTemplate.lua rename protocol/src/main/resources/lua-one/{ProtocolTemplate1.lua => ProtocolTemplate.lua} (100%) delete mode 100644 protocol/src/main/resources/lua-one/ProtocolTemplate2.lua create mode 100644 protocol/src/main/resources/lua-one/ProtocolWriterTemplate.lua 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 4f85f652..76e4dc81 100644 --- a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java +++ b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolAnalysis.java @@ -71,7 +71,8 @@ public class ProtocolAnalysis { , "ByteBufUtils", "ArrayUtils", "CollectionUtils" , "Boolean", "Byte", "Short", "Integer", "Long", "Float", "Double", "String", "Character", "Object" , "Collections", "Iterator", "List", "ArrayList", "Map", "HashMap", "Set", "HashSet" - , "DecodedPacketInfo", "EncodedPacketInfo"); + , "DecodedPacketInfo", "EncodedPacketInfo" + , "Protocols", "ProtocolBase", "ProtocolWriter", "ProtocolReader"); /** * EN: Temp field, unsupported type @@ -133,24 +134,24 @@ public class ProtocolAnalysis { LinkedHashSet tempProtocolClassSet = new LinkedHashSet<>(protocolClassList); //去重 protocolClassList = new ArrayList<>(); - for(Class clazz : tempProtocolClassSet){ + for (Class clazz : tempProtocolClassSet) { protocolClassList.add(clazz); } Set relevantClassList = new LinkedHashSet<>(protocolClassList); for (var clazz : protocolClassList) { - Set> classSet = ClassUtils.relevantClass(clazz); - for(Class cls :classSet){ - if( !relevantClassList.contains(cls)){ + Set> classSet = ClassUtils.relevantClass(clazz); + for (Class cls : classSet) { + if (!relevantClassList.contains(cls)) { int protocolId = getProtocolIdAndCheckClass(cls); - if(protocolId >= 0){ + if (protocolId >= 0) { relevantClassList.add(cls); - }else{ + } else { throw new AssertException("[class:{}]类型必须声明", cls.getCanonicalName()); } } } } - //var relevantClassList = relevantClassSet; + //var relevantClassList = relevantClassSet; /* var relevantClassList = relevantClassSet.stream() .sorted((a, b) -> a.getCanonicalName().compareTo(b.getCanonicalName())) .toList();*/ diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java index 03732407..0b629bc0 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java @@ -93,25 +93,35 @@ public abstract class GenerateLuaUtils { // 生成Protocol.lua文件 var protocolManagerTemplate = ClassUtils.getFileFromClassPathToString("lua-one/ProtocolManagerTemplate.lua"); - var importProtocols = StringUtils.format("local Protocols = require(\"{}.Protocols\")", protocolOutputRootPath); - var importRegistrations = StringUtils.format("local Registrations = require(\"{}.Registrations\")", protocolOutputRootPath); + var builderImports = new StringBuilder(); + builderImports.append(TAB).append(StringUtils.format("local Protocols = require(\"{}.Protocols\")", protocolOutputRootPath)).append(LS); + builderImports.append(TAB).append(StringUtils.format("local ProtocolBase = require(\"{}.ProtocolBase\")", protocolOutputRootPath)).append(LS); + builderImports.append(TAB).append(StringUtils.format("local ProtocolWriter = require(\"{}.ProtocolWriter\")", protocolOutputRootPath)).append(LS); + builderImports.append(TAB).append(StringUtils.format("local ProtocolReader = require(\"{}.ProtocolReader\")", protocolOutputRootPath)).append(LS); var protocolBuilder = new StringBuilder(); for (var protocol : protocolList) { var protocolId = protocol.protocolId(); var protocolName = protocol.protocolConstructor().getDeclaringClass().getSimpleName(); protocolBuilder.append(TAB).append(StringUtils.format("protocols[{}] = Protocols.{}", protocolId, protocolName)).append(LS); } - protocolManagerTemplate = StringUtils.format(protocolManagerTemplate, StringUtils.EMPTY_JSON, StringUtils.EMPTY_JSON, importProtocols, importRegistrations, protocolBuilder.toString().trim()); + protocolManagerTemplate = StringUtils.format(protocolManagerTemplate, StringUtils.EMPTY_JSON, StringUtils.EMPTY_JSON, builderImports.toString().trim(), protocolBuilder.toString().trim()); FileUtils.writeStringToFile(new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolManager.lua")), protocolManagerTemplate, true); } public static void createLuaProtocolsInOneFile(List registrations) { - var protocolTemplate1 = ClassUtils.getFileFromClassPathToString("lua-one/ProtocolTemplate1.lua"); - var protocolTemplate2 = ClassUtils.getFileFromClassPathToString("lua-one/ProtocolTemplate2.lua"); - var builder1 = new StringBuilder(); - var builder2 = new StringBuilder(); + var protocolTemplate = ClassUtils.getFileFromClassPathToString("lua-one/ProtocolTemplate.lua"); + var protocolBaseTemplate = ClassUtils.getFileFromClassPathToString("lua-one/ProtocolBaseTemplate.lua"); + var protocolWriterTemplate = ClassUtils.getFileFromClassPathToString("lua-one/ProtocolWriterTemplate.lua"); + var protocolReaderTemplate = ClassUtils.getFileFromClassPathToString("lua-one/ProtocolReaderTemplate.lua"); + var builderProtocol = new StringBuilder(); + var builderProtocolBase = new StringBuilder(); + var builderProtocolWriter = new StringBuilder(); + var builderProtocolReader = new StringBuilder(); - builder2.append(StringUtils.format("local Protocols = require(\"{}.Protocols\")", protocolOutputRootPath)).append(LS + LS); + var requireProtocols = StringUtils.format("local Protocols = require(\"{}.Protocols\")", protocolOutputRootPath); + builderProtocolBase.append(requireProtocols).append(LS).append(LS); + builderProtocolWriter.append(requireProtocols).append(LS).append(LS); + builderProtocolReader.append(requireProtocols).append(LS).append(LS); for (var protocolRegistration : registrations) { var registration = (ProtocolRegistration) protocolRegistration; @@ -127,25 +137,29 @@ public abstract class GenerateLuaUtils { var writePacket = writePacket(registration); var readPacket = readPacket(registration); - var body1 = StringUtils.format(protocolTemplate1, classNote, protocolClazzName, StringUtils.EMPTY_JSON, protocolClazzName, valueOfMethod.trim()); - var body2 = StringUtils.format(protocolTemplate2, protocolClazzName, protocolId, protocolClazzName, protocolClazzName - , protocolClazzName, toStringJsonTemplate, toStringParams - , protocolClazzName, writePacket.trim(), protocolClazzName, protocolClazzName, readPacket.trim()); - builder1.append(body1).append(LS); - builder2.append(body2).append(LS); + var protocol = StringUtils.format(protocolTemplate, classNote, protocolClazzName, StringUtils.EMPTY_JSON, protocolClazzName, valueOfMethod.trim()); + var protocolBase = StringUtils.format(protocolBaseTemplate, protocolClazzName, protocolId, protocolClazzName, protocolClazzName, protocolClazzName, toStringJsonTemplate, toStringParams); + var protocolWriter = StringUtils.format(protocolWriterTemplate, protocolClazzName, writePacket.trim(), protocolClazzName); + var protocolReader = StringUtils.format(protocolReaderTemplate, protocolClazzName, readPacket.trim()); + + builderProtocol.append(protocol).append(LS); + builderProtocolBase.append(protocolBase).append(LS).append(LS); + builderProtocolWriter.append(protocolWriter).append(LS).append(LS); + builderProtocolReader.append(protocolReader).append(LS).append(LS); } - builder1.append(LS).append("local Protocols = {}").append(LS); + builderProtocol.append(LS).append("local Protocols = {}").append(LS); for (var protocolRegistration : registrations) { var registration = (ProtocolRegistration) protocolRegistration; var registrationConstructor = registration.getConstructor(); var protocolClazzName = registrationConstructor.getDeclaringClass().getSimpleName(); - builder1.append(StringUtils.format("Protocols.{} = {}", protocolClazzName, protocolClazzName)).append(LS); + builderProtocol.append(StringUtils.format("Protocols.{} = {}", protocolClazzName, protocolClazzName)).append(LS); } - builder1.append("return Protocols"); - - FileUtils.writeStringToFile(new File(StringUtils.format("{}/{}", protocolOutputRootPath, "Protocols.lua")), builder1.toString(), true); - FileUtils.writeStringToFile(new File(StringUtils.format("{}/{}", protocolOutputRootPath, "Registrations.lua")), builder2.toString(), true); + builderProtocol.append("return Protocols"); + FileUtils.writeStringToFile(new File(StringUtils.format("{}/{}", protocolOutputRootPath, "Protocols.lua")), builderProtocol.toString(), true); + FileUtils.writeStringToFile(new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolBase.lua")), builderProtocolBase.toString(), true); + FileUtils.writeStringToFile(new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolWriter.lua")), builderProtocolWriter.toString(), true); + FileUtils.writeStringToFile(new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolReader.lua")), builderProtocolReader.toString(), true); } public static void createProtocolManager(List protocolList) throws IOException { diff --git a/protocol/src/main/resources/lua-one/ProtocolBaseTemplate.lua b/protocol/src/main/resources/lua-one/ProtocolBaseTemplate.lua new file mode 100644 index 00000000..1c386b91 --- /dev/null +++ b/protocol/src/main/resources/lua-one/ProtocolBaseTemplate.lua @@ -0,0 +1,13 @@ +function Protocols.{}:protocolId() + return {} +end + +function Protocols.{}:protocolName() + return Protocols.{} +end + +function Protocols.{}:__tostring() + local jsonTemplate = "{}" + local result = string.format(jsonTemplate, {}) + return result +end \ No newline at end of file diff --git a/protocol/src/main/resources/lua-one/ProtocolManagerTemplate.lua b/protocol/src/main/resources/lua-one/ProtocolManagerTemplate.lua index 30a3924a..0c173653 100644 --- a/protocol/src/main/resources/lua-one/ProtocolManagerTemplate.lua +++ b/protocol/src/main/resources/lua-one/ProtocolManagerTemplate.lua @@ -35,7 +35,6 @@ end function initProtocol() {} {} - {} end ProtocolManager.initProtocol = initProtocol diff --git a/protocol/src/main/resources/lua-one/ProtocolReaderTemplate.lua b/protocol/src/main/resources/lua-one/ProtocolReaderTemplate.lua new file mode 100644 index 00000000..d4347420 --- /dev/null +++ b/protocol/src/main/resources/lua-one/ProtocolReaderTemplate.lua @@ -0,0 +1,7 @@ +function Protocols.{}:write(buffer, packet) + if packet == nil then + buffer:writeInt(0) + return + end + {} +end \ No newline at end of file diff --git a/protocol/src/main/resources/lua-one/ProtocolTemplate1.lua b/protocol/src/main/resources/lua-one/ProtocolTemplate.lua similarity index 100% rename from protocol/src/main/resources/lua-one/ProtocolTemplate1.lua rename to protocol/src/main/resources/lua-one/ProtocolTemplate.lua diff --git a/protocol/src/main/resources/lua-one/ProtocolTemplate2.lua b/protocol/src/main/resources/lua-one/ProtocolTemplate2.lua deleted file mode 100644 index 54f9eeb5..00000000 --- a/protocol/src/main/resources/lua-one/ProtocolTemplate2.lua +++ /dev/null @@ -1,35 +0,0 @@ -function Protocols.{}:protocolId() - return {} -end - -function Protocols.{}:protocolName() - return Protocols.{} -end - -function Protocols.{}:__tostring() - local jsonTemplate = "{}" - local result = string.format(jsonTemplate, {}) - return result -end - -function Protocols.{}:write(buffer, packet) - if packet == nil then - buffer:writeInt(0) - return - end - {} -end - -function Protocols.{}:read(buffer) - local length = buffer:readInt() - if length == 0 then - return nil - end - local beforeReadIndex = buffer:getReadOffset() - local packet = Protocols.{}:new() - {} - if length > 0 then - buffer:setReadOffset(beforeReadIndex + length) - end - return packet -end \ No newline at end of file diff --git a/protocol/src/main/resources/lua-one/ProtocolWriterTemplate.lua b/protocol/src/main/resources/lua-one/ProtocolWriterTemplate.lua new file mode 100644 index 00000000..1c82e934 --- /dev/null +++ b/protocol/src/main/resources/lua-one/ProtocolWriterTemplate.lua @@ -0,0 +1,13 @@ +function Protocols.{}:read(buffer) + local length = buffer:readInt() + if length == 0 then + return nil + end + local beforeReadIndex = buffer:getReadOffset() + local packet = Protocols.{}:new() + {} + if length > 0 then + buffer:setReadOffset(beforeReadIndex + length) + end + return packet +end \ No newline at end of file