From b6f170e104c8ca3efa3706cd8884a3b35faec495 Mon Sep 17 00:00:00 2001 From: godotg Date: Fri, 17 Nov 2023 15:12:58 +0800 Subject: [PATCH] perf[protocol]: protocol generate to string method --- .../serializer/lua/GenerateLuaUtils.java | 49 +++++++++++++++++-- .../main/resources/lua/ProtocolTemplate.lua | 10 ++++ 2 files changed, 54 insertions(+), 5 deletions(-) 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 b7d6946c..a0e77b94 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 @@ -14,6 +14,7 @@ package com.zfoo.protocol.serializer.lua; import com.zfoo.protocol.anno.Compatible; +import com.zfoo.protocol.collection.ArrayUtils; import com.zfoo.protocol.generate.GenerateOperation; import com.zfoo.protocol.generate.GenerateProtocolFile; import com.zfoo.protocol.generate.GenerateProtocolNote; @@ -26,14 +27,12 @@ import com.zfoo.protocol.serializer.csharp.GenerateCsUtils; import com.zfoo.protocol.serializer.reflect.*; import com.zfoo.protocol.util.ClassUtils; import com.zfoo.protocol.util.FileUtils; +import com.zfoo.protocol.util.ReflectionUtils; import com.zfoo.protocol.util.StringUtils; import java.io.File; import java.io.IOException; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import static com.zfoo.protocol.util.FileUtils.LS; import static com.zfoo.protocol.util.StringUtils.TAB; @@ -124,11 +123,14 @@ public abstract class GenerateLuaUtils { var classNote = GenerateProtocolNote.classNote(protocolId, CodeLanguage.Lua); var valueOfMethod = valueOfMethod(registration); + var toStringJsonTemplate = toStringJsonTemplate(registration); + var toStringParams = toStringParams(registration); var writePacket = writePacket(registration); var readPacket = readPacket(registration); protocolTemplate = StringUtils.format(protocolTemplate, classNote, protocolClazzName, StringUtils.EMPTY_JSON, protocolClazzName - , valueOfMethod.trim(), protocolClazzName, protocolId + , valueOfMethod.trim(), protocolClazzName, protocolId, protocolClazzName, protocolClazzName + , protocolClazzName, toStringJsonTemplate, toStringParams , protocolClazzName, writePacket.trim(), protocolClazzName, protocolClazzName, readPacket.trim(), protocolClazzName); var outputPath = StringUtils.format("{}/{}/{}.lua" @@ -164,6 +166,43 @@ public abstract class GenerateLuaUtils { return luaBuilder.toString(); } + private static String toStringJsonTemplate(ProtocolRegistration registration) { + var fields = registration.getFields(); + var fieldRegistrations = registration.getFieldRegistrations(); + var gdBuilder = new StringBuilder(); + gdBuilder.append("{"); + // when generate source code fields, use origin fields sort + var sequencedFields = ReflectionUtils.notStaticAndTransientFields(registration.getConstructor().getDeclaringClass()); + var params = new ArrayList(); + for (var field : sequencedFields) { + var fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; + var fieldName = field.getName(); + params.add(StringUtils.format("{}:%s", fieldName)); + } + gdBuilder.append(StringUtils.joinWith(", ", params.toArray())); + gdBuilder.append("}"); + return gdBuilder.toString(); + } + + private static String toStringParams(ProtocolRegistration registration) { + var fields = registration.getFields(); + if (ArrayUtils.isEmpty(fields)) { + return StringUtils.EMPTY_JSON; + } + var fieldRegistrations = registration.getFieldRegistrations(); + var gdBuilder = new StringBuilder(); + // when generate source code fields, use origin fields sort + var sequencedFields = ReflectionUtils.notStaticAndTransientFields(registration.getConstructor().getDeclaringClass()); + var params = new ArrayList(); + for (var field : sequencedFields) { + var fieldRegistration = fieldRegistrations[GenerateProtocolFile.indexOf(fields, field)]; + var fieldName = field.getName(); + params.add(StringUtils.format("self.{}", field.getName())); + } + gdBuilder.append(StringUtils.joinWith(", ", params.toArray())); + return gdBuilder.toString(); + } + private static String writePacket(ProtocolRegistration registration) { var fields = registration.getFields(); var fieldRegistrations = registration.getFieldRegistrations(); diff --git a/protocol/src/main/resources/lua/ProtocolTemplate.lua b/protocol/src/main/resources/lua/ProtocolTemplate.lua index cbca730c..9fc9cc29 100644 --- a/protocol/src/main/resources/lua/ProtocolTemplate.lua +++ b/protocol/src/main/resources/lua/ProtocolTemplate.lua @@ -14,6 +14,16 @@ function {}:protocolId() return {} end +function {}:protocolName() + return {} +end + +function {}:__tostring() + local jsonTemplate = "{}" + local result = string.format(jsonTemplate, {}) + return result +end + function {}:write(buffer, packet) if packet == nil then buffer:writeInt(0)