diff --git a/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolPath.java b/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolPath.java index eb850ab0..aa289343 100644 --- a/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolPath.java +++ b/protocol/src/main/java/com/zfoo/protocol/generate/GenerateProtocolPath.java @@ -53,6 +53,28 @@ public abstract class GenerateProtocolPath { return protocolPath.replaceAll(StringUtils.PERIOD_REGEX, StringUtils.SLASH); } + public static String getRelativePath(short protocolId, short relativeProtocolId) { + var protocolPath = protocolPathMap.get(protocolId); + var relativePath = protocolPathMap.get(relativeProtocolId); + if (relativePath.startsWith(protocolPath)) { + return StringUtils.substringAfterFirst(relativePath, protocolPath).replaceAll(StringUtils.PERIOD_REGEX, StringUtils.SLASH); + } + + var splits = protocolPath.split(StringUtils.PERIOD_REGEX); + var builder = new StringBuilder(); + + for (var i = splits.length - 1; i > 0; i--) { + builder.append("../"); + var path = StringUtils.joinWith(StringUtils.PERIOD, Arrays.stream(splits).limit(i).collect(Collectors.toList()).toArray()); + if (relativePath.startsWith(path)) { + builder.append(StringUtils.substringAfterFirst(relativePath, path).replaceAll(StringUtils.PERIOD_REGEX, StringUtils.SLASH)); + return builder.toString(); + } + } + builder.append(relativePath.replaceAll(StringUtils.PERIOD_REGEX, StringUtils.SLASH)); + return builder.toString(); + } + /** * 获取协议生成的首字母大写的路径 */ diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/GenerateJsUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/GenerateJsUtils.java index 31da6be6..a6eccc29 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/GenerateJsUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/GenerateJsUtils.java @@ -48,7 +48,17 @@ public abstract class GenerateJsUtils { private static Map jsSerializerMap; - static { + + public static IJsSerializer jsSerializer(ISerializer serializer) { + return jsSerializerMap.get(serializer); + } + + public static void init(GenerateOperation generateOperation) { + protocolOutputRootPath = FileUtils.joinPath(generateOperation.getProtocolPath(), protocolOutputRootPath); + + FileUtils.deleteFile(new File(protocolOutputRootPath)); + FileUtils.createDirectory(protocolOutputRootPath); + jsSerializerMap = new HashMap<>(); jsSerializerMap.put(BooleanSerializer.INSTANCE, new JsBooleanSerializer()); jsSerializerMap.put(ByteSerializer.INSTANCE, new JsByteSerializer()); @@ -66,17 +76,6 @@ public abstract class GenerateJsUtils { jsSerializerMap.put(ObjectProtocolSerializer.INSTANCE, new JsObjectProtocolSerializer()); } - public static IJsSerializer jsSerializer(ISerializer serializer) { - return jsSerializerMap.get(serializer); - } - - public static void init(GenerateOperation generateOperation) { - protocolOutputRootPath = FileUtils.joinPath(generateOperation.getProtocolPath(), protocolOutputRootPath); - - FileUtils.deleteFile(new File(protocolOutputRootPath)); - FileUtils.createDirectory(protocolOutputRootPath); - } - public static void clear() { jsSerializerMap = null; protocolOutputRootPath = null; diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/IJsSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/IJsSerializer.java index ce40d08d..6c716f38 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/IJsSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/IJsSerializer.java @@ -13,7 +13,6 @@ package com.zfoo.protocol.serializer.javascript; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import java.lang.reflect.Field; @@ -24,11 +23,6 @@ import java.lang.reflect.Field; */ public interface IJsSerializer { - /** - * 获取属性的类型和名称 - */ - Pair field(Field field, IFieldRegistration fieldRegistration); - void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration); String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsArraySerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsArraySerializer.java index 2e1fbad1..16cc6c27 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsArraySerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsArraySerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.ArrayField; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.serializer.CodeLanguage; @@ -30,12 +29,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsArraySerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("Array", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsBooleanSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsBooleanSerializer.java index 76143e08..4d717169 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsBooleanSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsBooleanSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsBooleanSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("boolean", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsByteSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsByteSerializer.java index b0eb2a4b..64cc1f3e 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsByteSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsByteSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsByteSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("number", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsCharSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsCharSerializer.java index 9ffe0e8d..c4e292ad 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsCharSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsCharSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsCharSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("string", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsDoubleSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsDoubleSerializer.java index 495de91c..5ee36e2e 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsDoubleSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsDoubleSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsDoubleSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("number", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsFloatSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsFloatSerializer.java index db975e9e..f8e8e593 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsFloatSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsFloatSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsFloatSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("number", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsIntSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsIntSerializer.java index 73a40868..c89cccb0 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsIntSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsIntSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsIntSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("number", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsListSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsListSerializer.java index 7e92dd2a..53f26359 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsListSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsListSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.ListField; import com.zfoo.protocol.serializer.CodeLanguage; @@ -30,12 +29,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsListSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("Array", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsLongSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsLongSerializer.java index 13cb7583..c166fd89 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsLongSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsLongSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsLongSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("number", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsMapSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsMapSerializer.java index aa4b36b7..450bae37 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsMapSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsMapSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.MapField; import com.zfoo.protocol.serializer.CodeLanguage; @@ -30,12 +29,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsMapSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("Map", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsObjectProtocolSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsObjectProtocolSerializer.java index d21940db..5a697f87 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsObjectProtocolSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsObjectProtocolSerializer.java @@ -14,10 +14,8 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.ObjectProtocolField; -import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; import com.zfoo.protocol.util.StringUtils; import java.lang.reflect.Field; @@ -29,15 +27,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsObjectProtocolSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - ObjectProtocolField objectProtocolField = (ObjectProtocolField) fieldRegistration; - var protocolSimpleName = EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(objectProtocolField.getProtocolId()); - var type = StringUtils.format("{}", protocolSimpleName); - return new Pair<>(type, field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { ObjectProtocolField objectProtocolField = (ObjectProtocolField) fieldRegistration; diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsSetSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsSetSerializer.java index fe135e6a..b3c4912e 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsSetSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsSetSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.registration.field.SetField; import com.zfoo.protocol.serializer.CodeLanguage; @@ -30,12 +29,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsSetSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("Set", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsShortSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsShortSerializer.java index 096c5793..419e3831 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsShortSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsShortSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsShortSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("number", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsStringSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsStringSerializer.java index 46736b71..96c4f43f 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsStringSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/JsStringSerializer.java @@ -14,7 +14,6 @@ package com.zfoo.protocol.serializer.javascript; import com.zfoo.protocol.generate.GenerateProtocolFile; -import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.field.IFieldRegistration; import com.zfoo.protocol.util.StringUtils; @@ -27,12 +26,6 @@ import static com.zfoo.protocol.util.FileUtils.LS; * @version 3.0 */ public class JsStringSerializer implements IJsSerializer { - - @Override - public Pair field(Field field, IFieldRegistration fieldRegistration) { - return new Pair<>("string", field.getName()); - } - @Override public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { GenerateProtocolFile.addTab(builder, deep); 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 ce3f92db..f1730a7f 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 @@ -24,7 +24,6 @@ import com.zfoo.protocol.registration.ProtocolAnalysis; import com.zfoo.protocol.registration.ProtocolRegistration; import com.zfoo.protocol.registration.anno.Compatible; import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; -import com.zfoo.protocol.serializer.javascript.*; import com.zfoo.protocol.serializer.reflect.*; import com.zfoo.protocol.util.ClassUtils; import com.zfoo.protocol.util.FileUtils; @@ -47,11 +46,33 @@ public abstract class GenerateTsUtils { private static String protocolOutputRootPath = "tsProtocol/"; + private static Map tsSerializerMap; + + public static ITsSerializer tsSerializer(ISerializer serializer) { + return tsSerializerMap.get(serializer); + } + public static void init(GenerateOperation generateOperation) { protocolOutputRootPath = FileUtils.joinPath(generateOperation.getProtocolPath(), protocolOutputRootPath); FileUtils.deleteFile(new File(protocolOutputRootPath)); FileUtils.createDirectory(protocolOutputRootPath); + + tsSerializerMap = new HashMap<>(); + tsSerializerMap.put(BooleanSerializer.INSTANCE, new TsBooleanSerializer()); + tsSerializerMap.put(ByteSerializer.INSTANCE, new TsByteSerializer()); + tsSerializerMap.put(ShortSerializer.INSTANCE, new TsShortSerializer()); + tsSerializerMap.put(IntSerializer.INSTANCE, new TsIntSerializer()); + tsSerializerMap.put(LongSerializer.INSTANCE, new TsLongSerializer()); + tsSerializerMap.put(FloatSerializer.INSTANCE, new TsFloatSerializer()); + tsSerializerMap.put(DoubleSerializer.INSTANCE, new TsDoubleSerializer()); + tsSerializerMap.put(CharSerializer.INSTANCE, new TsCharSerializer()); + tsSerializerMap.put(StringSerializer.INSTANCE, new TsStringSerializer()); + tsSerializerMap.put(ArraySerializer.INSTANCE, new TsArraySerializer()); + tsSerializerMap.put(ListSerializer.INSTANCE, new TsListSerializer()); + tsSerializerMap.put(SetSerializer.INSTANCE, new TsSetSerializer()); + tsSerializerMap.put(MapSerializer.INSTANCE, new TsMapSerializer()); + tsSerializerMap.put(ObjectProtocolSerializer.INSTANCE, new TsObjectProtocolSerializer()); } public static void clear() { @@ -157,7 +178,7 @@ public abstract class GenerateTsUtils { Arrays.stream(doc.split(LS)).forEach(it -> fieldDefinitionBuilder.append(TAB).append(it).append(LS)); } - var propertyTypeAndName = GenerateJsUtils.jsSerializer(fieldRegistration.serializer()).field(field, fieldRegistration); + var propertyTypeAndName = tsSerializer(fieldRegistration.serializer()).field(field, fieldRegistration); fieldDefinitionBuilder.append(TAB).append(StringUtils.format("{}: {};", propertyTypeAndName.getValue(), propertyTypeAndName.getKey())).append(LS); } return fieldDefinitionBuilder.toString(); @@ -172,7 +193,7 @@ public abstract class GenerateTsUtils { for (int i = 0; i < fields.length; i++) { var field = fields[i]; var fieldRegistration = fieldRegistrations[i]; - var propertyTypeAndName = GenerateJsUtils.jsSerializer(fieldRegistration.serializer()).field(field, fieldRegistration); + var propertyTypeAndName = tsSerializer(fieldRegistration.serializer()).field(field, fieldRegistration); filedList.add(propertyTypeAndName); } @@ -193,7 +214,7 @@ public abstract class GenerateTsUtils { for (var i = 0; i < fields.length; i++) { var field = fields[i]; var fieldRegistration = fieldRegistrations[i]; - GenerateJsUtils.jsSerializer(fieldRegistration.serializer()).writeObject(jsBuilder, "packet." + field.getName(), 2, field, fieldRegistration); + tsSerializer(fieldRegistration.serializer()).writeObject(jsBuilder, "packet." + field.getName(), 2, field, fieldRegistration); } return jsBuilder.toString(); } @@ -210,7 +231,7 @@ public abstract class GenerateTsUtils { jsBuilder.append(TAB + TAB).append("return packet;").append(LS); jsBuilder.append(TAB).append("}").append(LS); } - var readObject = GenerateJsUtils.jsSerializer(fieldRegistration.serializer()).readObject(jsBuilder, 2, field, fieldRegistration); + var readObject = tsSerializer(fieldRegistration.serializer()).readObject(jsBuilder, 2, field, fieldRegistration); jsBuilder.append(TAB + TAB).append(StringUtils.format("packet.{} = {};", field.getName(), readObject)).append(LS); } return jsBuilder.toString(); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/ITsSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/ITsSerializer.java new file mode 100644 index 00000000..5f58c29c --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/ITsSerializer.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; + +import java.lang.reflect.Field; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public interface ITsSerializer { + + /** + * 获取属性的类型和名称 + */ + Pair field(Field field, IFieldRegistration fieldRegistration); + + void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration); + + String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration); + +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsArraySerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsArraySerializer.java new file mode 100644 index 00000000..5d11546d --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsArraySerializer.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.ArrayField; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.serializer.CodeLanguage; +import com.zfoo.protocol.serializer.CutDownArraySerializer; +import com.zfoo.protocol.serializer.javascript.GenerateJsUtils; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsArraySerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("Array", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + if (CutDownArraySerializer.getInstance().writeObject(builder, objectStr, field, fieldRegistration, CodeLanguage.JavaScript)) { + return; + } + + ArrayField arrayField = (ArrayField) fieldRegistration; + + builder.append(StringUtils.format("if ({} === null) {", objectStr)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("buffer.writeInt(0);").append(LS); + GenerateProtocolFile.addTab(builder, deep); + + builder.append("} else {").append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("buffer.writeInt({}.length);", objectStr)).append(LS); + + String element = "element" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("{}.forEach({} => {", objectStr, element)).append(LS); + GenerateJsUtils.jsSerializer(arrayField.getArrayElementRegistration().serializer()) + .writeObject(builder, element, deep + 2, field, arrayField.getArrayElementRegistration()); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("});").append(LS); + GenerateProtocolFile.addTab(builder, deep); + builder.append("}").append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + var cutDown = CutDownArraySerializer.getInstance().readObject(builder, field, fieldRegistration, CodeLanguage.JavaScript); + if (cutDown != null) { + return cutDown; + } + + ArrayField arrayField = (ArrayField) fieldRegistration; + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + + builder.append(StringUtils.format("const {} = [];", result)).append(LS); + + String i = "index" + GenerateProtocolFile.index.getAndIncrement(); + String size = "size" + GenerateProtocolFile.index.getAndIncrement(); + + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readInt();", size)).append(LS); + + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("if ({} > 0) {", size)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("for (let {} = 0; {} < {}; {}++) {", i, i, size, i)).append(LS); + String readObject = GenerateJsUtils.jsSerializer(arrayField.getArrayElementRegistration().serializer()) + .readObject(builder, deep + 2, field, arrayField.getArrayElementRegistration()); + GenerateProtocolFile.addTab(builder, deep + 2); + builder.append(StringUtils.format("{}.push({});", result, readObject)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("}").append(LS); + GenerateProtocolFile.addTab(builder, deep); + builder.append("}").append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsBooleanSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsBooleanSerializer.java new file mode 100644 index 00000000..a663b201 --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsBooleanSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsBooleanSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("boolean", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeBoolean({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readBoolean(); ", result)).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsByteSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsByteSerializer.java new file mode 100644 index 00000000..197b3d04 --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsByteSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsByteSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("number", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeByte({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readByte();", result)).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsCharSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsCharSerializer.java new file mode 100644 index 00000000..87d64bca --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsCharSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsCharSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("string", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeChar({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readChar();", result)).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsDoubleSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsDoubleSerializer.java new file mode 100644 index 00000000..2eff4ccf --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsDoubleSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsDoubleSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("number", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeDouble({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readDouble();", result)).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsFloatSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsFloatSerializer.java new file mode 100644 index 00000000..70d3c55a --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsFloatSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsFloatSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("number", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeFloat({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readFloat();", result)).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsIntSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsIntSerializer.java new file mode 100644 index 00000000..c098eef8 --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsIntSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsIntSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("number", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeInt({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readInt();", result)).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsListSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsListSerializer.java new file mode 100644 index 00000000..16f9c01a --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsListSerializer.java @@ -0,0 +1,102 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.registration.field.ListField; +import com.zfoo.protocol.serializer.CodeLanguage; +import com.zfoo.protocol.serializer.CutDownListSerializer; +import com.zfoo.protocol.serializer.javascript.GenerateJsUtils; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsListSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("Array", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + if (CutDownListSerializer.getInstance().writeObject(builder, objectStr, field, fieldRegistration, CodeLanguage.JavaScript)) { + return; + } + + ListField listField = (ListField) fieldRegistration; + + builder.append(StringUtils.format("if ({} === null) {", objectStr)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("buffer.writeInt(0);").append(LS); + GenerateProtocolFile.addTab(builder, deep); + + builder.append("} else {").append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("buffer.writeInt({}.length);", objectStr)).append(LS); + + String element = "element" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("{}.forEach({} => {", objectStr, element)).append(LS); + GenerateJsUtils.jsSerializer(listField.getListElementRegistration().serializer()) + .writeObject(builder, element, deep + 2, field, listField.getListElementRegistration()); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("});").append(LS); + GenerateProtocolFile.addTab(builder, deep); + builder.append("}").append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + var cutDown = CutDownListSerializer.getInstance().readObject(builder, field, fieldRegistration, CodeLanguage.JavaScript); + if (cutDown != null) { + return cutDown; + } + + ListField listField = (ListField) fieldRegistration; + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + + builder.append(StringUtils.format("const {} = [];", result)).append(LS); + + GenerateProtocolFile.addTab(builder, deep); + String size = "size" + GenerateProtocolFile.index.getAndIncrement(); + builder.append(StringUtils.format("const {} = buffer.readInt();", size)).append(LS); + + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("if ({} > 0) {", size)).append(LS); + + GenerateProtocolFile.addTab(builder, deep + 1); + String i = "index" + GenerateProtocolFile.index.getAndIncrement(); + builder.append(StringUtils.format("for (let {} = 0; {} < {}; {}++) {", i, i, size, i)).append(LS); + String readObject = GenerateJsUtils.jsSerializer(listField.getListElementRegistration().serializer()) + .readObject(builder, deep + 2, field, listField.getListElementRegistration()); + GenerateProtocolFile.addTab(builder, deep + 2); + builder.append(StringUtils.format("{}.push({});", result, readObject)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("}").append(LS); + GenerateProtocolFile.addTab(builder, deep); + builder.append("}").append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsLongSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsLongSerializer.java new file mode 100644 index 00000000..d7836d5f --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsLongSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsLongSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("number", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeLong({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readLong();", result)).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsMapSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsMapSerializer.java new file mode 100644 index 00000000..e0f02664 --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsMapSerializer.java @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.registration.field.MapField; +import com.zfoo.protocol.serializer.CodeLanguage; +import com.zfoo.protocol.serializer.CutDownMapSerializer; +import com.zfoo.protocol.serializer.javascript.GenerateJsUtils; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsMapSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("Map", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + if (CutDownMapSerializer.getInstance().writeObject(builder, objectStr, field, fieldRegistration, CodeLanguage.JavaScript)) { + return; + } + + MapField mapField = (MapField) fieldRegistration; + builder.append(StringUtils.format("if ({} === null) {", objectStr)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("buffer.writeInt(0);").append(LS); + + GenerateProtocolFile.addTab(builder, deep); + builder.append("} else {").append(LS); + + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("buffer.writeInt({}.size);", objectStr)).append(LS); + + String key = "key" + GenerateProtocolFile.index.getAndIncrement(); + String value = "value" + GenerateProtocolFile.index.getAndIncrement(); + + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("{}.forEach(({}, {}) => {", objectStr, value, key)).append(LS); + GenerateJsUtils.jsSerializer(mapField.getMapKeyRegistration().serializer()) + .writeObject(builder, key, deep + 2, field, mapField.getMapKeyRegistration()); + GenerateJsUtils.jsSerializer(mapField.getMapValueRegistration().serializer()) + .writeObject(builder, value, deep + 2, field, mapField.getMapValueRegistration()); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("});").append(LS); + GenerateProtocolFile.addTab(builder, deep); + builder.append("}").append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + var cutDown = CutDownMapSerializer.getInstance().readObject(builder, field, fieldRegistration, CodeLanguage.JavaScript); + if (cutDown != null) { + return cutDown; + } + + MapField mapField = (MapField) fieldRegistration; + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + + builder.append(StringUtils.format("const {} = new Map();", result)).append(LS); + + GenerateProtocolFile.addTab(builder, deep); + String size = "size" + GenerateProtocolFile.index.getAndIncrement(); + builder.append(StringUtils.format("const {} = buffer.readInt();", size)).append(LS); + + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("if ({} > 0) {", size)).append(LS); + + String i = "index" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("for (let {} = 0; {} < {}; {}++) {", i, i, size, i)).append(LS); + + String keyObject = GenerateJsUtils.jsSerializer(mapField.getMapKeyRegistration().serializer()) + .readObject(builder, deep + 2, field, mapField.getMapKeyRegistration()); + + + String valueObject = GenerateJsUtils.jsSerializer(mapField.getMapValueRegistration().serializer()) + .readObject(builder, deep + 2, field, mapField.getMapValueRegistration()); + GenerateProtocolFile.addTab(builder, deep + 2); + + builder.append(StringUtils.format("{}.set({}, {});", result, keyObject, valueObject)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("}").append(LS); + GenerateProtocolFile.addTab(builder, deep); + builder.append("}").append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsObjectProtocolSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsObjectProtocolSerializer.java new file mode 100644 index 00000000..a64c44cc --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsObjectProtocolSerializer.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.registration.field.ObjectProtocolField; +import com.zfoo.protocol.serializer.enhance.EnhanceObjectProtocolSerializer; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsObjectProtocolSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + ObjectProtocolField objectProtocolField = (ObjectProtocolField) fieldRegistration; + var protocolSimpleName = EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(objectProtocolField.getProtocolId()); + var type = StringUtils.format("{}", protocolSimpleName); + return new Pair<>(type, field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + ObjectProtocolField objectProtocolField = (ObjectProtocolField) fieldRegistration; + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writePacket({}, {});", objectStr, objectProtocolField.getProtocolId())).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + ObjectProtocolField objectProtocolField = (ObjectProtocolField) fieldRegistration; + var result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readPacket({});", result, objectProtocolField.getProtocolId())).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsSetSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsSetSerializer.java new file mode 100644 index 00000000..78334873 --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsSetSerializer.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.registration.field.SetField; +import com.zfoo.protocol.serializer.CodeLanguage; +import com.zfoo.protocol.serializer.CutDownSetSerializer; +import com.zfoo.protocol.serializer.javascript.GenerateJsUtils; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsSetSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("Set", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + if (CutDownSetSerializer.getInstance().writeObject(builder, objectStr, field, fieldRegistration, CodeLanguage.JavaScript)) { + return; + } + + SetField setField = (SetField) fieldRegistration; + + builder.append(StringUtils.format("if ({} === null) {", objectStr)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("buffer.writeInt(0);").append(LS); + GenerateProtocolFile.addTab(builder, deep); + + builder.append("} else {").append(LS); + + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("buffer.writeInt({}.size);", objectStr)).append(LS); + + String element = "element" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append(StringUtils.format("{}.forEach({} => {", objectStr, element)).append(LS); + GenerateJsUtils.jsSerializer(setField.getSetElementRegistration().serializer()) + .writeObject(builder, element, deep + 2, field, setField.getSetElementRegistration()); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("});").append(LS); + GenerateProtocolFile.addTab(builder, deep); + builder.append("}").append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + var cutDown = CutDownSetSerializer.getInstance().readObject(builder, field, fieldRegistration, CodeLanguage.JavaScript); + if (cutDown != null) { + return cutDown; + } + + SetField setField = (SetField) fieldRegistration; + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + + builder.append(StringUtils.format("const {} = new Set();", result)).append(LS); + + GenerateProtocolFile.addTab(builder, deep); + String size = "size" + GenerateProtocolFile.index.getAndIncrement(); + builder.append(StringUtils.format("const {} = buffer.readInt();", size)).append(LS); + + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("if ({} > 0) {", size)).append(LS); + + GenerateProtocolFile.addTab(builder, deep + 1); + String i = "index" + GenerateProtocolFile.index.getAndIncrement(); + builder.append(StringUtils.format("for (let {} = 0; {} < {}; {}++) {", i, i, size, i)).append(LS); + String readObject = GenerateJsUtils.jsSerializer(setField.getSetElementRegistration().serializer()) + .readObject(builder, deep + 2, field, setField.getSetElementRegistration()); + GenerateProtocolFile.addTab(builder, deep + 2); + builder.append(StringUtils.format("{}.add({});", result, readObject)).append(LS); + GenerateProtocolFile.addTab(builder, deep + 1); + builder.append("}").append(LS); + GenerateProtocolFile.addTab(builder, deep); + builder.append("}").append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsShortSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsShortSerializer.java new file mode 100644 index 00000000..46d196a4 --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsShortSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsShortSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("number", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeShort({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readShort();", result)).append(LS); + return result; + } +} diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsStringSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsStringSerializer.java new file mode 100644 index 00000000..680f44cd --- /dev/null +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/typescript/TsStringSerializer.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2020 The zfoo Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed + * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +package com.zfoo.protocol.serializer.typescript; + +import com.zfoo.protocol.generate.GenerateProtocolFile; +import com.zfoo.protocol.model.Pair; +import com.zfoo.protocol.registration.field.IFieldRegistration; +import com.zfoo.protocol.util.StringUtils; + +import java.lang.reflect.Field; + +import static com.zfoo.protocol.util.FileUtils.LS; + +/** + * @author jaysunxiao + * @version 3.0 + */ +public class TsStringSerializer implements ITsSerializer { + + @Override + public Pair field(Field field, IFieldRegistration fieldRegistration) { + return new Pair<>("string", field.getName()); + } + + @Override + public void writeObject(StringBuilder builder, String objectStr, int deep, Field field, IFieldRegistration fieldRegistration) { + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("buffer.writeString({});", objectStr)).append(LS); + } + + @Override + public String readObject(StringBuilder builder, int deep, Field field, IFieldRegistration fieldRegistration) { + String result = "result" + GenerateProtocolFile.index.getAndIncrement(); + GenerateProtocolFile.addTab(builder, deep); + builder.append(StringUtils.format("const {} = buffer.readString();", result)).append(LS); + return result; + } +}