mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-20 04:24:13 +00:00
perf[protocol]: 支持TypeScript
This commit is contained in:
@@ -23,6 +23,7 @@ import com.zfoo.protocol.serializer.gdscript.GenerateGdUtils;
|
||||
import com.zfoo.protocol.serializer.javascript.GenerateJsUtils;
|
||||
import com.zfoo.protocol.serializer.lua.GenerateLuaUtils;
|
||||
import com.zfoo.protocol.serializer.protobuf.GenerateProtobufUtils;
|
||||
import com.zfoo.protocol.serializer.typescript.GenerateTsUtils;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
@@ -124,6 +125,15 @@ public abstract class GenerateProtocolFile {
|
||||
GenerateJsUtils.createProtocolManager(allSortedGenerateProtocols);
|
||||
}
|
||||
|
||||
// 生成TypeScript协议
|
||||
if (generateLanguages.contains(CodeLanguage.TypeScript)) {
|
||||
GenerateTsUtils.init(generateOperation);
|
||||
for (var protocolRegistration : allSortedGenerateProtocols) {
|
||||
GenerateTsUtils.createTsProtocolFile((ProtocolRegistration) protocolRegistration);
|
||||
}
|
||||
GenerateTsUtils.createProtocolManager(allSortedGenerateProtocols);
|
||||
}
|
||||
|
||||
// 生成Lua协议
|
||||
if (generateLanguages.contains(CodeLanguage.Lua)) {
|
||||
GenerateLuaUtils.init(generateOperation);
|
||||
|
||||
@@ -27,6 +27,8 @@ public enum CodeLanguage {
|
||||
|
||||
JavaScript,
|
||||
|
||||
TypeScript,
|
||||
|
||||
Lua,
|
||||
|
||||
CSharp,
|
||||
|
||||
@@ -62,6 +62,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeBooleanArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -84,6 +85,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeBooleanArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -106,6 +108,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeByteArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -128,6 +131,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeByteArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -150,6 +154,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeShortArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -172,6 +177,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeShortArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -194,6 +200,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeIntArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -216,6 +223,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeIntArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -238,6 +246,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeLongArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -260,6 +269,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeLongArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -282,6 +292,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeFloatArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -304,6 +315,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeFloatArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -326,6 +338,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeDoubleArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -348,6 +361,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeDoubleArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -370,6 +384,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeStringArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -392,6 +407,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeCharArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -414,6 +430,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeCharArray({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -440,6 +457,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("buffer.writePacketArray<{}>({}, {});", EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), objectStr, protocolId)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writePacketArray({}, {});", objectStr, protocolId)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -480,6 +498,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readBooleanArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readBooleanArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -504,6 +523,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readBooleanArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readBooleanArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -528,6 +548,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readByteArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readByteArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -552,6 +573,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readByteArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readByteArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -576,6 +598,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readShortArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readShortArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -600,6 +623,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readShortArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readShortArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -624,6 +648,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readIntArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readIntArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -648,6 +673,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readIntArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readIntArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -672,6 +698,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readLongArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readLongArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -696,6 +723,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readLongArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readLongArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -720,6 +748,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readFloatArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readFloatArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -744,6 +773,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readFloatArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readFloatArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -768,6 +798,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readDoubleArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readDoubleArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -792,6 +823,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readDoubleArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readDoubleArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -816,6 +848,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readStringArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readStringArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -840,6 +873,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readCharArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readCharArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -864,6 +898,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readCharArray();", array)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readCharArray();", array)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -888,6 +923,7 @@ public class CutDownArraySerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readPacketArray<{}>({});", array, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readPacketArray({});", array, protocolId)).append(LS);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -61,6 +61,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeBooleanList({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -83,6 +84,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeByteList({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -105,6 +107,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeShortList({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -127,6 +130,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeIntList({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -149,6 +153,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeLongList({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -172,6 +177,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeFloatList({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -195,6 +201,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeDoubleList({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -218,6 +225,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeStringList({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -243,6 +251,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writePacketList({}, {});", objectStr, protocolId)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -282,6 +291,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readBooleanList();", list)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readBooleanList();", list)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -306,6 +316,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readByteList();", list)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readByteList();", list)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -330,6 +341,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readShortList();", list)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readShortList();", list)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -354,6 +366,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readIntList();", list)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readIntList();", list)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -378,6 +391,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readLongList();", list)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readLongList();", list)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -402,6 +416,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readFloatList();", list)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readFloatList();", list)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -426,6 +441,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readDoubleList();", list)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readDoubleList();", list)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -450,6 +466,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readStringList();", list)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readStringList();", list)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -476,6 +493,7 @@ public class CutDownListSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readPacketList<{}>({});", list, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readPacketList({});", list, protocolId)).append(LS);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -68,6 +68,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeIntIntMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -87,6 +88,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeIntLongMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -99,6 +101,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("buffer.writeIntStringMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeIntStringMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
case GdScript:
|
||||
@@ -127,6 +130,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeIntPacketMap({}, {});", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -148,6 +152,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeLongIntMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -167,6 +172,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeLongLongMap({}, {});", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -186,6 +192,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeLongStringMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -205,6 +212,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeLongPacketMap({}, {});", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -226,6 +234,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeStringIntMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -245,6 +254,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeStringLongMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -264,6 +274,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeStringStringMap({});", objectStr)).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -283,6 +294,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
return true;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeStringPacketMap({}, {});", objectStr, ((ObjectProtocolField) valueRegistration).getProtocolId())).append(LS);
|
||||
return true;
|
||||
}
|
||||
@@ -322,6 +334,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readIntIntMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readIntIntMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -343,6 +356,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readIntLongMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readIntLongMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -364,6 +378,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readIntStringMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readIntStringMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -386,6 +401,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readIntPacketMap<{}>({});", map, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readIntPacketMap({});", map, protocolId)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -409,6 +425,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readLongIntMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readLongIntMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -430,6 +447,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readLongLongMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readLongLongMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -451,6 +469,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readLongStringMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readLongStringMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -473,6 +492,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readLongPacketMap<{}>({});", map, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readLongPacketMap({});", map, protocolId)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -496,6 +516,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readStringIntMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readStringIntMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -517,6 +538,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readStringLongMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readStringLongMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -538,6 +560,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readStringStringMap();", map)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readStringStringMap();", map)).append(LS);
|
||||
return map;
|
||||
}
|
||||
@@ -560,6 +583,7 @@ public class CutDownMapSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readStringPacketMap<{}>({});", map, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS);
|
||||
return map;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readStringPacketMap({});", map, protocolId)).append(LS);
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeBooleanSet({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -84,6 +85,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeByteSet({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -106,6 +108,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeShortSet({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -128,6 +131,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeIntSet({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -150,6 +154,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeLongSet({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -172,6 +177,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeFloatSet({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -194,6 +200,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeDoubleSet({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -216,6 +223,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writeStringSet({});", objectStr)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -241,6 +249,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
break;
|
||||
case Cpp:
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("buffer.writePacketSet({}, {});", objectStr, protocolId)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -280,6 +289,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readBooleanSet();", set)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readBooleanSet();", set)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -304,6 +314,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readByteSet();", set)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readByteSet();", set)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -328,6 +339,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readShortSet();", set)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readShortSet();", set)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -352,6 +364,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readIntSet();", set)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readIntSet();", set)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -376,6 +389,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readLongSet();", set)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readLongSet();", set)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -400,6 +414,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readFloatSet();", set)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readFloatSet();", set)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -424,6 +439,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readDoubleSet();", set)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readDoubleSet();", set)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -448,6 +464,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readStringSet();", set)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readStringSet();", set)).append(LS);
|
||||
break;
|
||||
default:
|
||||
@@ -474,6 +491,7 @@ public class CutDownSetSerializer implements ICutDownSerializer {
|
||||
builder.append(StringUtils.format("auto {} = buffer.readPacketSet<{}>({});", set, EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId), protocolId)).append(LS);
|
||||
break;
|
||||
case JavaScript:
|
||||
case TypeScript:
|
||||
builder.append(StringUtils.format("const {} = buffer.readPacketSet({});", set, protocolId)).append(LS);
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -157,7 +157,7 @@ public abstract class GenerateCppUtils {
|
||||
|
||||
|
||||
private static String includeSubProtocol(ProtocolRegistration registration) {
|
||||
short protocolId = registration.getId();
|
||||
var protocolId = registration.getId();
|
||||
var subProtocols = ProtocolAnalysis.getAllSubProtocolIds(protocolId);
|
||||
|
||||
if (CollectionUtils.isEmpty(subProtocols)) {
|
||||
|
||||
+12
-10
@@ -48,16 +48,7 @@ public abstract class GenerateJsUtils {
|
||||
|
||||
private static Map<ISerializer, IJsSerializer> jsSerializerMap;
|
||||
|
||||
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);
|
||||
|
||||
static {
|
||||
jsSerializerMap = new HashMap<>();
|
||||
jsSerializerMap.put(BooleanSerializer.INSTANCE, new JsBooleanSerializer());
|
||||
jsSerializerMap.put(ByteSerializer.INSTANCE, new JsByteSerializer());
|
||||
@@ -75,6 +66,17 @@ 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;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
|
||||
package com.zfoo.protocol.serializer.javascript;
|
||||
|
||||
import com.zfoo.protocol.model.Pair;
|
||||
import com.zfoo.protocol.registration.field.IFieldRegistration;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
@@ -23,6 +24,11 @@ import java.lang.reflect.Field;
|
||||
*/
|
||||
public interface IJsSerializer {
|
||||
|
||||
/**
|
||||
* 获取属性的类型和名称
|
||||
*/
|
||||
Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +31,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsArraySerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
+6
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsBooleanSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsByteSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsCharSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsDoubleSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsFloatSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsIntSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +31,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsListSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsLongSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +31,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsMapSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
+10
@@ -14,8 +14,10 @@
|
||||
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;
|
||||
@@ -28,6 +30,14 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsObjectProtocolSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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;
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +31,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsSetSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsShortSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
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,6 +28,11 @@ import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
*/
|
||||
public class JsStringSerializer implements IJsSerializer {
|
||||
|
||||
@Override
|
||||
public Pair<String, String> 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);
|
||||
|
||||
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* 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.collection.CollectionUtils;
|
||||
import com.zfoo.protocol.generate.GenerateOperation;
|
||||
import com.zfoo.protocol.generate.GenerateProtocolDocument;
|
||||
import com.zfoo.protocol.generate.GenerateProtocolFile;
|
||||
import com.zfoo.protocol.generate.GenerateProtocolPath;
|
||||
import com.zfoo.protocol.model.Pair;
|
||||
import com.zfoo.protocol.registration.IProtocolRegistration;
|
||||
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;
|
||||
import com.zfoo.protocol.util.IOUtils;
|
||||
import com.zfoo.protocol.util.StringUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static com.zfoo.protocol.util.FileUtils.LS;
|
||||
import static com.zfoo.protocol.util.StringUtils.TAB;
|
||||
|
||||
/**
|
||||
* @author jaysunxiao
|
||||
* @version 3.0
|
||||
*/
|
||||
public abstract class GenerateTsUtils {
|
||||
|
||||
private static String protocolOutputRootPath = "tsProtocol/";
|
||||
|
||||
public static void init(GenerateOperation generateOperation) {
|
||||
protocolOutputRootPath = FileUtils.joinPath(generateOperation.getProtocolPath(), protocolOutputRootPath);
|
||||
|
||||
FileUtils.deleteFile(new File(protocolOutputRootPath));
|
||||
FileUtils.createDirectory(protocolOutputRootPath);
|
||||
}
|
||||
|
||||
public static void clear() {
|
||||
protocolOutputRootPath = null;
|
||||
}
|
||||
|
||||
public static void createProtocolManager(List<IProtocolRegistration> protocolList) throws IOException {
|
||||
var list = List.of("typescript/buffer/ByteBuffer.ts", "typescript/buffer/long.js", "typescript/buffer/longbits.js");
|
||||
for (var fileName : list) {
|
||||
var fileInputStream = ClassUtils.getFileFromClassPath(fileName);
|
||||
var createFile = new File(StringUtils.format("{}/{}", protocolOutputRootPath, StringUtils.substringAfterFirst(fileName, "typescript/")));
|
||||
FileUtils.writeInputStreamToFile(createFile, fileInputStream);
|
||||
}
|
||||
|
||||
// 生成ProtocolManager.ts文件
|
||||
var protocolManagerTemplate = StringUtils.bytesToString(IOUtils.toByteArray(ClassUtils.getFileFromClassPath("typescript/ProtocolManagerTemplate.ts")));
|
||||
|
||||
var importBuilder = new StringBuilder();
|
||||
var initProtocolBuilder = new StringBuilder();
|
||||
for (var protocol : protocolList) {
|
||||
var protocolId = protocol.protocolId();
|
||||
var protocolClassName = EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(protocolId);
|
||||
|
||||
var path = GenerateProtocolPath.getProtocolPath(protocolId);
|
||||
if (StringUtils.isBlank(path)) {
|
||||
importBuilder.append(StringUtils.format("import {} from './{}';", protocolClassName, protocolClassName)).append(LS);
|
||||
} else {
|
||||
importBuilder.append(StringUtils.format("import {} from './{}/{}';", protocolClassName, path, protocolClassName)).append(LS);
|
||||
}
|
||||
initProtocolBuilder.append(StringUtils.format("protocols.set({}, {});", protocolId, protocolClassName)).append(LS);
|
||||
}
|
||||
|
||||
protocolManagerTemplate = StringUtils.format(protocolManagerTemplate, importBuilder.toString().trim(), initProtocolBuilder.toString().trim());
|
||||
FileUtils.writeStringToFile(new File(StringUtils.format("{}/{}", protocolOutputRootPath, "ProtocolManager.ts")), protocolManagerTemplate);
|
||||
}
|
||||
|
||||
public static void createTsProtocolFile(ProtocolRegistration registration) throws IOException {
|
||||
// 初始化index
|
||||
GenerateProtocolFile.index.set(0);
|
||||
|
||||
var protocolId = registration.protocolId();
|
||||
var registrationConstructor = registration.getConstructor();
|
||||
var protocolClazzName = registrationConstructor.getDeclaringClass().getSimpleName();
|
||||
|
||||
var protocolTemplate = StringUtils.bytesToString(IOUtils.toByteArray(ClassUtils.getFileFromClassPath("typescript/ProtocolTemplate.ts")));
|
||||
|
||||
var importSubProtocol = importSubProtocol(registration);
|
||||
var docTitle = docTitle(registration);
|
||||
var fieldDefinition = fieldDefinition(registration);
|
||||
var valueOfMethod = valueOfMethod(registration);
|
||||
var writeObject = writeObject(registration);
|
||||
var readObject = readObject(registration);
|
||||
|
||||
protocolTemplate = StringUtils.format(protocolTemplate, importSubProtocol, docTitle, protocolClazzName, fieldDefinition.trim()
|
||||
, valueOfMethod.getKey().trim(), valueOfMethod.getValue().trim(), protocolId, protocolClazzName
|
||||
, writeObject.trim(), protocolClazzName, protocolClazzName, readObject.trim(), protocolClazzName);
|
||||
var protocolOutputPath = StringUtils.format("{}/{}/{}.ts", protocolOutputRootPath
|
||||
, GenerateProtocolPath.getProtocolPath(protocolId), protocolClazzName);
|
||||
FileUtils.writeStringToFile(new File(protocolOutputPath), protocolTemplate);
|
||||
}
|
||||
|
||||
private static String importSubProtocol(ProtocolRegistration registration) {
|
||||
var protocolId = registration.getId();
|
||||
var subProtocols = ProtocolAnalysis.getAllSubProtocolIds(protocolId);
|
||||
|
||||
if (CollectionUtils.isEmpty(subProtocols)) {
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
var importBuilder = new StringBuilder();
|
||||
for (var subProtocolId : subProtocols) {
|
||||
var protocolClassName = EnhanceObjectProtocolSerializer.getProtocolClassSimpleName(subProtocolId);
|
||||
var path = GenerateProtocolPath.getProtocolPath(protocolId);
|
||||
importBuilder.append(StringUtils.format("import {} from './{}';", protocolClassName, protocolClassName)).append(LS);
|
||||
}
|
||||
return importBuilder.toString();
|
||||
}
|
||||
|
||||
private static String docTitle(ProtocolRegistration registration) {
|
||||
var protocolId = registration.getId();
|
||||
var protocolDocument = GenerateProtocolDocument.getProtocolDocument(protocolId);
|
||||
var docTitle = protocolDocument.getKey();
|
||||
return docTitle;
|
||||
}
|
||||
|
||||
private static String fieldDefinition(ProtocolRegistration registration) {
|
||||
var protocolId = registration.getId();
|
||||
var fields = registration.getFields();
|
||||
var fieldRegistrations = registration.getFieldRegistrations();
|
||||
|
||||
var fieldDefinitionBuilder = new StringBuilder();
|
||||
|
||||
var protocolDocument = GenerateProtocolDocument.getProtocolDocument(protocolId);
|
||||
var docFieldMap = protocolDocument.getValue();
|
||||
|
||||
for (var i = 0; i < fields.length; i++) {
|
||||
var field = fields[i];
|
||||
var fieldRegistration = fieldRegistrations[i];
|
||||
|
||||
var propertyName = field.getName();
|
||||
// 生成注释
|
||||
var doc = docFieldMap.get(propertyName);
|
||||
if (StringUtils.isNotBlank(doc)) {
|
||||
Arrays.stream(doc.split(LS)).forEach(it -> fieldDefinitionBuilder.append(TAB).append(it).append(LS));
|
||||
}
|
||||
|
||||
var propertyTypeAndName = GenerateJsUtils.jsSerializer(fieldRegistration.serializer()).field(field, fieldRegistration);
|
||||
fieldDefinitionBuilder.append(TAB).append(StringUtils.format("{}: {};", propertyTypeAndName.getValue(), propertyTypeAndName.getKey())).append(LS);
|
||||
}
|
||||
return fieldDefinitionBuilder.toString();
|
||||
}
|
||||
|
||||
private static Pair<String, String> valueOfMethod(ProtocolRegistration registration) {
|
||||
var protocolId = registration.getId();
|
||||
var fields = registration.getFields();
|
||||
var fieldRegistrations = registration.getFieldRegistrations();
|
||||
|
||||
var filedList = new ArrayList<Pair<String, String>>();
|
||||
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);
|
||||
filedList.add(propertyTypeAndName);
|
||||
}
|
||||
|
||||
var valueOfParams = filedList.stream()
|
||||
.map(it -> StringUtils.format("{}: {}", it.getValue(), it.getKey()))
|
||||
.collect(Collectors.toList());
|
||||
var valueOfParamsStr = StringUtils.joinWith(StringUtils.COMMA + " ", valueOfParams.toArray());
|
||||
|
||||
var cppBuilder = new StringBuilder();
|
||||
filedList.forEach(it -> cppBuilder.append(TAB + TAB).append(StringUtils.format("this.{} = {};", it.getValue(), it.getValue())).append(LS));
|
||||
return new Pair<>(valueOfParamsStr, cppBuilder.toString());
|
||||
}
|
||||
|
||||
private static String writeObject(ProtocolRegistration registration) {
|
||||
var fields = registration.getFields();
|
||||
var fieldRegistrations = registration.getFieldRegistrations();
|
||||
var jsBuilder = new StringBuilder();
|
||||
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);
|
||||
}
|
||||
return jsBuilder.toString();
|
||||
}
|
||||
|
||||
private static String readObject(ProtocolRegistration registration) {
|
||||
var fields = registration.getFields();
|
||||
var fieldRegistrations = registration.getFieldRegistrations();
|
||||
var jsBuilder = new StringBuilder();
|
||||
for (var i = 0; i < fields.length; i++) {
|
||||
var field = fields[i];
|
||||
var fieldRegistration = fieldRegistrations[i];
|
||||
if (field.isAnnotationPresent(Compatible.class)) {
|
||||
jsBuilder.append(TAB).append("if (!buffer.isReadable()) {").append(LS);
|
||||
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);
|
||||
jsBuilder.append(TAB + TAB).append(StringUtils.format("packet.{} = {};", field.getName(), readObject)).append(LS);
|
||||
}
|
||||
return jsBuilder.toString();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
{}
|
||||
|
||||
const protocols = new Map();
|
||||
|
||||
// initProtocol
|
||||
{}
|
||||
|
||||
class ProtocolManager {
|
||||
static getProtocol(): Any {
|
||||
const protocol = protocols.get(protocolId);
|
||||
if (protocol === null) {
|
||||
throw new Error('[protocolId:' + protocolId + ']协议不存在');
|
||||
}
|
||||
return protocol;
|
||||
}
|
||||
|
||||
static write(buffer: Any, packet: Any): void {
|
||||
const protocolId = packet.protocolId();
|
||||
buffer.writeShort(protocolId);
|
||||
const protocol = getProtocol(protocolId);
|
||||
protocol.write(buffer, packet);
|
||||
}
|
||||
|
||||
static read(buffer: Any): Any {
|
||||
const protocolId = buffer.readShort();
|
||||
const protocol = ProtocolManager.getProtocol(protocolId);
|
||||
const packet = protocol.read(buffer);
|
||||
return packet;
|
||||
}
|
||||
}
|
||||
|
||||
export default ProtocolManager;
|
||||
@@ -0,0 +1,29 @@
|
||||
{}
|
||||
{}
|
||||
class {} {
|
||||
|
||||
{}
|
||||
|
||||
constructor({}) {
|
||||
{}
|
||||
}
|
||||
|
||||
protocolId(): number {
|
||||
return {};
|
||||
}
|
||||
|
||||
static write(buffer: Any, packet: {}) {
|
||||
{}
|
||||
}
|
||||
|
||||
static read(buffer: Any): {} {
|
||||
if (!buffer.readBoolean()) {
|
||||
return null;
|
||||
}
|
||||
const packet = new {}();
|
||||
{}
|
||||
return packet;
|
||||
}
|
||||
}
|
||||
|
||||
export default {};
|
||||
@@ -0,0 +1,352 @@
|
||||
const Longbits = require('./longbits.js');
|
||||
|
||||
const empty_str = '';
|
||||
const initSize = 128;
|
||||
const maxSize = 655537;
|
||||
|
||||
const maxShort = 32767;
|
||||
const minShort = -32768;
|
||||
|
||||
const maxInt = 2147483647;
|
||||
const minInt = -2147483648;
|
||||
|
||||
// UTF-8编码与解码
|
||||
// const encoder = new TextEncoder('utf-8');
|
||||
// const decoder = new TextDecoder('utf-8');
|
||||
|
||||
// nodejs的测试环境需要用以下方式特殊处理
|
||||
const util = require('util');
|
||||
const encoder = new util.TextEncoder('utf-8');
|
||||
const decoder = new util.TextDecoder('utf-8');
|
||||
|
||||
// 在js中long可以支持的最大值
|
||||
// const maxLong = 9007199254740992;
|
||||
// const minLong = -9007199254740992;
|
||||
|
||||
const copy = function copy(original: ArrayBuffer, newLength: number) {
|
||||
if (original.byteLength > newLength) {
|
||||
throw new Error('newLength is too small');
|
||||
}
|
||||
const dst = new ArrayBuffer(newLength);
|
||||
new Uint8Array(dst).set(new Uint8Array(original));
|
||||
return dst;
|
||||
};
|
||||
|
||||
function encodeZigzagInt(n: number) {
|
||||
// 有效位左移一位+符号位右移31位
|
||||
return (n << 1) ^ (n >> 31);
|
||||
}
|
||||
|
||||
function decodeZigzagInt(n: number) {
|
||||
return (n >>> 1) ^ -(n & 1);
|
||||
}
|
||||
|
||||
|
||||
class ByteBuffer {
|
||||
writeOffset: number;
|
||||
readOffset: number;
|
||||
buffer: ArrayBuffer;
|
||||
bufferView: DataView;
|
||||
|
||||
constructor() {
|
||||
this.writeOffset = 0;
|
||||
this.readOffset = 0;
|
||||
this.buffer = new ArrayBuffer(initSize);
|
||||
this.bufferView = new DataView(this.buffer, 0, this.buffer.byteLength);
|
||||
}
|
||||
|
||||
setWriteOffset(writeOffset: number): void {
|
||||
if (writeOffset > this.buffer.byteLength) {
|
||||
throw new Error('index out of bounds exception:readerIndex:' + this.readOffset +
|
||||
', writerIndex:' + this.writeOffset +
|
||||
'(expected:0 <= readerIndex <= writerIndex <= capacity:' + this.buffer.byteLength);
|
||||
}
|
||||
this.writeOffset = writeOffset;
|
||||
}
|
||||
|
||||
setReadOffset(readOffset: number): void {
|
||||
if (readOffset > this.writeOffset) {
|
||||
throw new Error('index out of bounds exception:readerIndex:' + this.readOffset +
|
||||
', writerIndex:' + this.writeOffset +
|
||||
'(expected:0 <= readerIndex <= writerIndex <= capacity:' + this.buffer.byteLength);
|
||||
}
|
||||
this.readOffset = readOffset;
|
||||
}
|
||||
|
||||
getCapacity(): number {
|
||||
return this.buffer.byteLength - this.writeOffset;
|
||||
}
|
||||
|
||||
ensureCapacity(minCapacity: number): void {
|
||||
while (minCapacity - this.getCapacity() > 0) {
|
||||
const newSize = this.buffer.byteLength * 2;
|
||||
if (newSize > maxSize) {
|
||||
throw new Error('out of memory error');
|
||||
}
|
||||
this.buffer = copy(this.buffer, newSize);
|
||||
this.bufferView = new DataView(this.buffer, 0, this.buffer.byteLength);
|
||||
}
|
||||
}
|
||||
|
||||
isReadable(): boolean {
|
||||
return this.writeOffset > this.readOffset;
|
||||
}
|
||||
|
||||
writeBytes(byteArray: ArrayBuffer): void {
|
||||
const length = byteArray.byteLength;
|
||||
this.ensureCapacity(length);
|
||||
new Uint8Array(this.buffer).set(new Uint8Array(byteArray), this.writeOffset);
|
||||
this.writeOffset += length;
|
||||
}
|
||||
|
||||
toBytes(): ArrayBuffer {
|
||||
const result = new ArrayBuffer(this.writeOffset);
|
||||
new Uint8Array(result).set(new Uint8Array(this.buffer.slice(0, this.writeOffset)));
|
||||
return result;
|
||||
}
|
||||
|
||||
writeBoolean(value: boolean): void {
|
||||
if (!(value === true || value === false)) {
|
||||
throw new Error('value must be true of false');
|
||||
}
|
||||
this.ensureCapacity(1);
|
||||
if (value === true) {
|
||||
this.bufferView.setInt8(this.writeOffset, 1);
|
||||
} else {
|
||||
this.bufferView.setInt8(this.writeOffset, 0);
|
||||
}
|
||||
this.writeOffset++;
|
||||
}
|
||||
|
||||
readBoolean(): boolean {
|
||||
const value = this.bufferView.getInt8(this.readOffset);
|
||||
this.readOffset++;
|
||||
return (value === 1);
|
||||
}
|
||||
|
||||
writeByte(value: number): void {
|
||||
this.ensureCapacity(1);
|
||||
this.bufferView.setInt8(this.writeOffset, value);
|
||||
this.writeOffset++;
|
||||
}
|
||||
|
||||
readByte(): number {
|
||||
const value = this.bufferView.getInt8(this.readOffset);
|
||||
this.readOffset++;
|
||||
return value;
|
||||
}
|
||||
|
||||
writeShort(value: number): void {
|
||||
if (!(minShort <= value && value <= maxShort)) {
|
||||
throw new Error('value must range between minShort:-32768 and maxShort:32767');
|
||||
}
|
||||
this.ensureCapacity(2);
|
||||
this.bufferView.setInt16(this.writeOffset, value);
|
||||
this.writeOffset += 2;
|
||||
}
|
||||
|
||||
readShort(): number {
|
||||
const value = this.bufferView.getInt16(this.readOffset);
|
||||
this.readOffset += 2;
|
||||
return value;
|
||||
}
|
||||
|
||||
writeRawInt(value: number): void {
|
||||
if (!(minInt <= value && value <= maxInt)) {
|
||||
throw new Error('value must range between minInt:-2147483648 and maxInt:2147483647');
|
||||
}
|
||||
this.ensureCapacity(4);
|
||||
this.bufferView.setInt32(this.writeOffset, value);
|
||||
this.writeOffset += 4;
|
||||
}
|
||||
|
||||
readRawInt(): number {
|
||||
const value = this.bufferView.getInt32(this.readOffset);
|
||||
this.readOffset += 4;
|
||||
return value;
|
||||
}
|
||||
|
||||
writeInt(value: number): void {
|
||||
if (!(minInt <= value && value <= maxInt)) {
|
||||
throw new Error('value must range between minInt:-2147483648 and maxInt:2147483647');
|
||||
}
|
||||
this.ensureCapacity(5);
|
||||
|
||||
value = encodeZigzagInt(value);
|
||||
|
||||
if (value >>> 7 === 0) {
|
||||
this.writeByte(value);
|
||||
return;
|
||||
}
|
||||
|
||||
if (value >>> 14 === 0) {
|
||||
this.writeByte((value & 0x7F) | 0x80);
|
||||
this.writeByte((value >>> 7));
|
||||
return;
|
||||
}
|
||||
|
||||
if (value >>> 21 === 0) {
|
||||
this.writeByte((value & 0x7F) | 0x80);
|
||||
this.writeByte((value >>> 7 | 0x80));
|
||||
this.writeByte(value >>> 14);
|
||||
return;
|
||||
}
|
||||
|
||||
if (value >>> 28 === 0) {
|
||||
this.writeByte((value & 0x7F) | 0x80);
|
||||
this.writeByte((value >>> 7 | 0x80));
|
||||
this.writeByte((value >>> 14 | 0x80));
|
||||
this.writeByte(value >>> 21);
|
||||
return;
|
||||
}
|
||||
|
||||
this.writeByte((value & 0x7F) | 0x80);
|
||||
this.writeByte((value >>> 7 | 0x80));
|
||||
this.writeByte((value >>> 14 | 0x80));
|
||||
this.writeByte((value >>> 21 | 0x80));
|
||||
this.writeByte(value >>> 28);
|
||||
}
|
||||
|
||||
readInt(): number {
|
||||
let b = this.readByte();
|
||||
let value = b & 0x7F;
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
value |= (b & 0x7F) << 7;
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
value |= (b & 0x7F) << 14;
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
value |= (b & 0x7F) << 21;
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
value |= (b & 0x7F) << 28;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return decodeZigzagInt(value);
|
||||
}
|
||||
|
||||
writeLong(value: number): void {
|
||||
if (value === null || value === undefined) {
|
||||
throw new Error('value must not be null');
|
||||
}
|
||||
this.ensureCapacity(9);
|
||||
|
||||
Longbits.writeInt64(this, value);
|
||||
}
|
||||
|
||||
readLong(): number {
|
||||
const buffer = new ArrayBuffer(9);
|
||||
const bufferView = new DataView(buffer, 0, buffer.byteLength);
|
||||
|
||||
let count = 0;
|
||||
let b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
if ((b & 0x80) !== 0) {
|
||||
b = this.readByte();
|
||||
bufferView.setUint8(count++, b);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Longbits.readInt64(new Uint8Array(buffer.slice(0, count))).toString();
|
||||
}
|
||||
|
||||
writeFloat(value: number): void {
|
||||
if (value === null || value === undefined) {
|
||||
throw new Error('value must not be null');
|
||||
}
|
||||
this.ensureCapacity(4);
|
||||
this.bufferView.setFloat32(this.writeOffset, value);
|
||||
this.writeOffset += 4;
|
||||
}
|
||||
|
||||
readFloat(): number {
|
||||
const value = this.bufferView.getFloat32(this.readOffset);
|
||||
this.readOffset += 4;
|
||||
return value;
|
||||
}
|
||||
|
||||
writeDouble(value: number): void {
|
||||
if (value === null || value === undefined) {
|
||||
throw new Error('value must not be null');
|
||||
}
|
||||
this.ensureCapacity(8);
|
||||
this.bufferView.setFloat64(this.writeOffset, value);
|
||||
this.writeOffset += 8;
|
||||
}
|
||||
|
||||
readDouble(): number {
|
||||
const value = this.bufferView.getFloat64(this.readOffset);
|
||||
this.readOffset += 8;
|
||||
return value;
|
||||
}
|
||||
|
||||
writeChar(value: string): void {
|
||||
if (value === null || value === undefined || value.length === 0) {
|
||||
this.writeString(empty_str);
|
||||
return;
|
||||
}
|
||||
this.writeString(value.charAt(0));
|
||||
}
|
||||
|
||||
readChar(): string {
|
||||
return this.readString();
|
||||
}
|
||||
|
||||
writeString(value: string): void {
|
||||
if (value === null || value === undefined || value.trim().length === 0) {
|
||||
this.writeInt(0);
|
||||
return;
|
||||
}
|
||||
|
||||
const uint8Array = encoder.encode(value);
|
||||
|
||||
this.ensureCapacity(5 + uint8Array.length);
|
||||
|
||||
this.writeInt(uint8Array.length);
|
||||
uint8Array.forEach((value: number) => this.writeByte(value));
|
||||
}
|
||||
|
||||
readString(): string {
|
||||
const length = this.readInt();
|
||||
if (length <= 0) {
|
||||
return empty_str;
|
||||
}
|
||||
const uint8Array = new Uint8Array(this.buffer.slice(this.readOffset, this.readOffset + length));
|
||||
const value = decoder.decode(uint8Array);
|
||||
this.readOffset += length;
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
export default ByteBuffer;
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,189 @@
|
||||
// from protobuf
|
||||
const Long = require('./long.js')
|
||||
|
||||
module.exports = LongBits;
|
||||
|
||||
/**
|
||||
* Constructs new long bits.
|
||||
* @classdesc Helper class for working with the low and high bits of a 64 bit value.
|
||||
* @memberof util
|
||||
* @constructor
|
||||
* @param {number} lo Low 32 bits, unsigned
|
||||
* @param {number} hi High 32 bits, unsigned
|
||||
*/
|
||||
function LongBits(lo, hi) {
|
||||
// note that the casts below are theoretically unnecessary as of today, but older statically
|
||||
// generated converter code might still call the ctor with signed 32bits. kept for compat.
|
||||
|
||||
/**
|
||||
* Low bits.
|
||||
* @type {number}
|
||||
*/
|
||||
this.lo = lo >>> 0;
|
||||
|
||||
/**
|
||||
* High bits.
|
||||
* @type {number}
|
||||
*/
|
||||
this.hi = hi >>> 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Zig-zag encodes this long bits.
|
||||
* @returns {util.LongBits} `this`
|
||||
*/
|
||||
LongBits.prototype.zzEncode = function zzEncode() {
|
||||
const mask = this.hi >> 31;
|
||||
this.hi = ((this.hi << 1 | this.lo >>> 31) ^ mask) >>> 0;
|
||||
this.lo = (this.lo << 1 ^ mask) >>> 0;
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Zig-zag decodes this long bits.
|
||||
* @returns {util.LongBits} `this`
|
||||
*/
|
||||
LongBits.prototype.zzDecode = function zzDecode() {
|
||||
const mask = -(this.lo & 1);
|
||||
this.lo = ((this.lo >>> 1 | this.hi << 31) ^ mask) >>> 0;
|
||||
this.hi = (this.hi >>> 1 ^ mask) >>> 0;
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Converts this long bits to a long.
|
||||
* @param {boolean} [unsigned=false] Whether unsigned or not
|
||||
* @returns {Long} Long
|
||||
*/
|
||||
LongBits.prototype.toLong = function toLong(unsigned) {
|
||||
return new Long(this.lo | 0, this.hi | 0, Boolean(unsigned));
|
||||
};
|
||||
|
||||
/**
|
||||
* Zero bits.
|
||||
* @memberof util.LongBits
|
||||
* @type {util.LongBits}
|
||||
*/
|
||||
const zero = LongBits.zero = new LongBits(0, 0);
|
||||
|
||||
function from(value) {
|
||||
if (typeof value === 'number') {
|
||||
return fromNumber(value);
|
||||
}
|
||||
if (typeof value === 'string' || value instanceof String) {
|
||||
value = Long.fromString(value);
|
||||
}
|
||||
return value.low || value.high ? new LongBits(value.low >>> 0, value.high >>> 0) : zero;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Constructs new long bits from the specified number.
|
||||
* @param {number} value Value
|
||||
* @returns {util.LongBits} Instance
|
||||
*/
|
||||
function fromNumber(value) {
|
||||
if (value === 0) {
|
||||
return zero;
|
||||
}
|
||||
const sign = value < 0;
|
||||
if (sign) {
|
||||
value = -value;
|
||||
}
|
||||
let lo = value >>> 0;
|
||||
let hi = (value - lo) / 4294967296 >>> 0;
|
||||
if (sign) {
|
||||
hi = ~hi >>> 0;
|
||||
lo = ~lo >>> 0;
|
||||
if (++lo > 4294967295) {
|
||||
lo = 0;
|
||||
if (++hi > 4294967295) {
|
||||
hi = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return new LongBits(lo, hi);
|
||||
}
|
||||
|
||||
function writeVarint64(byteBuffer, value) {
|
||||
let count = 0;
|
||||
while (value.hi) {
|
||||
byteBuffer.writeByte(value.lo & 127 | 128);
|
||||
value.lo = (value.lo >>> 7 | value.hi << 25) >>> 0;
|
||||
value.hi >>>= 7;
|
||||
count = count + 7;
|
||||
}
|
||||
while (value.lo > 127) {
|
||||
if (count >= 56) {
|
||||
byteBuffer.writeByte(value.lo);
|
||||
return;
|
||||
}
|
||||
byteBuffer.writeByte(value.lo & 127 | 128);
|
||||
value.lo = value.lo >>> 7;
|
||||
count = count + 7;
|
||||
}
|
||||
byteBuffer.writeByte(value.lo);
|
||||
}
|
||||
|
||||
function readLongVarint(buffer) {
|
||||
// tends to deopt with local vars for octet etc.
|
||||
const bits = new LongBits(0, 0);
|
||||
let i = 0;
|
||||
const len = buffer.length;
|
||||
let pos = 0;
|
||||
if (len - pos > 4) { // fast route (lo)
|
||||
for (; i < 4; ++i) {
|
||||
// 1st..4th
|
||||
bits.lo = (bits.lo | (buffer[pos] & 127) << i * 7) >>> 0;
|
||||
if (buffer[pos++] < 128) {
|
||||
return bits;
|
||||
}
|
||||
}
|
||||
// 5th
|
||||
bits.lo = (bits.lo | (buffer[pos] & 127) << 28) >>> 0;
|
||||
bits.hi = (bits.hi | (buffer[pos] & 127) >> 4) >>> 0;
|
||||
if (buffer[pos++] < 128) {
|
||||
return bits;
|
||||
}
|
||||
i = 0;
|
||||
} else {
|
||||
for (; i < 3; ++i) {
|
||||
// 1st..3th
|
||||
bits.lo = (bits.lo | (buffer[pos] & 127) << i * 7) >>> 0;
|
||||
if (buffer[pos++] < 128) {
|
||||
return bits;
|
||||
}
|
||||
}
|
||||
// 4th
|
||||
bits.lo = (bits.lo | (buffer[pos++] & 127) << i * 7) >>> 0;
|
||||
return bits;
|
||||
}
|
||||
|
||||
// 6th..9th
|
||||
for (; i < 4; ++i) {
|
||||
// 最后一位直接写入
|
||||
if (pos === 8) {
|
||||
bits.hi = (bits.hi | buffer[pos] << i * 7 + 3) >>> 0;
|
||||
return bits;
|
||||
}
|
||||
bits.hi = (bits.hi | (buffer[pos] & 127) << i * 7 + 3) >>> 0;
|
||||
if (buffer[pos++] < 128) {
|
||||
return bits;
|
||||
}
|
||||
}
|
||||
|
||||
return bits;
|
||||
}
|
||||
|
||||
function writeInt64(byteBuffer, value) {
|
||||
const bits = from(value).zzEncode();
|
||||
writeVarint64(byteBuffer, bits);
|
||||
}
|
||||
|
||||
function readInt64(buffer) {
|
||||
return readLongVarint(buffer).zzDecode().toLong(false);
|
||||
}
|
||||
|
||||
LongBits.writeInt64 = writeInt64;
|
||||
|
||||
LongBits.readInt64 = readInt64;
|
||||
@@ -42,7 +42,7 @@ import java.util.concurrent.Executors;
|
||||
*/
|
||||
public class SpeedTest {
|
||||
|
||||
private static int benchmark = 10_0000;
|
||||
private static int benchmark = 1;
|
||||
|
||||
/**
|
||||
* 单线程性能测试
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
import ByteBuffer from './zfoojs/buffer/ByteBuffer';
|
||||
|
||||
function assert(flag: boolean): void {
|
||||
if (!flag) {
|
||||
throw "exception happen";
|
||||
}
|
||||
}
|
||||
|
||||
// 如果是在idea中运行,需要先安装插件:Run Configuration for TypeScript
|
||||
console.log("Hello world");
|
||||
|
||||
|
||||
|
||||
// ByteBuffer test
|
||||
let buffer = new ByteBuffer();
|
||||
assert(buffer.getCapacity() == 128)
|
||||
|
||||
// boolean
|
||||
const testBoolean = [false, true];
|
||||
testBoolean.forEach((value) => {
|
||||
buffer.writeBoolean(value);
|
||||
assert(buffer.readBoolean() == value);
|
||||
});
|
||||
|
||||
assert(buffer.writeOffset == testBoolean.length);
|
||||
assert(buffer.readOffset == testBoolean.length);
|
||||
|
||||
// byte
|
||||
buffer = new ByteBuffer();
|
||||
const testByte = [-128, -99, 0, 99, 127];
|
||||
testByte.forEach((value) => {
|
||||
buffer.writeByte(value);
|
||||
assert(buffer.readByte() == value);
|
||||
});
|
||||
assert(buffer.writeOffset == testByte.length);
|
||||
assert(buffer.readOffset == testByte.length);
|
||||
|
||||
// short
|
||||
buffer = new ByteBuffer();
|
||||
const testShort = [-32768, -99, 0, 99, 32767];
|
||||
testShort.forEach((value) => {
|
||||
buffer.writeShort(value);
|
||||
assert(buffer.readShort() == value);
|
||||
});
|
||||
assert(buffer.writeOffset == testShort.length * 2);
|
||||
assert(buffer.readOffset == testShort.length * 2);
|
||||
|
||||
// int
|
||||
buffer = new ByteBuffer();
|
||||
const testInt = [-2147483648, -99, 0, 99, 2147483647];
|
||||
testInt.forEach((value) => {
|
||||
buffer.writeInt(value);
|
||||
assert(buffer.readInt() == value);
|
||||
});
|
||||
|
||||
// float
|
||||
buffer = new ByteBuffer();
|
||||
const testFloat = [-999.5, -99.5, 0, 99.5, 999.5];
|
||||
testFloat.forEach((value) => {
|
||||
buffer.writeFloat(value);
|
||||
assert(buffer.readFloat() == value);
|
||||
});
|
||||
|
||||
// double
|
||||
buffer = new ByteBuffer();
|
||||
const testDouble = [-999.5, -99.5, 0, 99.5, 999.5];
|
||||
testDouble.forEach((value) => {
|
||||
buffer.writeDouble(value);
|
||||
assert(buffer.readDouble() == value);
|
||||
});
|
||||
|
||||
// string
|
||||
buffer = new ByteBuffer();
|
||||
const testString = 'hello world!';
|
||||
buffer.writeString(testString);
|
||||
assert(buffer.readString() == testString);
|
||||
|
||||
// char
|
||||
buffer = new ByteBuffer();
|
||||
const testChar = 'h';
|
||||
buffer.writeChar(testString);
|
||||
assert(buffer.readChar() == testChar);
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "zfoo-typescript",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "main.ts",
|
||||
"devDependencies": {
|
||||
"@types/node": "^17.0.39",
|
||||
"ts-node": "^10.8.1",
|
||||
"typescript": "^4.7.3"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user