diff --git a/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java b/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java index 580d91ad..160b1b91 100644 --- a/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java @@ -1176,4 +1176,15 @@ public abstract class ByteBufUtils { return chars; } + public static void writePacketArray(ByteBuf byteBuf, T[] array, IProtocolRegistration protocolRegistration) { + if (array == null) { + byteBuf.writeByte(0); + return; + } + writeInt(byteBuf, array.length); + for (var value : array) { + protocolRegistration.write(byteBuf, value); + } + } + } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java index 5ebf84d1..cf455048 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/CutDownArraySerializer.java @@ -16,6 +16,7 @@ import com.zfoo.protocol.generate.GenerateProtocolFile; import com.zfoo.protocol.registration.EnhanceUtils; import com.zfoo.protocol.registration.field.ArrayField; import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.registration.field.ObjectProtocolField; import com.zfoo.protocol.util.StringUtils; import java.lang.reflect.Field; @@ -160,6 +161,14 @@ public class CutDownArraySerializer implements ICutDownSerializer { } break; default: + if (arrayField.getArrayElementRegistration() instanceof ObjectProtocolField) { + var objectProtocolField = (ObjectProtocolField) arrayField.getArrayElementRegistration(); + switch (language) { + case Enhance: + builder.append(StringUtils.format("{}.writePacketArray($1, {}, {});", EnhanceUtils.byteBufUtils, objectStr, EnhanceUtils.getProtocolRegistrationFieldNameByProtocolId(objectProtocolField.getProtocolId()))); + return true; + } + } } return false; @@ -293,6 +302,7 @@ public class CutDownArraySerializer implements ICutDownSerializer { } break; default: + // Java不支持泛型的数组初始化,这边就不做任何操作 } GenerateProtocolFile.index.getAndDecrement();