From a20f744eb44ec58a189ef4030121667cf2024905 Mon Sep 17 00:00:00 2001 From: godotg Date: Thu, 19 Oct 2023 13:09:04 +0800 Subject: [PATCH] feat[lua]: compatible field of inside protocol class in lua --- .../serializer/lua/GenerateLuaUtils.java | 20 ++++++++++--------- .../serializer/lua/ILuaSerializer.java | 2 ++ .../serializer/lua/LuaArraySerializer.java | 5 +++++ .../serializer/lua/LuaBooleanSerializer.java | 5 +++++ .../serializer/lua/LuaByteSerializer.java | 5 +++++ .../serializer/lua/LuaDoubleSerializer.java | 5 +++++ .../serializer/lua/LuaFloatSerializer.java | 4 ++++ .../serializer/lua/LuaIntSerializer.java | 4 ++++ .../serializer/lua/LuaListSerializer.java | 5 +++++ .../serializer/lua/LuaLongSerializer.java | 5 +++++ .../serializer/lua/LuaMapSerializer.java | 4 ++++ .../lua/LuaObjectProtocolSerializer.java | 5 +++++ .../serializer/lua/LuaSetSerializer.java | 5 +++++ .../serializer/lua/LuaShortSerializer.java | 4 ++++ .../serializer/lua/LuaStringSerializer.java | 5 +++++ .../src/main/resources/lua/ByteBuffer.lua | 10 +++------- .../main/resources/lua/ProtocolTemplate.lua | 2 +- 17 files changed, 78 insertions(+), 17 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 7f853b43..b7d6946c 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 @@ -22,6 +22,7 @@ import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.IProtocolRegistration; import com.zfoo.protocol.registration.ProtocolRegistration; import com.zfoo.protocol.serializer.CodeLanguage; +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; @@ -127,7 +128,7 @@ public abstract class GenerateLuaUtils { var readPacket = readPacket(registration); protocolTemplate = StringUtils.format(protocolTemplate, classNote, protocolClazzName, StringUtils.EMPTY_JSON, protocolClazzName - , valueOfMethod.getKey().trim(), valueOfMethod.getValue().trim(), protocolClazzName, protocolId + , valueOfMethod.trim(), protocolClazzName, protocolId , protocolClazzName, writePacket.trim(), protocolClazzName, protocolClazzName, readPacket.trim(), protocolClazzName); var outputPath = StringUtils.format("{}/{}/{}.lua" @@ -135,31 +136,32 @@ public abstract class GenerateLuaUtils { FileUtils.writeStringToFile(new File(outputPath), protocolTemplate, true); } - private static Pair valueOfMethod(ProtocolRegistration registration) { + private static String valueOfMethod(ProtocolRegistration registration) { var protocolId = registration.getId(); var fields = registration.getFields(); - - var valueOfParams = StringUtils.joinWith(", ", Arrays.stream(fields).map(it -> it.getName()).toList().toArray()); + var fieldRegistrations = registration.getFieldRegistrations(); var luaBuilder = new StringBuilder(); for (var i = 0; i < fields.length; i++) { var field = fields[i]; + var fieldRegistration = fieldRegistrations[i]; var fieldName = field.getName(); // 生成注释 var fieldNote = GenerateProtocolNote.fieldNote(protocolId, fieldName, CodeLanguage.Lua); if (StringUtils.isNotBlank(fieldNote)) { luaBuilder.append(TAB + TAB).append(fieldNote).append(LS); } - + var fieldDefaultValue = luaSerializer(fieldRegistration.serializer()).fieldDefaultValue(field, fieldRegistration); if (i == fields.length - 1) { - luaBuilder.append(TAB + TAB).append(StringUtils.format("{} = {}", fieldName, fieldName)); + luaBuilder.append(TAB + TAB).append(StringUtils.format("{} = {}", fieldName, fieldDefaultValue)); } else { - luaBuilder.append(TAB + TAB).append(StringUtils.format("{} = {},", fieldName, fieldName)); + luaBuilder.append(TAB + TAB).append(StringUtils.format("{} = {},", fieldName, fieldDefaultValue)); } + var typeNote = GenerateCsUtils.toCsClassName(field.getGenericType().getTypeName()); // 生成类型的注释 - luaBuilder.append(" -- ").append(field.getGenericType().getTypeName()).append(LS); + luaBuilder.append(" -- ").append(typeNote).append(LS); } - return new Pair<>(valueOfParams, luaBuilder.toString()); + return luaBuilder.toString(); } private static String writePacket(ProtocolRegistration registration) { diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/ILuaSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/ILuaSerializer.java index fc088807..29b38ca9 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/ILuaSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/ILuaSerializer.java @@ -22,6 +22,8 @@ import java.lang.reflect.Field; */ public interface ILuaSerializer { + String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration); + void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration); String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaArraySerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaArraySerializer.java index 4bc63963..99964c4a 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaArraySerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaArraySerializer.java @@ -30,6 +30,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaArraySerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "{}"; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaBooleanSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaBooleanSerializer.java index 0efdd307..be6627bf 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaBooleanSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaBooleanSerializer.java @@ -27,6 +27,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaBooleanSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "false"; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaByteSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaByteSerializer.java index e77ef549..8ef9751b 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaByteSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaByteSerializer.java @@ -27,6 +27,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaByteSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "0"; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaDoubleSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaDoubleSerializer.java index 6fec5fcb..c72509a8 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaDoubleSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaDoubleSerializer.java @@ -27,6 +27,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaDoubleSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "0"; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaFloatSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaFloatSerializer.java index 9fffaddd..6dd61ba7 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaFloatSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaFloatSerializer.java @@ -27,6 +27,10 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaFloatSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "0"; + } @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaIntSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaIntSerializer.java index a466e4b8..7d23cb92 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaIntSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaIntSerializer.java @@ -26,6 +26,10 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaIntSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "0"; + } @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaListSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaListSerializer.java index 570178c7..fbe0cb7a 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaListSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaListSerializer.java @@ -29,6 +29,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaListSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "{}"; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaLongSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaLongSerializer.java index 2f6ba3f1..a8f9a04a 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaLongSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaLongSerializer.java @@ -26,6 +26,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaLongSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "0"; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaMapSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaMapSerializer.java index 96738ce3..4ebdd9ba 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaMapSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaMapSerializer.java @@ -29,6 +29,10 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaMapSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "{}"; + } @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaObjectProtocolSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaObjectProtocolSerializer.java index b512261e..3b2ad1e5 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaObjectProtocolSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaObjectProtocolSerializer.java @@ -26,6 +26,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaObjectProtocolSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "nil"; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { ObjectProtocolField objectProtocolField = (ObjectProtocolField) fieldRegistration; diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaSetSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaSetSerializer.java index f79f6aa9..1319258c 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaSetSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaSetSerializer.java @@ -29,6 +29,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaSetSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "{}"; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaShortSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaShortSerializer.java index 62fe5c23..2e10f33e 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaShortSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaShortSerializer.java @@ -27,6 +27,10 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaShortSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "0"; + } @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaStringSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaStringSerializer.java index b38dd440..3588b6d4 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaStringSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/LuaStringSerializer.java @@ -26,6 +26,11 @@ import static com.zfoo.protocol.util.FileUtils.LS; */ public class LuaStringSerializer implements ILuaSerializer { + @Override + public String fieldDefaultValue(Field field, IFieldRegistration fieldRegistration) { + return "\"\""; + } + @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/resources/lua/ByteBuffer.lua b/protocol/src/main/resources/lua/ByteBuffer.lua index 0e9a6c06..9bfb67e4 100644 --- a/protocol/src/main/resources/lua/ByteBuffer.lua +++ b/protocol/src/main/resources/lua/ByteBuffer.lua @@ -115,10 +115,8 @@ function ByteBuffer:getWriteOffset() end function ByteBuffer:setWriteOffset(writeOffset) - if writeOffset > #self.buffer then - error("index out of bounds exception: readerIndex: " + self.readOffset - + ", writerIndex: " + self.writeOffset - + "(expected: 0 <= readerIndex <= writerIndex <= capacity:" + #self.buffer) + if writeOffset > #self.buffer + 1 then + error(string.format("writeOffset: %s index out of bounds exception: readerIndex: %s, writerIndex: %s, (expected: 0 <= readerIndex <= writerIndex <= capacity: %s)", writeOffset, self.readOffset, self.writeOffset, #self.buffer)) end self.writeOffset = writeOffset return self @@ -130,9 +128,7 @@ end function ByteBuffer:setReadOffset(readOffset) if readOffset > self.writeOffset then - error("index out of bounds exception: readerIndex: " + self.readOffset - + ", writerIndex: " + this.writeOffset - + "(expected: 0 <= readerIndex <= writerIndex <= capacity:" + #self.buffer) + error(string.format("readOffset: %s index out of bounds exception: readerIndex: %s, writerIndex: %s, (expected: 0 <= readerIndex <= writerIndex <= capacity: %s)", readOffset, self.readOffset, self.writeOffset, #self.buffer)) end self.readOffset = readOffset return self diff --git a/protocol/src/main/resources/lua/ProtocolTemplate.lua b/protocol/src/main/resources/lua/ProtocolTemplate.lua index 9211fae5..cbca730c 100644 --- a/protocol/src/main/resources/lua/ProtocolTemplate.lua +++ b/protocol/src/main/resources/lua/ProtocolTemplate.lua @@ -1,7 +1,7 @@ {} local {} = {} -function {}:new({}) +function {}:new() local obj = { {} }