From e70289b1e9842ec715578d4e2d5902e252313eb1 Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 3 Sep 2023 16:19:39 +0800 Subject: [PATCH] fix[cpp]: cpp serialization --- .../src/main/java/com/zfoo/protocol/ProtocolManager.java | 4 ++++ .../serializer/cpp/CppObjectProtocolSerializer.java | 3 ++- .../com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java | 6 +++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java b/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java index 3cd14eef..1e7063bb 100644 --- a/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java +++ b/protocol/src/main/java/com/zfoo/protocol/ProtocolManager.java @@ -113,6 +113,10 @@ public class ProtocolManager { return protocolIdMap == null ? protocolIdPrimitiveMap.getPrimitive(clazz.hashCode()) : protocolIdMap.get(clazz); } + public static boolean isProtocolClass(Class clazz) { + return protocolIdMap == null ? protocolIdPrimitiveMap.containsKey(clazz.hashCode()) : protocolIdMap.containsKey(clazz); + } + public static void initProtocol(Set> protocolClassSet) { ProtocolAnalysis.analyze(protocolClassSet, GenerateOperation.NO_OPERATION); } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/CppObjectProtocolSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/CppObjectProtocolSerializer.java index 95fa2e3f..5e981bf7 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/CppObjectProtocolSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/CppObjectProtocolSerializer.java @@ -13,6 +13,7 @@ package com.zfoo.protocol.serializer.cpp; +import com.zfoo.protocol.ProtocolManager; import com.zfoo.protocol.generate.GenerateProtocolFile; import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; @@ -43,7 +44,7 @@ public class CppObjectProtocolSerializer implements ICppSerializer { public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { ObjectProtocolField objectProtocolField = (ObjectProtocolField) fieldRegistration; GenerateProtocolFile.addTab(builder, deep); - if (Object.class.isAssignableFrom(field.getType())) { + if (ProtocolManager.isProtocolClass(field.getType())) { builder.append(StringUtils.format("buffer.writePacket({}, {});", objectStr, objectProtocolField.getProtocolId())) .append(LS); } else { diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java index cba9f621..0da861e1 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/cpp/GenerateCppUtils.java @@ -13,6 +13,7 @@ package com.zfoo.protocol.serializer.cpp; +import com.zfoo.protocol.ProtocolManager; import com.zfoo.protocol.anno.Compatible; import com.zfoo.protocol.collection.CollectionUtils; import com.zfoo.protocol.generate.GenerateOperation; @@ -249,7 +250,7 @@ public abstract class GenerateCppUtils { var field = fields[i]; var fieldRegistration = fieldRegistrations[i]; var serializer = cppSerializer(fieldRegistration.serializer()); - if (Object.class.isAssignableFrom(field.getType())) { + if (ProtocolManager.isProtocolClass(field.getType())) { serializer.writeObject(cppBuilder, "&message->" + field.getName(), 3, field, fieldRegistration); } else { serializer.writeObject(cppBuilder, "message->" + field.getName(), 3, field, fieldRegistration); @@ -274,7 +275,7 @@ public abstract class GenerateCppUtils { var readObject = cppSerializer(fieldRegistration.serializer()).readObject(cppBuilder, 3, field, fieldRegistration); cppBuilder.append(TAB + TAB + TAB); - if (Object.class.isAssignableFrom(field.getType())) { + if (ProtocolManager.isProtocolClass(field.getType())) { cppBuilder.append(StringUtils.format("packet->{} = *{};", field.getName(), readObject)); } else { cppBuilder.append(StringUtils.format("packet->{} = {};", field.getName(), readObject)); @@ -285,7 +286,6 @@ public abstract class GenerateCppUtils { return cppBuilder.toString(); } - public static String toCppClassName(String typeName) { typeName = typeName.replaceAll("java.util.|java.lang.", StringUtils.EMPTY); typeName = typeName.replaceAll("[a-zA-Z0-9_.]*\\.", StringUtils.EMPTY);