perf[protocol]: protocol generate to string method

This commit is contained in:
godotg
2023-11-17 15:12:58 +08:00
parent 94c3b7cd07
commit b6f170e104
2 changed files with 54 additions and 5 deletions
@@ -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<String>();
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<String>();
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();
@@ -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)