mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-06-09 02:15:21 +00:00
feat[protocol]: kotlin support
This commit is contained in:
+57
-42
@@ -52,12 +52,12 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
// custom configuration
|
||||
public static String protocolOutputRootPath = "zfookt";
|
||||
private static String protocolOutputPath = StringUtils.EMPTY;
|
||||
public static String protocolPackage = "com.zfoo.java";
|
||||
public static String protocolPackage = "com.zfoo.kotlin";
|
||||
|
||||
private static final Map<ISerializer, IKtSerializer> kotlinSerializerMap = new HashMap<>();
|
||||
private static final Map<ISerializer, IKtSerializer> ktSerializerMap = new HashMap<>();
|
||||
|
||||
public static IKtSerializer kotlinSerializer(ISerializer serializer) {
|
||||
return kotlinSerializerMap.get(serializer);
|
||||
public static IKtSerializer ktSerializer(ISerializer serializer) {
|
||||
return ktSerializerMap.get(serializer);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -65,40 +65,42 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
protocolOutputPath = FileUtils.joinPath(generateOperation.getProtocolPath(), protocolOutputRootPath);
|
||||
FileUtils.deleteFile(new File(protocolOutputPath));
|
||||
|
||||
kotlinSerializerMap.put(BooleanSerializer.INSTANCE, new KtBooleanSerializer());
|
||||
kotlinSerializerMap.put(ByteSerializer.INSTANCE, new KtByteSerializer());
|
||||
kotlinSerializerMap.put(ShortSerializer.INSTANCE, new KtShortSerializer());
|
||||
kotlinSerializerMap.put(IntSerializer.INSTANCE, new KtIntSerializer());
|
||||
kotlinSerializerMap.put(LongSerializer.INSTANCE, new KtLongSerializer());
|
||||
kotlinSerializerMap.put(FloatSerializer.INSTANCE, new KtFloatSerializer());
|
||||
kotlinSerializerMap.put(DoubleSerializer.INSTANCE, new KtDoubleSerializer());
|
||||
kotlinSerializerMap.put(StringSerializer.INSTANCE, new KtStringSerializer());
|
||||
kotlinSerializerMap.put(ArraySerializer.INSTANCE, new KtArraySerializer());
|
||||
kotlinSerializerMap.put(ListSerializer.INSTANCE, new KtListSerializer());
|
||||
kotlinSerializerMap.put(SetSerializer.INSTANCE, new KtSetSerializer());
|
||||
kotlinSerializerMap.put(MapSerializer.INSTANCE, new KtMapSerializer());
|
||||
kotlinSerializerMap.put(ObjectProtocolSerializer.INSTANCE, new KtObjectProtocolSerializer());
|
||||
ktSerializerMap.put(BooleanSerializer.INSTANCE, new KtBooleanSerializer());
|
||||
ktSerializerMap.put(ByteSerializer.INSTANCE, new KtByteSerializer());
|
||||
ktSerializerMap.put(ShortSerializer.INSTANCE, new KtShortSerializer());
|
||||
ktSerializerMap.put(IntSerializer.INSTANCE, new KtIntSerializer());
|
||||
ktSerializerMap.put(LongSerializer.INSTANCE, new KtLongSerializer());
|
||||
ktSerializerMap.put(FloatSerializer.INSTANCE, new KtFloatSerializer());
|
||||
ktSerializerMap.put(DoubleSerializer.INSTANCE, new KtDoubleSerializer());
|
||||
ktSerializerMap.put(StringSerializer.INSTANCE, new KtStringSerializer());
|
||||
ktSerializerMap.put(ArraySerializer.INSTANCE, new KtArraySerializer());
|
||||
ktSerializerMap.put(ListSerializer.INSTANCE, new KtListSerializer());
|
||||
ktSerializerMap.put(SetSerializer.INSTANCE, new KtSetSerializer());
|
||||
ktSerializerMap.put(MapSerializer.INSTANCE, new KtMapSerializer());
|
||||
ktSerializerMap.put(ObjectProtocolSerializer.INSTANCE, new KtObjectProtocolSerializer());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mergerProtocol(List<ProtocolRegistration> registrations) throws IOException {
|
||||
createTemplateFile();
|
||||
var protocol_root_path = StringUtils.format("package {};", protocolPackage);
|
||||
var protocol_root_path = StringUtils.format("package {}", protocolPackage);
|
||||
|
||||
var protocolManagerTemplate = ClassUtils.getFileFromClassPathToString("java/ProtocolManagerTemplate.java");
|
||||
var protocolManagerTemplate = ClassUtils.getFileFromClassPathToString("kotlin/ProtocolManagerTemplate.kt");
|
||||
var protocol_manager_registrations = new StringBuilder();
|
||||
var protocol_imports = new StringBuilder();
|
||||
protocol_imports.append(StringUtils.format("import {}.*", protocolPackage)).append(LS);
|
||||
for (var registration : registrations) {
|
||||
var protocol_id = registration.protocolId();
|
||||
var protocol_name = registration.protocolConstructor().getDeclaringClass().getSimpleName();
|
||||
protocol_manager_registrations.append(StringUtils.format("protocols[{}] = Protocols.registration{};", protocol_id, protocol_name)).append(LS);
|
||||
protocol_manager_registrations.append(StringUtils.format("protocolIdMap.put(Protocols.{}.class, (short){});", protocol_name, protocol_id)).append(LS);
|
||||
protocol_manager_registrations.append(StringUtils.format("protocols[{}] = registration{}", protocol_id, protocol_name)).append(LS);
|
||||
protocol_manager_registrations.append(StringUtils.format("protocolIdMap.put({}::class.java, {})", protocol_name, protocol_id)).append(LS);
|
||||
}
|
||||
|
||||
var placeholderMap = Map.of(CodeTemplatePlaceholder.protocol_root_path, protocol_root_path
|
||||
, CodeTemplatePlaceholder.protocol_imports, StringUtils.EMPTY
|
||||
, CodeTemplatePlaceholder.protocol_imports, protocol_imports.toString()
|
||||
, CodeTemplatePlaceholder.protocol_manager_registrations, protocol_manager_registrations.toString());
|
||||
var formatProtocolManagerTemplate = CodeTemplatePlaceholder.formatTemplate(protocolManagerTemplate, placeholderMap);
|
||||
var protocolManagerFile = new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolManager.java"));
|
||||
var protocolManagerFile = new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolManager.kt"));
|
||||
FileUtils.writeStringToFile(protocolManagerFile, formatProtocolManagerTemplate, true);
|
||||
logger.info("Generated Kotlin protocol manager file:[{}] is in path:[{}]", protocolManagerFile.getName(), protocolManagerFile.getAbsolutePath());
|
||||
|
||||
@@ -109,16 +111,16 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
// protocol
|
||||
protocol_class.append(protocol_class(registration)).append(LS);
|
||||
// registration
|
||||
protocol_registration.append(protocol_registration(registration)).append(LS);
|
||||
protocol_registration.append(protocol_registration_merger(registration)).append(LS);
|
||||
}
|
||||
var protocolTemplate = ClassUtils.getFileFromClassPathToString("java/ProtocolsTemplate.java");
|
||||
var protocolTemplate = ClassUtils.getFileFromClassPathToString("kotlin/ProtocolsTemplate.kt");
|
||||
var formatProtocolTemplate = CodeTemplatePlaceholder.formatTemplate(protocolTemplate, Map.of(
|
||||
CodeTemplatePlaceholder.protocol_root_path, protocol_root_path
|
||||
, CodeTemplatePlaceholder.protocol_imports, StringUtils.EMPTY
|
||||
, CodeTemplatePlaceholder.protocol_class, protocol_class.toString().replace("public class", "public static class")
|
||||
, CodeTemplatePlaceholder.protocol_class, protocol_class.toString()
|
||||
, CodeTemplatePlaceholder.protocol_registration, protocol_registration.toString()
|
||||
));
|
||||
var outputPath = StringUtils.format("{}/Protocols.java", protocolOutputPath);
|
||||
var outputPath = StringUtils.format("{}/Protocols.kt", protocolOutputPath);
|
||||
var file = new File(outputPath);
|
||||
FileUtils.writeStringToFile(file, formatProtocolTemplate, true);
|
||||
logger.info("Generated Kotlin protocol file:[{}] is in path:[{}]", file.getName(), file.getAbsolutePath());
|
||||
@@ -128,30 +130,30 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
public void foldProtocol(List<ProtocolRegistration> registrations) throws IOException {
|
||||
createTemplateFile();
|
||||
|
||||
var protocolManagerTemplate = ClassUtils.getFileFromClassPathToString("java/ProtocolManagerTemplate.java");
|
||||
var protocolManagerTemplate = ClassUtils.getFileFromClassPathToString("kotlin/ProtocolManagerTemplate.kt");
|
||||
var protocol_manager_registrations = new StringBuilder();
|
||||
var protocol_imports = new StringBuilder();
|
||||
for (var registration : registrations) {
|
||||
var protocol_id = registration.protocolId();
|
||||
var protocol_name = registration.protocolConstructor().getDeclaringClass().getSimpleName();
|
||||
protocol_imports.append(StringUtils.format("import {}.{}.{};", protocolPackage, GenerateProtocolPath.protocolPathPeriod(protocol_id), protocol_name)).append(LS);
|
||||
protocol_manager_registrations.append(StringUtils.format("protocols[{}] = {}.registration{};", protocol_id, protocol_name, protocol_name)).append(LS);
|
||||
protocol_manager_registrations.append(StringUtils.format("protocolIdMap.put({}.class, (short){});", protocol_name, protocol_id)).append(LS);
|
||||
protocol_imports.append(StringUtils.format("import {}.{}.{}", protocolPackage, GenerateProtocolPath.protocolPathPeriod(protocol_id), protocol_name)).append(LS);
|
||||
protocol_manager_registrations.append(StringUtils.format("protocols[{}] = {}.registration{}", protocol_id, protocol_name, protocol_name)).append(LS);
|
||||
protocol_manager_registrations.append(StringUtils.format("protocolIdMap[{}::class.java] = {}.toShort()", protocol_name, protocol_id)).append(LS);
|
||||
}
|
||||
|
||||
var placeholderMap = Map.of(CodeTemplatePlaceholder.protocol_root_path, StringUtils.format("package {};", protocolPackage)
|
||||
var placeholderMap = Map.of(CodeTemplatePlaceholder.protocol_root_path, StringUtils.format("package {}", protocolPackage)
|
||||
, CodeTemplatePlaceholder.protocol_imports, protocol_imports.toString()
|
||||
, CodeTemplatePlaceholder.protocol_manager_registrations, protocol_manager_registrations.toString());
|
||||
var formatProtocolManagerTemplate = CodeTemplatePlaceholder.formatTemplate(protocolManagerTemplate, placeholderMap);
|
||||
var protocolManagerFile = new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolManager.java"));
|
||||
var protocolManagerFile = new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolManager.kt"));
|
||||
FileUtils.writeStringToFile(protocolManagerFile, formatProtocolManagerTemplate, true);
|
||||
logger.info("Generated Kotlin protocol manager file:[{}] is in path:[{}]", protocolManagerFile.getName(), protocolManagerFile.getAbsolutePath());
|
||||
|
||||
for (var registration : registrations) {
|
||||
var protocol_id = registration.protocolId();
|
||||
var protocol_name = registration.protocolConstructor().getDeclaringClass().getSimpleName();
|
||||
var protocolTemplate = ClassUtils.getFileFromClassPathToString("java/ProtocolTemplate.java");
|
||||
var protocol_root_path = StringUtils.format("package {}.{};", protocolPackage, GenerateProtocolPath.protocolPathPeriod(protocol_id));
|
||||
var protocolTemplate = ClassUtils.getFileFromClassPathToString("kotlin/ProtocolTemplate.kt");
|
||||
var protocol_root_path = StringUtils.format("package {}.{}", protocolPackage, GenerateProtocolPath.protocolPathPeriod(protocol_id));
|
||||
var formatProtocolTemplate = CodeTemplatePlaceholder.formatTemplate(protocolTemplate, Map.of(
|
||||
CodeTemplatePlaceholder.protocol_root_path, protocol_root_path
|
||||
, CodeTemplatePlaceholder.protocol_imports, protocol_imports_fold(registration)
|
||||
@@ -160,7 +162,7 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
, CodeTemplatePlaceholder.protocol_field_definition, protocol_field_definition(registration)
|
||||
, CodeTemplatePlaceholder.protocol_registration, protocol_registration(registration)
|
||||
));
|
||||
var outputPath = StringUtils.format("{}/{}/{}.java", protocolOutputPath, GenerateProtocolPath.protocolPathSlash(protocol_id), protocol_name);
|
||||
var outputPath = StringUtils.format("{}/{}/{}.kt", protocolOutputPath, GenerateProtocolPath.protocolPathSlash(protocol_id), protocol_name);
|
||||
var file = new File(outputPath);
|
||||
FileUtils.writeStringToFile(file, formatProtocolTemplate, true);
|
||||
logger.info("Generated Kotlin protocol file:[{}] is in path:[{}]", file.getName(), file.getAbsolutePath());
|
||||
@@ -251,6 +253,19 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
return formatProtocolTemplate;
|
||||
}
|
||||
|
||||
private String protocol_registration_merger(ProtocolRegistration registration) {
|
||||
var protocol_id = registration.protocolId();
|
||||
var protocol_name = registration.protocolConstructor().getDeclaringClass().getSimpleName();
|
||||
var protocolTemplate = ClassUtils.getFileFromClassPathToString("kotlin/ProtocolRegistrationMergerTemplate.kt");
|
||||
var formatProtocolTemplate = CodeTemplatePlaceholder.formatTemplate(protocolTemplate, Map.of(
|
||||
CodeTemplatePlaceholder.protocol_name, protocol_name
|
||||
, CodeTemplatePlaceholder.protocol_id, String.valueOf(protocol_id)
|
||||
, CodeTemplatePlaceholder.protocol_write_serialization, protocol_write_serialization(registration)
|
||||
, CodeTemplatePlaceholder.protocol_read_deserialization, protocol_read_deserialization(registration)
|
||||
));
|
||||
return formatProtocolTemplate;
|
||||
}
|
||||
|
||||
|
||||
private String protocol_imports_fold(ProtocolRegistration registration) {
|
||||
var protocolId = registration.getId();
|
||||
@@ -281,8 +296,8 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
for (var fieldNote : fieldNotes) {
|
||||
ktBuilder.append(fieldNote).append(LS);
|
||||
}
|
||||
var pair = kotlinSerializer(fieldRegistration.serializer()).field(field, fieldRegistration);
|
||||
ktBuilder.append(StringUtils.format("{}: {} = {}", fieldName, pair.getKey(), pair.getValue())).append(LS);
|
||||
var pair = ktSerializer(fieldRegistration.serializer()).field(field, fieldRegistration);
|
||||
ktBuilder.append(StringUtils.format("var {}: {} = {}", fieldName, pair.getKey(), pair.getValue())).append(LS);
|
||||
}
|
||||
return ktBuilder.toString();
|
||||
}
|
||||
@@ -302,7 +317,7 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
for (var i = 0; i < fields.length; i++) {
|
||||
var field = fields[i];
|
||||
var fieldRegistration = fieldRegistrations[i];
|
||||
kotlinSerializer(fieldRegistration.serializer()).writeObject(ktBuilder, "message." + field.getName(), 0, field, fieldRegistration);
|
||||
ktSerializer(fieldRegistration.serializer()).writeObject(ktBuilder, "message." + field.getName(), 0, field, fieldRegistration);
|
||||
}
|
||||
if (registration.isCompatible()) {
|
||||
ktBuilder.append(StringUtils.format("buffer.adjustPadding({}, beforeWriteIndex)", registration.getPredictionLength())).append(LS);
|
||||
@@ -322,12 +337,12 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
|
||||
if (field.isAnnotationPresent(Compatible.class)) {
|
||||
ktBuilder.append("if (buffer.compatibleRead(beforeReadIndex, length)) {").append(LS);
|
||||
var compatibleReadObject = kotlinSerializer(fieldRegistration.serializer()).readObject(ktBuilder, 1, field, fieldRegistration);
|
||||
var compatibleReadObject = ktSerializer(fieldRegistration.serializer()).readObject(ktBuilder, 1, field, fieldRegistration);
|
||||
ktBuilder.append(TAB).append(StringUtils.format("packet.{} = {}", field.getName(), compatibleReadObject)).append(LS);
|
||||
ktBuilder.append("}").append(LS);
|
||||
continue;
|
||||
}
|
||||
var readObject = kotlinSerializer(fieldRegistration.serializer()).readObject(ktBuilder, 0, field, fieldRegistration);
|
||||
var readObject = ktSerializer(fieldRegistration.serializer()).readObject(ktBuilder, 0, field, fieldRegistration);
|
||||
ktBuilder.append(StringUtils.format("packet.{} = {}", field.getName(), readObject)).append(LS);
|
||||
}
|
||||
return ktBuilder.toString();
|
||||
@@ -421,7 +436,7 @@ public class CodeGenerateKotlin implements ICodeGenerate {
|
||||
|
||||
typeName = typeName.replace("Map<", "Map<");
|
||||
typeName = typeName.replace("Set<", "Set<");
|
||||
typeName = typeName.replace("List<", "Array<");
|
||||
typeName = typeName.replace("List<", "List<");
|
||||
|
||||
return typeName;
|
||||
}
|
||||
|
||||
@@ -45,30 +45,21 @@ public class KtArraySerializer implements IKtSerializer {
|
||||
|
||||
ArrayField arrayField = (ArrayField) fieldRegistration;
|
||||
|
||||
builder.append(StringUtils.format("if (({} == null) || ({}.length == 0)) {", objectStr, objectStr)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("buffer.writeInt(0);").append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeInt({}.size)", objectStr)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
|
||||
builder.append("} else {").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("buffer.writeInt({}.length);", objectStr)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
String length = "length" + GenerateProtocolFile.localVariableId++;
|
||||
builder.append(StringUtils.format("int {} = {}.length;", length, objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = {}.size", length, objectStr)).append(LS);
|
||||
|
||||
String i = "i" + GenerateProtocolFile.localVariableId++;
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("for ({} in 0 until {}) {", i, length)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("for (int {} = 0; {} < {}; {}++) {", i, i, length, i)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 2);
|
||||
String element = "element" + GenerateProtocolFile.localVariableId++;
|
||||
builder.append(StringUtils.format("{} {} = {}[{}];", CodeGenerateKotlin.toKotlinClassName(arrayField.getType().getSimpleName()), element, objectStr, i)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = {}[{}]", element, objectStr, i)).append(LS);
|
||||
|
||||
CodeGenerateKotlin.kotlinSerializer(arrayField.getArrayElementRegistration().serializer())
|
||||
.writeObject(builder, element, deep + 2, field, arrayField.getArrayElementRegistration());
|
||||
CodeGenerateKotlin.ktSerializer(arrayField.getArrayElementRegistration().serializer())
|
||||
.writeObject(builder, element, deep + 1, field, arrayField.getArrayElementRegistration());
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("}").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append("}").append(LS);
|
||||
}
|
||||
@@ -88,21 +79,27 @@ public class KtArraySerializer implements IKtSerializer {
|
||||
var typeName = CodeGenerateKotlin.toKotlinClassName(arrayField.getType().getSimpleName());
|
||||
|
||||
var i = "index" + GenerateProtocolFile.localVariableId++;
|
||||
var init = "init" + GenerateProtocolFile.localVariableId++;
|
||||
var size = "size" + GenerateProtocolFile.localVariableId++;
|
||||
builder.append(StringUtils.format("int {} = buffer.readInt();", size)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readInt()", size)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("{}[] {} = new {}[{}];", typeName, result, typeName, size)).append(LS);
|
||||
var pair = CodeGenerateKotlin.ktSerializer(arrayField.getArrayElementRegistration().serializer()).field(field, arrayField.getArrayElementRegistration());
|
||||
var defaultValue = pair.getValue();
|
||||
if (defaultValue.equals("null")) {
|
||||
defaultValue = StringUtils.format("{}()", typeName);
|
||||
}
|
||||
builder.append(StringUtils.format("val {} = Array<{}>({}) { init -> {}}", result, typeName, size, defaultValue)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("if ({} > 0) {", size)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("for (int {} = 0; {} < {}; {}++) {", i, i, size, i)).append(LS);
|
||||
var readObject = CodeGenerateKotlin.kotlinSerializer(arrayField.getArrayElementRegistration().serializer())
|
||||
builder.append(StringUtils.format("for ({} in 0 until {}) {", i, size)).append(LS);
|
||||
var readObject = CodeGenerateKotlin.ktSerializer(arrayField.getArrayElementRegistration().serializer())
|
||||
.readObject(builder, deep + 2, field, arrayField.getArrayElementRegistration());
|
||||
GenerateProtocolFile.addTab(builder, deep + 2);
|
||||
builder.append(StringUtils.format("{}[{}] = {};", result, i, readObject));
|
||||
builder.append(StringUtils.format("{}[{}] = {}", result, i, readObject));
|
||||
builder.append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("}").append(LS);
|
||||
|
||||
@@ -35,7 +35,7 @@ public class KtBooleanSerializer implements IKtSerializer {
|
||||
@Override
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writeBool({});", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeBool({})", objectStr)).append(LS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +43,7 @@ public class KtBooleanSerializer implements IKtSerializer {
|
||||
String result = "result" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("boolean {} = buffer.readBool();", result)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readBool()", result)).append(LS);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ public class KtByteSerializer implements IKtSerializer {
|
||||
@Override
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writeByte({});", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeByte({})", objectStr)).append(LS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +43,7 @@ public class KtByteSerializer implements IKtSerializer {
|
||||
String result = "result" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("byte {} = buffer.readByte();", result)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readByte()", result)).append(LS);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,13 +29,13 @@ public class KtDoubleSerializer implements IKtSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> field(Field field, IFieldRegistration fieldRegistration) {
|
||||
return new Pair<>("Float", "0f");
|
||||
return new Pair<>("Double", "0.0");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writeDouble({});", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeDouble({})", objectStr)).append(LS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +43,7 @@ public class KtDoubleSerializer implements IKtSerializer {
|
||||
String result = "result" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("double {} = buffer.readDouble();", result)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readDouble()", result)).append(LS);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,13 +29,13 @@ public class KtFloatSerializer implements IKtSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> field(Field field, IFieldRegistration fieldRegistration) {
|
||||
return new Pair<>("Double", "0.0");
|
||||
return new Pair<>("Float", "0f");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writeFloat({});", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeFloat({})", objectStr)).append(LS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +43,7 @@ public class KtFloatSerializer implements IKtSerializer {
|
||||
String result = "result" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("float {} = buffer.readFloat();", result)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readFloat()", result)).append(LS);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public class KtIntSerializer implements IKtSerializer {
|
||||
@Override
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writeInt({});", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeInt({})", objectStr)).append(LS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +43,7 @@ public class KtIntSerializer implements IKtSerializer {
|
||||
String result = "result" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("int {} = buffer.readInt();", result)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readInt()", result)).append(LS);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,31 +44,16 @@ public class KtListSerializer implements IKtSerializer {
|
||||
}
|
||||
|
||||
ListField listField = (ListField) fieldRegistration;
|
||||
builder.append(StringUtils.format("if ({} == null) {", objectStr)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("buffer.writeInt(0);").append(LS);
|
||||
|
||||
builder.append(StringUtils.format("buffer.writeInt({}.size)", objectStr)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append("}").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append("else {").append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("buffer.writeInt({}.size());", objectStr)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
String length = "length" + GenerateProtocolFile.localVariableId++;
|
||||
builder.append(StringUtils.format("int {} = {}.size();", length, objectStr)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
String element = "element" + GenerateProtocolFile.localVariableId++;
|
||||
builder.append(StringUtils.format("for (var {} : {}) {", element, objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("for ({} in {}) {", element, objectStr)).append(LS);
|
||||
|
||||
CodeGenerateKotlin.kotlinSerializer(listField.getListElementRegistration().serializer())
|
||||
.writeObject(builder, element, deep + 2, field, listField.getListElementRegistration());
|
||||
CodeGenerateKotlin.ktSerializer(listField.getListElementRegistration().serializer())
|
||||
.writeObject(builder, element, deep + 1, field, listField.getListElementRegistration());
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("}").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append("}").append(LS);
|
||||
}
|
||||
@@ -89,19 +74,19 @@ public class KtListSerializer implements IKtSerializer {
|
||||
var i = "index" + GenerateProtocolFile.localVariableId++;
|
||||
var size = "size" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
builder.append(StringUtils.format("int {} = buffer.readInt();", size)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readInt()", size)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("var {} = new Array{}({});", result, typeName, size)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = Array{}({})", result, typeName, size)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("if ({} > 0) {", size)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("for (int {} = 0; {} < {}; {}++) {", i, i, size, i)).append(LS);
|
||||
var readObject = CodeGenerateKotlin.kotlinSerializer(listField.getListElementRegistration().serializer())
|
||||
builder.append(StringUtils.format("for ({} in 0 until {}) {", i, size)).append(LS);
|
||||
var readObject = CodeGenerateKotlin.ktSerializer(listField.getListElementRegistration().serializer())
|
||||
.readObject(builder, deep + 2, field, listField.getListElementRegistration());
|
||||
GenerateProtocolFile.addTab(builder, deep + 2);
|
||||
builder.append(StringUtils.format("{}.add({});", result, readObject)).append(LS);
|
||||
builder.append(StringUtils.format("{}.add({})", result, readObject)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("}").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
|
||||
@@ -35,7 +35,7 @@ public class KtLongSerializer implements IKtSerializer {
|
||||
@Override
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writeLong({});", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeLong({})", objectStr)).append(LS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +43,7 @@ public class KtLongSerializer implements IKtSerializer {
|
||||
String result = "result" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("long {} = buffer.readLong();", result)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readLong()", result)).append(LS);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -45,37 +45,18 @@ public class KtMapSerializer implements IKtSerializer {
|
||||
|
||||
MapField mapField = (MapField) fieldRegistration;
|
||||
|
||||
builder.append(StringUtils.format("if ({} == null) {", objectStr, objectStr)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("buffer.writeInt(0);").append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeInt({}.size)", objectStr)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append("} else {").append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("buffer.writeInt({}.size());", objectStr)).append(LS);
|
||||
|
||||
|
||||
String i = "i" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("for (var {} : {}.entrySet()) {", i, objectStr)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 2);
|
||||
String key = "keyElement" + GenerateProtocolFile.localVariableId++;
|
||||
String value = "valueElement" + GenerateProtocolFile.localVariableId++;
|
||||
builder.append(StringUtils.format("var {} = {}.getKey();", key, i)).append(LS);
|
||||
builder.append(StringUtils.format("for (({}, {}) in {}) {", key,value, objectStr)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 2);
|
||||
builder.append(StringUtils.format("var {} = {}.getValue();", value, i)).append(LS);
|
||||
CodeGenerateKotlin.ktSerializer(mapField.getMapKeyRegistration().serializer())
|
||||
.writeObject(builder, key, deep + 1, field, mapField.getMapKeyRegistration());
|
||||
CodeGenerateKotlin.ktSerializer(mapField.getMapValueRegistration().serializer())
|
||||
.writeObject(builder, value, deep + 1, field, mapField.getMapValueRegistration());
|
||||
|
||||
CodeGenerateKotlin.kotlinSerializer(mapField.getMapKeyRegistration().serializer())
|
||||
.writeObject(builder, key, deep + 2, field, mapField.getMapKeyRegistration());
|
||||
CodeGenerateKotlin.kotlinSerializer(mapField.getMapValueRegistration().serializer())
|
||||
.writeObject(builder, value, deep + 2, field, mapField.getMapValueRegistration());
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("}").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append("}").append(LS);
|
||||
}
|
||||
@@ -95,10 +76,10 @@ public class KtMapSerializer implements IKtSerializer {
|
||||
var typeName = CodeGenerateKotlin.toKotlinClassName(mapField.getType().toString());
|
||||
|
||||
String size = "size" + GenerateProtocolFile.localVariableId++;
|
||||
builder.append(StringUtils.format("int {} = buffer.readInt();", size)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readInt()", size)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("var {} = new Hash{}({});", result, typeName, size)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = Hash{}({})", result, typeName, size)).append(LS);
|
||||
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
@@ -106,17 +87,17 @@ public class KtMapSerializer implements IKtSerializer {
|
||||
|
||||
String i = "index" + GenerateProtocolFile.localVariableId++;
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("for (var {} = 0; {} < {}; {}++) {", i, i, size, i)).append(LS);
|
||||
builder.append(StringUtils.format("for ({} in 0 until {}) {", i, size)).append(LS);
|
||||
|
||||
String keyObject = CodeGenerateKotlin.kotlinSerializer(mapField.getMapKeyRegistration().serializer())
|
||||
String keyObject = CodeGenerateKotlin.ktSerializer(mapField.getMapKeyRegistration().serializer())
|
||||
.readObject(builder, deep + 2, field, mapField.getMapKeyRegistration());
|
||||
|
||||
|
||||
String valueObject = CodeGenerateKotlin.kotlinSerializer(mapField.getMapValueRegistration().serializer())
|
||||
String valueObject = CodeGenerateKotlin.ktSerializer(mapField.getMapValueRegistration().serializer())
|
||||
.readObject(builder, deep + 2, field, mapField.getMapValueRegistration());
|
||||
GenerateProtocolFile.addTab(builder, deep + 2);
|
||||
|
||||
builder.append(StringUtils.format("{}.put({}, {});", result, keyObject, valueObject)).append(LS);
|
||||
builder.append(StringUtils.format("{}.put({}, {})", result, keyObject, valueObject)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("}").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
|
||||
+2
-2
@@ -42,7 +42,7 @@ public class KtObjectProtocolSerializer implements IKtSerializer {
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
ObjectProtocolField objectProtocolField = (ObjectProtocolField) fieldRegistration;
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writePacket({}, (short){});", objectStr, objectProtocolField.getProtocolId()))
|
||||
builder.append(StringUtils.format("buffer.writePacket({}, {})", objectStr, objectProtocolField.getProtocolId()))
|
||||
.append(LS);
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ public class KtObjectProtocolSerializer implements IKtSerializer {
|
||||
var protocolSimpleName = EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(objectProtocolField.getProtocolId());
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("{} {} = ({}) buffer.readPacket((short) {});", protocolSimpleName, result, protocolSimpleName, objectProtocolField.getProtocolId()))
|
||||
builder.append(StringUtils.format("val {} = buffer.readPacket({}) as {}", result, objectProtocolField.getProtocolId(), protocolSimpleName))
|
||||
.append(LS);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -45,25 +45,15 @@ public class KtSetSerializer implements IKtSerializer {
|
||||
|
||||
SetField setField = (SetField) fieldRegistration;
|
||||
|
||||
builder.append(StringUtils.format("if ({} == null) {", objectStr)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("buffer.writeInt(0);").append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append("} else {").append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("buffer.writeInt({}.size());", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeInt({}.size)", objectStr)).append(LS);
|
||||
|
||||
String element = "i" + GenerateProtocolFile.localVariableId++;
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("for (var {} : {}) {", element, objectStr)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep );
|
||||
builder.append(StringUtils.format("for ({} in {}) {", element, objectStr)).append(LS);
|
||||
|
||||
CodeGenerateKotlin.kotlinSerializer(setField.getSetElementRegistration().serializer())
|
||||
.writeObject(builder, element, deep + 2, field, setField.getSetElementRegistration());
|
||||
CodeGenerateKotlin.ktSerializer(setField.getSetElementRegistration().serializer())
|
||||
.writeObject(builder, element, deep + 1, field, setField.getSetElementRegistration());
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("}").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append("}").append(LS);
|
||||
}
|
||||
@@ -83,22 +73,20 @@ public class KtSetSerializer implements IKtSerializer {
|
||||
|
||||
var i = "index" + GenerateProtocolFile.localVariableId++;
|
||||
var size = "size" + GenerateProtocolFile.localVariableId++;
|
||||
builder.append(StringUtils.format("int {} = buffer.readInt();", size)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readInt()", size)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
// unity里不支持HashSet的初始化大小
|
||||
// builder.append("var " + result + " = new " + typeName + "(" + size + ");" + LS);
|
||||
builder.append(StringUtils.format("var {} = new Hash{}();", result, typeName)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = Hash{}()", result, typeName)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("if ({} > 0) {", size)).append(LS);
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append(StringUtils.format("for (int {} = 0; {} < {}; {}++) {", i, i, size, i)).append(LS);
|
||||
builder.append(StringUtils.format("for ({} in 0 until {}) {", i, size)).append(LS);
|
||||
|
||||
var readObject = CodeGenerateKotlin.kotlinSerializer(setField.getSetElementRegistration().serializer())
|
||||
var readObject = CodeGenerateKotlin.ktSerializer(setField.getSetElementRegistration().serializer())
|
||||
.readObject(builder, deep + 2, field, setField.getSetElementRegistration());
|
||||
GenerateProtocolFile.addTab(builder, deep + 2);
|
||||
builder.append(StringUtils.format("{}.add({});", result, readObject)).append(LS);
|
||||
builder.append(StringUtils.format("{}.add({})", result, readObject)).append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep + 1);
|
||||
builder.append("}").append(LS);
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
|
||||
@@ -35,7 +35,7 @@ public class KtShortSerializer implements IKtSerializer {
|
||||
@Override
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writeShort({});", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeShort({})", objectStr)).append(LS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +43,7 @@ public class KtShortSerializer implements IKtSerializer {
|
||||
String result = "result" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("short {} = buffer.readShort();", result)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readShort()", result)).append(LS);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public class KtStringSerializer implements IKtSerializer {
|
||||
@Override
|
||||
public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) {
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("buffer.writeString({});", objectStr)).append(LS);
|
||||
builder.append(StringUtils.format("buffer.writeString({})", objectStr)).append(LS);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -43,7 +43,7 @@ public class KtStringSerializer implements IKtSerializer {
|
||||
String result = "result" + GenerateProtocolFile.localVariableId++;
|
||||
|
||||
GenerateProtocolFile.addTab(builder, deep);
|
||||
builder.append(StringUtils.format("String {} = buffer.readString();", result)).append(LS);
|
||||
builder.append(StringUtils.format("val {} = buffer.readString()", result)).append(LS);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -3,5 +3,5 @@ ${protocol_root_path}
|
||||
interface IProtocolRegistration {
|
||||
fun protocolId(): Short
|
||||
fun write(buffer: ByteBuffer, packet: Any?)
|
||||
fun read(buffer: ByteBuffer): Any?
|
||||
fun read(buffer: ByteBuffer): Any
|
||||
}
|
||||
@@ -1,32 +1,39 @@
|
||||
${protocol_root_path}
|
||||
${protocol_imports}
|
||||
class ProtocolManager {
|
||||
val protocols = arrayOfNulls<IProtocolRegistration>(Short.MAX_VALUE.toInt())
|
||||
var protocolIdMap: MutableMap<Class<*>, Short> = HashMap()
|
||||
fun initProtocol() {
|
||||
// initProtocol
|
||||
${protocol_manager_registrations}
|
||||
}
|
||||
companion object {
|
||||
val protocols = arrayOfNulls<IProtocolRegistration>(Short.MAX_VALUE.toInt())
|
||||
var protocolIdMap: MutableMap<Class<*>, Short> = HashMap()
|
||||
@JvmStatic
|
||||
fun initProtocol() {
|
||||
// initProtocol
|
||||
${protocol_manager_registrations}
|
||||
}
|
||||
|
||||
fun getProtocolId(clazz: Class<*>): Short {
|
||||
return protocolIdMap[clazz]!!
|
||||
}
|
||||
@JvmStatic
|
||||
fun getProtocolId(clazz: Class<*>): Short {
|
||||
return protocolIdMap[clazz]!!
|
||||
}
|
||||
|
||||
fun getProtocol(protocolId: Short): IProtocolRegistration {
|
||||
return protocols[protocolId.toInt()]
|
||||
?: throw RuntimeException("[protocolId:$protocolId] not exist")
|
||||
}
|
||||
@JvmStatic
|
||||
fun getProtocol(protocolId: Short): IProtocolRegistration {
|
||||
return protocols[protocolId.toInt()]
|
||||
?: throw RuntimeException("[protocolId:$protocolId] not exist")
|
||||
}
|
||||
|
||||
fun write(buffer: ByteBuffer, packet: Any) {
|
||||
val protocolId = getProtocolId(packet.javaClass)
|
||||
// write protocol id to buffer
|
||||
buffer.writeShort(protocolId)
|
||||
// write packet
|
||||
getProtocol(protocolId).write(buffer, packet)
|
||||
}
|
||||
@JvmStatic
|
||||
fun write(buffer: ByteBuffer, packet: Any) {
|
||||
val protocolId = getProtocolId(packet.javaClass)
|
||||
// write protocol id to buffer
|
||||
buffer.writeShort(protocolId)
|
||||
// write packet
|
||||
getProtocol(protocolId).write(buffer, packet)
|
||||
}
|
||||
|
||||
fun read(buffer: ByteBuffer): Any? {
|
||||
val protocolId = buffer.readShort()
|
||||
return getProtocol(protocolId).read(buffer)
|
||||
@JvmStatic
|
||||
fun read(buffer: ByteBuffer): Any? {
|
||||
val protocolId = buffer.readShort()
|
||||
return getProtocol(protocolId).read(buffer)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
@JvmField
|
||||
val registration${protocol_name}: IProtocolRegistration = object : IProtocolRegistration {
|
||||
override fun protocolId(): Short {
|
||||
return ${protocol_id}
|
||||
}
|
||||
|
||||
override fun write(buffer: ByteBuffer, packet: Any?) {
|
||||
if (packet == null) {
|
||||
buffer.writeInt(0)
|
||||
return
|
||||
}
|
||||
val message = packet as ${protocol_name}
|
||||
${protocol_write_serialization}
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteBuffer): Any {
|
||||
val length = buffer.readInt()
|
||||
val packet = ${protocol_name}()
|
||||
if (length == 0) {
|
||||
return packet
|
||||
}
|
||||
val beforeReadIndex = buffer.readOffset()
|
||||
${protocol_read_deserialization}
|
||||
if (length > 0) {
|
||||
buffer.setReadOffset(beforeReadIndex + length)
|
||||
}
|
||||
return packet
|
||||
}
|
||||
}
|
||||
@@ -14,13 +14,13 @@ companion object {
|
||||
${protocol_write_serialization}
|
||||
}
|
||||
|
||||
override fun read(buffer: ByteBuffer): Any? {
|
||||
override fun read(buffer: ByteBuffer): Any {
|
||||
val length = buffer.readInt()
|
||||
val packet = ${protocol_name}()
|
||||
if (length == 0) {
|
||||
return null
|
||||
return packet
|
||||
}
|
||||
val beforeReadIndex = buffer.readOffset()
|
||||
val packet = ${protocol_name}()
|
||||
${protocol_read_deserialization}
|
||||
if (length > 0) {
|
||||
buffer.setReadOffset(beforeReadIndex + length)
|
||||
|
||||
@@ -1,10 +1,8 @@
|
||||
${protocol_root_path}
|
||||
${protocol_imports}
|
||||
import java.util.*;
|
||||
public class Protocols {
|
||||
${protocol_class}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
${protocol_class}
|
||||
|
||||
${protocol_registration}
|
||||
}
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
${protocol_registration}
|
||||
|
||||
@@ -15,9 +15,12 @@ package com.zfoo.protocol.generate;
|
||||
import com.zfoo.protocol.ProtocolManager;
|
||||
import com.zfoo.protocol.packet.*;
|
||||
import com.zfoo.protocol.serializer.CodeLanguage;
|
||||
import com.zfoo.protocol.util.FileUtils;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -27,7 +30,7 @@ import java.util.List;
|
||||
public class GenerateTesting {
|
||||
|
||||
@Test
|
||||
public void generateAllProtocols() {
|
||||
public void generateAllProtocols() throws IOException {
|
||||
var op = GenerateOperation.NO_OPERATION;
|
||||
op.setFoldProtocol(true);
|
||||
|
||||
@@ -35,6 +38,8 @@ public class GenerateTesting {
|
||||
|
||||
// generate the jsProtocol folder and its corresponding js protocol file in the current protocol directory
|
||||
generateLanguages.add(CodeLanguage.Cpp);
|
||||
generateLanguages.add(CodeLanguage.Java);
|
||||
generateLanguages.add(CodeLanguage.Kotlin);
|
||||
generateLanguages.add(CodeLanguage.Golang);
|
||||
generateLanguages.add(CodeLanguage.JavaScript);
|
||||
generateLanguages.add(CodeLanguage.EcmaScript);
|
||||
@@ -46,6 +51,14 @@ public class GenerateTesting {
|
||||
|
||||
// Initialize and then generate the protocol
|
||||
ProtocolManager.initProtocolAuto(List.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), op);
|
||||
copyFiles();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void copyFiles() throws IOException {
|
||||
var sourceDirectory = "C:\\github\\zfoo\\protocol\\zfookt";
|
||||
var targetDirectory = "C:\\github\\zfoo-kotlin-support\\src\\main\\kotlin\\com\\zfoo\\kotlin";
|
||||
FileUtils.copyDirectory(new File(sourceDirectory), new File(targetDirectory));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user