From fdb37c5ad02e5819a8cd75a7ecfc68299f91bf9d Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 7 Jul 2024 13:30:26 +0800 Subject: [PATCH] ref[kotlin]: refactor kotlin protocol --- .../serializer/kotlin/CodeGenerateKotlin.java | 31 +++---------- .../ProtocolRegistrationMergerTemplate.kt | 29 ------------ .../kotlin/ProtocolRegistrationTemplate.kt | 45 +++++++++---------- .../main/resources/kotlin/ProtocolTemplate.kt | 8 ++-- 4 files changed, 31 insertions(+), 82 deletions(-) delete mode 100644 protocol/src/main/resources/kotlin/ProtocolRegistrationMergerTemplate.kt diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/kotlin/CodeGenerateKotlin.java b/protocol/src/main/java/com/zfoo/protocol/serializer/kotlin/CodeGenerateKotlin.java index 3af398a8..9ce874c9 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/kotlin/CodeGenerateKotlin.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/kotlin/CodeGenerateKotlin.java @@ -92,7 +92,7 @@ public class CodeGenerateKotlin implements ICodeGenerate { for (var registration : registrations) { var protocol_id = registration.protocolId(); var protocol_name = registration.protocolConstructor().getDeclaringClass().getSimpleName(); - protocol_manager_registrations.append(StringUtils.format("protocols[{}] = registration{}", protocol_id, protocol_name)).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); } @@ -111,7 +111,7 @@ public class CodeGenerateKotlin implements ICodeGenerate { // protocol protocol_class.append(protocol_class(registration)).append(LS); // registration - protocol_registration.append(protocol_registration_merger(registration)).append(LS); + protocol_registration.append(protocol_registration(registration)).append(LS); } var protocolTemplate = ClassUtils.getFileFromClassPathToString("kotlin/ProtocolsTemplate.kt"); var formatProtocolTemplate = CodeTemplatePlaceholder.formatTemplate(protocolTemplate, Map.of( @@ -137,7 +137,8 @@ public class CodeGenerateKotlin implements ICodeGenerate { 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_imports.append(StringUtils.format("import {}.{}.Registration{}", protocolPackage, GenerateProtocolPath.protocolPathPeriod(protocol_id), protocol_name)).append(LS); + protocol_manager_registrations.append(StringUtils.format("protocols[{}] = Registration{}()", protocol_id, protocol_name)).append(LS); protocol_manager_registrations.append(StringUtils.format("protocolIdMap[{}::class.java] = {}.toShort()", protocol_name, protocol_id)).append(LS); } @@ -157,9 +158,7 @@ public class CodeGenerateKotlin implements ICodeGenerate { var formatProtocolTemplate = CodeTemplatePlaceholder.formatTemplate(protocolTemplate, Map.of( CodeTemplatePlaceholder.protocol_root_path, protocol_root_path , CodeTemplatePlaceholder.protocol_imports, protocol_imports_fold(registration) - , CodeTemplatePlaceholder.protocol_note, GenerateProtocolNote.protocol_note(protocol_id, CodeLanguage.Kotlin) - , CodeTemplatePlaceholder.protocol_name, protocol_name - , CodeTemplatePlaceholder.protocol_field_definition, protocol_field_definition(registration) + , CodeTemplatePlaceholder.protocol_class, protocol_class(registration) , CodeTemplatePlaceholder.protocol_registration, protocol_registration(registration) )); var outputPath = StringUtils.format("{}/{}/{}.kt", protocolOutputPath, GenerateProtocolPath.protocolPathSlash(protocol_id), protocol_name); @@ -179,7 +178,7 @@ public class CodeGenerateKotlin implements ICodeGenerate { for (var registration : registrations) { var protocol_id = registration.protocolId(); var protocol_name = registration.protocolConstructor().getDeclaringClass().getSimpleName(); - protocol_manager_registrations.append(StringUtils.format("protocols[{}] = {}.registration{}", protocol_id, protocol_name, protocol_name)).append(LS); + protocol_manager_registrations.append(StringUtils.format("protocols[{}] = Registration{}()", protocol_id, protocol_name)).append(LS); protocol_manager_registrations.append(StringUtils.format("protocolIdMap[{}::class.java] = {}.toShort()", protocol_name, protocol_id)).append(LS); } @@ -198,9 +197,7 @@ public class CodeGenerateKotlin implements ICodeGenerate { var formatProtocolTemplate = CodeTemplatePlaceholder.formatTemplate(protocolTemplate, Map.of( CodeTemplatePlaceholder.protocol_root_path, protocol_root_path , CodeTemplatePlaceholder.protocol_imports, StringUtils.EMPTY - , CodeTemplatePlaceholder.protocol_note, GenerateProtocolNote.protocol_note(protocol_id, CodeLanguage.Kotlin) - , CodeTemplatePlaceholder.protocol_name, protocol_name - , CodeTemplatePlaceholder.protocol_field_definition, protocol_field_definition(registration) + , CodeTemplatePlaceholder.protocol_class, protocol_class(registration) , CodeTemplatePlaceholder.protocol_registration, protocol_registration(registration) )); var outputPath = StringUtils.format("{}/{}.kt", protocolOutputPath, protocol_name); @@ -253,20 +250,6 @@ 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(); var subProtocols = ProtocolAnalysis.getAllSubProtocolIds(protocolId); diff --git a/protocol/src/main/resources/kotlin/ProtocolRegistrationMergerTemplate.kt b/protocol/src/main/resources/kotlin/ProtocolRegistrationMergerTemplate.kt deleted file mode 100644 index 94b81d49..00000000 --- a/protocol/src/main/resources/kotlin/ProtocolRegistrationMergerTemplate.kt +++ /dev/null @@ -1,29 +0,0 @@ -@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 - } -} \ No newline at end of file diff --git a/protocol/src/main/resources/kotlin/ProtocolRegistrationTemplate.kt b/protocol/src/main/resources/kotlin/ProtocolRegistrationTemplate.kt index 76854182..5c8d1aa1 100644 --- a/protocol/src/main/resources/kotlin/ProtocolRegistrationTemplate.kt +++ b/protocol/src/main/resources/kotlin/ProtocolRegistrationTemplate.kt @@ -1,31 +1,28 @@ -companion object { - @JvmField - val registration${protocol_name}: IProtocolRegistration = object : IProtocolRegistration { - override fun protocolId(): Short { - return ${protocol_id} - } +class Registration${protocol_name} : 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 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) - } + 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 } } \ No newline at end of file diff --git a/protocol/src/main/resources/kotlin/ProtocolTemplate.kt b/protocol/src/main/resources/kotlin/ProtocolTemplate.kt index bf1efdcf..2c7f4b3f 100644 --- a/protocol/src/main/resources/kotlin/ProtocolTemplate.kt +++ b/protocol/src/main/resources/kotlin/ProtocolTemplate.kt @@ -1,8 +1,6 @@ ${protocol_root_path} ${protocol_imports} -${protocol_note} -class ${protocol_name} { - ${protocol_field_definition} - ${protocol_registration} -} \ No newline at end of file +${protocol_class} + +${protocol_registration} \ No newline at end of file