feat[golang]: compatible field of inside protocol class

This commit is contained in:
godotg committed 2023-10-15 19:54:03 +08:00
1 parent 19559f755d
commit efd01781e2
7 files changed
+19 -66

No files matched your search

@@ -141,11 +141,11 @@ public abstract class GenerateCppUtils {
, valueOfMethod.getValue().trim(), protocolId, protocolClazzName, operator.trim(), , valueOfMethod.getValue().trim(), protocolId, protocolClazzName, operator.trim(),
protocolClazzName, protocolId, protocolClazzName, writeObject.trim(), protocolClazzName, readObject.trim()); protocolClazzName, protocolId, protocolClazzName, writeObject.trim(), protocolClazzName, readObject.trim());
var protocolOutputPath = StringUtils.format("{}/{}/{}.h" var outputPath = StringUtils.format("{}/{}/{}.h"
, GenerateCppUtils.protocolOutputPath , GenerateCppUtils.protocolOutputPath
, GenerateProtocolPath.getProtocolPath(protocolId) , GenerateProtocolPath.getProtocolPath(protocolId)
, protocolClazzName); , protocolClazzName);
FileUtils.writeStringToFile(new File(protocolOutputPath), protocolTemplate, true); FileUtils.writeStringToFile(new File(outputPath), protocolTemplate, true);
} }
@@ -118,11 +118,11 @@ public abstract class GenerateCsUtils {
, protocolId, protocolClazzName, protocolId, protocolClazzName, protocolClazzName, writeObject.trim() , protocolId, protocolClazzName, protocolId, protocolClazzName, protocolClazzName, writeObject.trim()
, protocolClazzName, protocolClazzName, readObject.trim()); , protocolClazzName, protocolClazzName, readObject.trim());
var protocolOutputPath = StringUtils.format("{}/{}/{}.cs" var outputPath = StringUtils.format("{}/{}/{}.cs"
, protocolOutputRootPath , protocolOutputRootPath
, GenerateProtocolPath.getCapitalizeProtocolPath(protocolId) , GenerateProtocolPath.getCapitalizeProtocolPath(protocolId)
, protocolClazzName); , protocolClazzName);
FileUtils.writeStringToFile(new File(protocolOutputPath), protocolTemplate, true); FileUtils.writeStringToFile(new File(outputPath), protocolTemplate, true);
} }
private static String fieldDefinition(ProtocolRegistration registration) { private static String fieldDefinition(ProtocolRegistration registration) {
@@ -23,6 +23,7 @@ import com.zfoo.protocol.registration.IProtocolRegistration;
import com.zfoo.protocol.registration.ProtocolRegistration; import com.zfoo.protocol.registration.ProtocolRegistration;
import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.IFieldRegistration;
import com.zfoo.protocol.serializer.CodeLanguage; import com.zfoo.protocol.serializer.CodeLanguage;
import com.zfoo.protocol.serializer.cpp.GenerateCppUtils;
import com.zfoo.protocol.serializer.reflect.*; import com.zfoo.protocol.serializer.reflect.*;
import com.zfoo.protocol.util.ClassUtils; import com.zfoo.protocol.util.ClassUtils;
import com.zfoo.protocol.util.FileUtils; import com.zfoo.protocol.util.FileUtils;
@@ -114,39 +115,25 @@ public abstract class GenerateGoUtils {
var registrationConstructor = registration.getConstructor(); var registrationConstructor = registration.getConstructor();
var protocolClazzName = registrationConstructor.getDeclaringClass().getSimpleName(); var protocolClazzName = registrationConstructor.getDeclaringClass().getSimpleName();
var protocolTemplate = ArrayUtils.isEmpty(registration.getFields()) var protocolTemplate = ClassUtils.getFileFromClassPathToString("go/ProtocolTemplate.go");
? ClassUtils.getFileFromClassPathToString("go/ProtocolTemplateEmpty.go")
: ClassUtils.getFileFromClassPathToString("go/ProtocolTemplate.go");
var classNote = GenerateProtocolNote.classNote(protocolId, CodeLanguage.Go); var classNote = GenerateProtocolNote.classNote(protocolId, CodeLanguage.Go);
var fieldDefinition = fieldDefinition(registration); var fieldDefinition = fieldDefinition(registration);
var writeObject = writeObject(registration); var writeObject = writeObject(registration);
var readObject = readObject(registration); var readObject = readObject(registration);
if (ArrayUtils.isEmpty(registration.getFields())) {
protocolTemplate = StringUtils.format(protocolTemplate, classNote, protocolClazzName, fieldDefinition.trim()
, protocolClazzName, protocolId, protocolClazzName, protocolClazzName, protocolClazzName);
} else {
protocolTemplate = StringUtils.format(protocolTemplate, classNote, protocolClazzName, fieldDefinition.trim()
, protocolClazzName, protocolId, protocolClazzName, protocolClazzName
, writeObject.trim(), protocolClazzName, protocolClazzName, readObject.trim());
}
var protocolPath = GenerateProtocolPath.getProtocolPath(protocolId); protocolTemplate = StringUtils.format(protocolTemplate, classNote, protocolClazzName, fieldDefinition.trim()
, protocolClazzName, protocolId, protocolClazzName, protocolClazzName
, writeObject.trim(), protocolClazzName, protocolClazzName, readObject.trim());
var protocolPath = GenerateProtocolPath.protocolAbsolutePath(protocolId);
if (StringUtils.isEmpty(protocolPath)) { if (StringUtils.isEmpty(protocolPath)) {
protocolPath = protocolClazzName; protocolPath = protocolClazzName;
} else if (protocolPath.contains(StringUtils.SLASH)) { } else if (protocolPath.contains(StringUtils.SLASH)) {
protocolPath = StringUtils.substringAfterLast(protocolPath, StringUtils.SLASH); protocolPath = StringUtils.substringAfterLast(protocolPath, StringUtils.SLASH);
} }
var outputPath = StringUtils.format("{}/{}/{}.go", protocolOutputPath, protocolOutputRootPath, protocolClazzName);
var protocolOutputPath = StringUtils.format("{}/{}.go" FileUtils.writeStringToFile(outputPath, protocolTemplate, true);
, protocolOutputRootPath
, protocolPath);
var protocolFile = new File(protocolOutputPath);
if (protocolFile.exists()) {
FileUtils.writeStringToFile(protocolFile, StringUtils.substringAfterFirst(protocolTemplate, "package protocol"), true);
} else {
FileUtils.writeStringToFile(protocolFile, protocolTemplate, true);
}
} }
private static String fieldDefinition(ProtocolRegistration registration) { private static String fieldDefinition(ProtocolRegistration registration) {
@@ -124,9 +124,9 @@ public abstract class GenerateLuaUtils {
, valueOfMethod.getKey().trim(), valueOfMethod.getValue().trim(), protocolClazzName, protocolId , valueOfMethod.getKey().trim(), valueOfMethod.getValue().trim(), protocolClazzName, protocolId
, protocolClazzName, writePacket.trim(), protocolClazzName, protocolClazzName, readPacket.trim(), protocolClazzName); , protocolClazzName, writePacket.trim(), protocolClazzName, protocolClazzName, readPacket.trim(), protocolClazzName);
var protocolOutputPath = StringUtils.format("{}/{}/{}.lua" var outputPath = StringUtils.format("{}/{}/{}.lua"
, protocolOutputRootPath, GenerateProtocolPath.getCapitalizeProtocolPath(protocolId), protocolClazzName); , protocolOutputRootPath, GenerateProtocolPath.getCapitalizeProtocolPath(protocolId), protocolClazzName);
FileUtils.writeStringToFile(new File(protocolOutputPath), protocolTemplate, true); FileUtils.writeStringToFile(new File(outputPath), protocolTemplate, true);
} }
private static Pair<String, String> valueOfMethod(ProtocolRegistration registration) { private static Pair<String, String> valueOfMethod(ProtocolRegistration registration) {
@@ -119,8 +119,8 @@ public abstract class GenerateProtobufUtils {
builder.append("}").append(LS); builder.append("}").append(LS);
var protocolOutputPath = StringUtils.format("{}/{}.proto", protocolOutputRootPath, protocolManagerName); var outputPath = StringUtils.format("{}/{}.proto", protocolOutputRootPath, protocolManagerName);
FileUtils.writeStringToFile(new File(protocolOutputPath), builder.toString(), true); FileUtils.writeStringToFile(new File(outputPath), builder.toString(), true);
} }
public static void createProtocols(List<IProtocolRegistration> allGenerateProtocols) { public static void createProtocols(List<IProtocolRegistration> allGenerateProtocols) {
@@ -168,8 +168,8 @@ public abstract class GenerateProtobufUtils {
} }
String protoName = StringUtils.substringAfterLast(protos.getKey(), StringUtils.PERIOD); String protoName = StringUtils.substringAfterLast(protos.getKey(), StringUtils.PERIOD);
var protocolOutputPath = StringUtils.format("{}/{}.proto", protocolOutputRootPath, protoName); var outputPath = StringUtils.format("{}/{}.proto", protocolOutputRootPath, protoName);
FileUtils.writeStringToFile(new File(protocolOutputPath), builder.toString(), true); FileUtils.writeStringToFile(new File(outputPath), builder.toString(), true);
} }
} }
@@ -1,23 +0,0 @@
package protocol
{}
type {} struct {
{}
}
func (protocol {}) ProtocolId() int16 {
return {}
}
func (protocol {}) write(buffer *ByteBuffer, packet any) {
if buffer.WritePacketFlag(packet) {
return
}
}
func (protocol {}) read(buffer *ByteBuffer) any {
var packet = new({})
if !buffer.ReadBool() {
return packet
}
return packet
}
@@ -34,18 +34,7 @@ public class GenerateTesting {
var generateLanguages = op.getGenerateLanguages(); var generateLanguages = op.getGenerateLanguages();
// generate the jsProtocol folder and its corresponding js protocol file in the current protocol directory // generate the jsProtocol folder and its corresponding js protocol file in the current protocol directory
generateLanguages.add(CodeLanguage.Cpp);
generateLanguages.add(CodeLanguage.Go); generateLanguages.add(CodeLanguage.Go);
generateLanguages.add(CodeLanguage.JavaScript);
generateLanguages.add(CodeLanguage.TypeScript);
generateLanguages.add(CodeLanguage.Lua);
generateLanguages.add(CodeLanguage.CSharp);
generateLanguages.add(CodeLanguage.GdScript);
generateLanguages.add(CodeLanguage.Python);
// Protobuf needs to specify protobuf.xml to generate a protocol
op.setProtocolParam("protobuf=protobuf.xml");
generateLanguages.add(CodeLanguage.Protobuf);
// Initialize and then generate the protocol // Initialize and then generate the protocol
ProtocolManager.initProtocolAuto(Set.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), op); ProtocolManager.initProtocolAuto(Set.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), op);