mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-10-19 16:16:19 +00:00
ref[csharp]: refactor generate csharp protocol
This commit is contained in:
1 parent
7595ce584d
commit
059ddee61e
1 file changed
+29
-27
+29
-27
@@ -40,6 +40,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static com.zfoo.protocol.util.FileUtils.LS;
|
import static com.zfoo.protocol.util.FileUtils.LS;
|
||||||
|
import static com.zfoo.protocol.util.StringUtils.TAB;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,27 +90,13 @@ public class CodeGenerateCsharp implements ICodeGenerate {
|
|||||||
var protocol_registration = new StringBuilder();
|
var protocol_registration = new StringBuilder();
|
||||||
for (var protocol_id : protocolIds) {
|
for (var protocol_id : protocolIds) {
|
||||||
GenerateProtocolFile.index.set(0);
|
GenerateProtocolFile.index.set(0);
|
||||||
var registration = (ProtocolRegistration) ProtocolManager.getProtocol(protocol_id);
|
|
||||||
var protocol_class_name = registration.protocolConstructor().getDeclaringClass().getSimpleName();
|
|
||||||
|
|
||||||
|
var registration = (ProtocolRegistration) ProtocolManager.getProtocol(protocol_id);
|
||||||
// protocol
|
// protocol
|
||||||
var protocolClassTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolClassTemplate.cs");
|
protocol_class.append(protocol_class(registration)).append(LS);
|
||||||
var placeholderMap = Map.of(
|
|
||||||
CodeTemplatePlaceholder.protocol_note, GenerateProtocolNote.protocol_note(protocol_id, CodeLanguage.CSharp)
|
|
||||||
, CodeTemplatePlaceholder.protocol_name, protocol_class_name
|
|
||||||
, CodeTemplatePlaceholder.protocol_id, String.valueOf(protocol_id)
|
|
||||||
, CodeTemplatePlaceholder.protocol_field_definition, protocol_field_definition(registration)
|
|
||||||
, CodeTemplatePlaceholder.protocol_write_serialization, protocol_write_serialization(registration)
|
|
||||||
, CodeTemplatePlaceholder.protocol_read_deserialization, protocol_read_deserialization(registration)
|
|
||||||
);
|
|
||||||
var formatProtocolClassTemplate = CodeTemplatePlaceholder.formatTemplate(protocolClassTemplate, placeholderMap);
|
|
||||||
protocol_class.append(formatProtocolClassTemplate).append(LS);
|
|
||||||
|
|
||||||
// registration
|
// registration
|
||||||
var protocolRegistrationTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolRegistrationTemplate.cs");
|
protocol_registration.append(protocol_registration(registration)).append(LS);
|
||||||
var formatProtocolRegistrationTemplate = CodeTemplatePlaceholder.formatTemplate(protocolRegistrationTemplate, placeholderMap);
|
|
||||||
protocol_registration.append(formatProtocolRegistrationTemplate);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var protocolTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolTemplate.cs");
|
var protocolTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolTemplate.cs");
|
||||||
@@ -178,12 +165,18 @@ public class CodeGenerateCsharp implements ICodeGenerate {
|
|||||||
private String formatProtocolTemplate(ProtocolRegistration registration) {
|
private String formatProtocolTemplate(ProtocolRegistration registration) {
|
||||||
GenerateProtocolFile.index.set(0);
|
GenerateProtocolFile.index.set(0);
|
||||||
|
|
||||||
|
var protocolTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolTemplate.cs");
|
||||||
|
return CodeTemplatePlaceholder.formatTemplate(protocolTemplate, Map.of(
|
||||||
|
CodeTemplatePlaceholder.protocol_class, protocol_class(registration)
|
||||||
|
, CodeTemplatePlaceholder.protocol_registration, protocol_registration(registration)
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String protocol_class(ProtocolRegistration registration) {
|
||||||
var protocol_id = registration.protocolId();
|
var protocol_id = registration.protocolId();
|
||||||
var protocol_class_name = registration.getConstructor().getDeclaringClass().getSimpleName();
|
var protocol_class_name = registration.getConstructor().getDeclaringClass().getSimpleName();
|
||||||
|
|
||||||
var protocolClassTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolClassTemplate.cs");
|
var protocolClassTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolClassTemplate.cs");
|
||||||
var protocolRegistrationTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolRegistrationTemplate.cs");
|
|
||||||
var protocolTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolTemplate.cs");
|
|
||||||
var placeholderMap = Map.of(
|
var placeholderMap = Map.of(
|
||||||
CodeTemplatePlaceholder.protocol_note, GenerateProtocolNote.protocol_note(protocol_id, CodeLanguage.CSharp)
|
CodeTemplatePlaceholder.protocol_note, GenerateProtocolNote.protocol_note(protocol_id, CodeLanguage.CSharp)
|
||||||
, CodeTemplatePlaceholder.protocol_name, protocol_class_name
|
, CodeTemplatePlaceholder.protocol_name, protocol_class_name
|
||||||
@@ -192,15 +185,24 @@ public class CodeGenerateCsharp implements ICodeGenerate {
|
|||||||
, CodeTemplatePlaceholder.protocol_write_serialization, protocol_write_serialization(registration)
|
, CodeTemplatePlaceholder.protocol_write_serialization, protocol_write_serialization(registration)
|
||||||
, CodeTemplatePlaceholder.protocol_read_deserialization, protocol_read_deserialization(registration)
|
, CodeTemplatePlaceholder.protocol_read_deserialization, protocol_read_deserialization(registration)
|
||||||
);
|
);
|
||||||
var formatProtocolClassTemplate = CodeTemplatePlaceholder.formatTemplate(protocolClassTemplate, placeholderMap);
|
return CodeTemplatePlaceholder.formatTemplate(protocolClassTemplate, placeholderMap);
|
||||||
var formatProtocolRegistrationTemplate = CodeTemplatePlaceholder.formatTemplate(protocolRegistrationTemplate, placeholderMap);
|
|
||||||
var formatProtocolTemplate = CodeTemplatePlaceholder.formatTemplate(protocolTemplate, Map.of(
|
|
||||||
CodeTemplatePlaceholder.protocol_class, formatProtocolClassTemplate
|
|
||||||
, CodeTemplatePlaceholder.protocol_registration, formatProtocolRegistrationTemplate
|
|
||||||
));
|
|
||||||
return formatProtocolTemplate;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String protocol_registration(ProtocolRegistration registration) {
|
||||||
|
var protocol_id = registration.protocolId();
|
||||||
|
var protocol_class_name = registration.getConstructor().getDeclaringClass().getSimpleName();
|
||||||
|
|
||||||
|
var protocolRegistrationTemplate = ClassUtils.getFileFromClassPathToString("csharp/ProtocolRegistrationTemplate.cs");
|
||||||
|
var placeholderMap = Map.of(
|
||||||
|
CodeTemplatePlaceholder.protocol_note, GenerateProtocolNote.protocol_note(protocol_id, CodeLanguage.CSharp)
|
||||||
|
, CodeTemplatePlaceholder.protocol_name, protocol_class_name
|
||||||
|
, CodeTemplatePlaceholder.protocol_id, String.valueOf(protocol_id)
|
||||||
|
, CodeTemplatePlaceholder.protocol_field_definition, protocol_field_definition(registration)
|
||||||
|
, CodeTemplatePlaceholder.protocol_write_serialization, protocol_write_serialization(registration)
|
||||||
|
, CodeTemplatePlaceholder.protocol_read_deserialization, protocol_read_deserialization(registration)
|
||||||
|
);
|
||||||
|
return CodeTemplatePlaceholder.formatTemplate(protocolRegistrationTemplate, placeholderMap);
|
||||||
|
}
|
||||||
|
|
||||||
private String protocol_manager_registrations(List<IProtocolRegistration> protocolList) {
|
private String protocol_manager_registrations(List<IProtocolRegistration> protocolList) {
|
||||||
var csBuilder = new StringBuilder();
|
var csBuilder = new StringBuilder();
|
||||||
@@ -270,7 +272,7 @@ public class CodeGenerateCsharp implements ICodeGenerate {
|
|||||||
if (field.isAnnotationPresent(Compatible.class)) {
|
if (field.isAnnotationPresent(Compatible.class)) {
|
||||||
csBuilder.append("if (buffer.CompatibleRead(beforeReadIndex, length)) {").append(LS);
|
csBuilder.append("if (buffer.CompatibleRead(beforeReadIndex, length)) {").append(LS);
|
||||||
var compatibleReadObject = csSerializer(fieldRegistration.serializer()).readObject(csBuilder, 1, field, fieldRegistration);
|
var compatibleReadObject = csSerializer(fieldRegistration.serializer()).readObject(csBuilder, 1, field, fieldRegistration);
|
||||||
csBuilder.append(StringUtils.format("packet.{} = {};", field.getName(), compatibleReadObject)).append(LS);
|
csBuilder.append(TAB).append(StringUtils.format("packet.{} = {};", field.getName(), compatibleReadObject)).append(LS);
|
||||||
csBuilder.append("}").append(LS);
|
csBuilder.append("}").append(LS);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user