feat[lua]: compatible field of inside protocol class in lua

This commit is contained in:
godotg
2023-10-19 13:09:04 +08:00
parent 9d393e76d5
commit a20f744eb4
17 changed files with 78 additions and 17 deletions
@@ -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<String, String> 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) {
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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);
@@ -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;
@@ -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);
@@ -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);
@@ -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);
@@ -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
@@ -1,7 +1,7 @@
{}
local {} = {}
function {}:new({})
function {}:new()
local obj = {
{}
}