From d1b6c2dcff7346eb4b8deb134a444ea250398d84 Mon Sep 17 00:00:00 2001 From: sun Date: Wed, 27 Sep 2023 16:11:51 +0800 Subject: [PATCH] perf[protocol]: typescript generate --- .../com/zfoo/protocol/buffer/ByteBufUtils.java | 2 +- .../zfoo/protocol/registration/EnhanceUtils.java | 16 ++++++++-------- .../registration/ProtocolRegistration.java | 4 ++-- .../serializer/typescript/GenerateTsUtils.java | 4 +++- .../resources/typescript/ProtocolTemplate.ts | 4 ++-- .../resources/typescript/buffer/ByteBuffer.ts | 4 ++++ 6 files changed, 20 insertions(+), 14 deletions(-) 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 c755aa55..e6800887 100644 --- a/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/buffer/ByteBufUtils.java @@ -67,7 +67,7 @@ public abstract class ByteBufUtils { } public static boolean compatibleRead(ByteBuf byteBuf, int beforeReadIndex, int length) { - return length == -1 || byteBuf.readerIndex() >= length + beforeReadIndex; + return length != -1 && byteBuf.readerIndex() < length + beforeReadIndex; } //---------------------------------boolean-------------------------------------- diff --git a/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java b/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java index 155ac6a1..ae0ca7f9 100644 --- a/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java @@ -232,7 +232,7 @@ public abstract class EnhanceUtils { // protocol backwards compatibility,协议向后兼容 if (field.isAnnotationPresent(Compatible.class)) { var defaultReadObject = enhanceSerializer(fieldRegistration.serializer()).defaultValue(builder, field, fieldRegistration); - builder.append(StringUtils.format("if (!{}.compatibleRead($1, beforeReadIndex, length)) {", byteBufUtils)); + builder.append(StringUtils.format("if ({}.compatibleRead($1, beforeReadIndex, length)) {", byteBufUtils)); var compatibleReadObject = enhanceSerializer(fieldRegistration.serializer()).readObject(builder, field, fieldRegistration); builder.append(StringUtils.format("{} = {};", defaultReadObject, compatibleReadObject)); builder.append("}"); @@ -254,19 +254,19 @@ public abstract class EnhanceUtils { // protocol backwards compatibility,协议向后兼容 if (field.isAnnotationPresent(Compatible.class)) { builder.append(StringUtils.format("if ({}.compatibleRead($1, beforeReadIndex, length)) {", byteBufUtils)); - var defaultReadObject = enhanceSerializer(fieldRegistration.serializer()).defaultValue(builder, field, fieldRegistration); - if (Modifier.isPublic(field.getModifiers())) { - builder.append(StringUtils.format("packet.{}={};", field.getName(), defaultReadObject)); - } else { - builder.append(StringUtils.format("packet.{}({});", FieldUtils.fieldToSetMethod(packetClazz, field), defaultReadObject)); - } - builder.append("} else {"); var compatibleReadObject = enhanceSerializer(fieldRegistration.serializer()).readObject(builder, field, fieldRegistration); if (Modifier.isPublic(field.getModifiers())) { builder.append(StringUtils.format("packet.{}={};", field.getName(), compatibleReadObject)); } else { builder.append(StringUtils.format("packet.{}({});", FieldUtils.fieldToSetMethod(packetClazz, field), compatibleReadObject)); } + builder.append("} else {"); + var defaultReadObject = enhanceSerializer(fieldRegistration.serializer()).defaultValue(builder, field, fieldRegistration); + if (Modifier.isPublic(field.getModifiers())) { + builder.append(StringUtils.format("packet.{}={};", field.getName(), defaultReadObject)); + } else { + builder.append(StringUtils.format("packet.{}({});", FieldUtils.fieldToSetMethod(packetClazz, field), defaultReadObject)); + } builder.append("}"); continue; } diff --git a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolRegistration.java b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolRegistration.java index db8c241f..d18df202 100644 --- a/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolRegistration.java +++ b/protocol/src/main/java/com/zfoo/protocol/registration/ProtocolRegistration.java @@ -122,7 +122,7 @@ public class ProtocolRegistration implements IProtocolRegistration { // 协议向后兼容 if (field.isAnnotationPresent(Compatible.class)) { - if (ByteBufUtils.compatibleRead(byteBuf, beforeReadIndex, length)) { + if (!ByteBufUtils.compatibleRead(byteBuf, beforeReadIndex, length)) { constructorParams[index] = packetFieldRegistration.defaultValue(); continue; } @@ -140,7 +140,7 @@ public class ProtocolRegistration implements IProtocolRegistration { ISerializer serializer = packetFieldRegistration.serializer(); // 协议向后兼容 if (field.isAnnotationPresent(Compatible.class)) { - if (ByteBufUtils.compatibleRead(byteBuf, beforeReadIndex, length)) { + if (!ByteBufUtils.compatibleRead(byteBuf, beforeReadIndex, length)) { ReflectionUtils.setField(field, object, packetFieldRegistration.defaultValue()); continue; } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/GenerateTsUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/GenerateTsUtils.java index 05568b75..cd9467dd 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/GenerateTsUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/GenerateTsUtils.java @@ -205,7 +205,9 @@ public abstract class GenerateTsUtils { var field = fields[i]; var fieldRegistration = fieldRegistrations[i]; if (field.isAnnotationPresent(Compatible.class)) { - tsBuilder.append(TAB + TAB).append("if (length !== -1 && buffer.getReadOffset() - readIndex < length) {").append(LS); + + tsBuilder.append(TAB + TAB).append("if (length !== -1 && buffer.getReadOffset() - beforeReadIndex < length) {").append(LS); + tsBuilder.append(TAB + TAB).append("if (buffer.compatibleRead(beforeReadIndex, length)) {").append(LS); var compatibleReadObject = tsSerializer(fieldRegistration.serializer()).readObject(tsBuilder, 3, field, fieldRegistration); tsBuilder.append(TAB + TAB+ TAB).append(StringUtils.format("packet.{} = {};", field.getName(), compatibleReadObject)).append(LS); tsBuilder.append(TAB + TAB).append("}").append(LS); diff --git a/protocol/src/main/resources/typescript/ProtocolTemplate.ts b/protocol/src/main/resources/typescript/ProtocolTemplate.ts index ec203414..7af23403 100644 --- a/protocol/src/main/resources/typescript/ProtocolTemplate.ts +++ b/protocol/src/main/resources/typescript/ProtocolTemplate.ts @@ -23,11 +23,11 @@ class {} { if (length === 0) { return null; } - const readIndex = buffer.getReadOffset(); + const beforeReadIndex = buffer.getReadOffset(); const packet = new {}(); {} if (length > 0) { - buffer.setReadOffset(readIndex + length); + buffer.setReadOffset(beforeReadIndex + length); } return packet; } diff --git a/protocol/src/main/resources/typescript/buffer/ByteBuffer.ts b/protocol/src/main/resources/typescript/buffer/ByteBuffer.ts index 85b47671..0628c635 100644 --- a/protocol/src/main/resources/typescript/buffer/ByteBuffer.ts +++ b/protocol/src/main/resources/typescript/buffer/ByteBuffer.ts @@ -75,6 +75,10 @@ class ByteBuffer { } } + compatibleRead(beforeReadIndex: number, length: number): boolean { + return length !== -1 && this.getReadOffset() < length + beforeReadIndex; + } + setWriteOffset(writeOffset: number): void { if (writeOffset > this.buffer.byteLength) { throw new Error('index out of bounds exception:readerIndex:' + this.readOffset +