fix[cpp]: cpp serialization

This commit is contained in:
godotg committed 2023-09-03 16:19:39 +08:00
1 parent cbc2f1e900
commit e70289b1e9
3 files changed
+9 -4

No files matched your search

@@ -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<Class<?>> protocolClassSet) {
ProtocolAnalysis.analyze(protocolClassSet, GenerateOperation.NO_OPERATION);
}
@@ -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 {
@@ -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);