fix[enhance]: compatible filed enhance serialization error

This commit is contained in:
godotg committed 2023-09-03 11:40:41 +08:00
1 parent 62e6184cbd
commit 0f099de567
2 files changed
+12 -4

No files matched your search

@@ -219,12 +219,13 @@ public abstract class EnhanceUtils {
for (var i = 0; i < fields.length; i++) {
var field = fields[i];
var fieldRegistration = fieldRegistrations[i];
var readObject = enhanceSerializer(fieldRegistration.serializer()).readObject(builder, field, fieldRegistration);
// 协议向后兼容
// protocol backwards compatibility,协议向后兼容
if (field.isAnnotationPresent(Compatible.class)) {
builder.append("if(!$1.isReadable()){ return packet; }");
}
var readObject = enhanceSerializer(fieldRegistration.serializer()).readObject(builder, field, fieldRegistration);
if (Modifier.isPublic(field.getModifiers())) {
builder.append(StringUtils.format("packet.{}={};", field.getName(), readObject));
} else {
@@ -13,6 +13,8 @@
package com.zfoo.protocol.compatiblity;
import com.zfoo.protocol.ProtocolManager;
import com.zfoo.protocol.generate.GenerateOperation;
import com.zfoo.protocol.packet.*;
import com.zfoo.protocol.util.ClassUtils;
import com.zfoo.protocol.util.IOUtils;
import io.netty.buffer.ByteBufAllocator;
@@ -21,6 +23,7 @@ import org.junit.Ignore;
import org.junit.Test;
import java.io.IOException;
import java.util.Set;
import static com.zfoo.protocol.SpeedTest.complexObject;
import static com.zfoo.protocol.SpeedTest.normalObject;
@@ -31,12 +34,16 @@ import static com.zfoo.protocol.SpeedTest.normalObject;
public class CompatiblityTest {
/**
* 字节码增强的Map变量顺序会出现不一样,所以序列化的内容顺序会改变,关闭字节码增强就会发现序列化内容相同
* @throws IOException
* EN: The order of the bytecode-enhanced Map traversal order will be different, so the order of the serialized content will change.
* You can see that the different ones are not consecutive.
* <p>
* CN: 字节码增强的Map遍历顺序会出现不一样,所以序列化的内容顺序会改变,可以看到不相同的直接并不是连续的
*/
@Ignore
@Test
public void compatiblityTest() throws IOException {
ProtocolManager.initProtocolAuto(Set.of(ComplexObject.class, NormalObject.class, SimpleObject.class, EmptyObject.class, VeryBigObject.class), GenerateOperation.NO_OPERATION);
var bytes = IOUtils.toByteArray(ClassUtils.getFileFromClassPath("ComplexObject.bytes"));
var buffer = new UnpooledHeapByteBuf(ByteBufAllocator.DEFAULT, 100, 1_0000);
buffer.writeBytes(bytes);