From b6f170e104c8ca3efa3706cd8884a3b35faec495 Mon Sep 17 00:00:00 2001 From: godotg Date: Fri, 17 Nov 2023 15:12:58 +0800 Subject: [PATCH 1/2] 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) From 72bc89b0b81b1572bf6e73d883c3f3d53ce6224b Mon Sep 17 00:00:00 2001 From: godotg Date: Fri, 17 Nov 2023 15:13:27 +0800 Subject: [PATCH 2/2] doc[zfoo]: update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 09e5e1af..ffd5fa44 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ English | [简体中文](./README_CN.md) Ⅰ. Introduction of zfoo🚩 ----------- -- **Extremely fast, asynchronous, actor design pattern, lock free, universal RPC framework, native GraalVM support** +- **Extremely fast, asynchronous, actor design, lock free, universal RPC framework, native GraalVM support** - **Decentralized serialization [zfoo protocol](protocol/README.md)**,supports C++ C# Go Java Javascript TypeScript Lua GDScript Python - **High scalability**,Single server deployment, microservice deployment, cluster deployment, gateway deployment - **Can be used as a game server framework or website server framework.**