From e122b39a21a5993182de37184044f29c96c9e1c2 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Mon, 18 Oct 2021 18:19:13 +0800 Subject: [PATCH] =?UTF-8?q?feat[protocol]:=20=E6=94=AF=E6=8C=81godot?= =?UTF-8?q?=E7=9A=84GdScript=EF=BC=8C=E5=A2=9E=E5=8A=A0GdScript=E7=9A=84?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- protocol/gdProtocol/ProtocolManager.gd | 33 + protocol/gdProtocol/buffer/ByteBuffer.gd | 661 ++++++++++++++++++ protocol/gdProtocol/packet/ComplexObject.gd | 395 +++++++++++ protocol/gdProtocol/packet/NormalObject.gd | 87 +++ protocol/gdProtocol/packet/ObjectA.gd | 27 + protocol/gdProtocol/packet/ObjectB.gd | 19 + protocol/gdProtocol/packet/SimpleObject.gd | 23 + .../test/resources/gdTest/GdProtocolTest.gd | 103 +++ .../gdTest/gdProtocol/ProtocolManager.gd | 33 + .../gdTest/gdProtocol/buffer/ByteBuffer.gd | 661 ++++++++++++++++++ .../gdTest/gdProtocol/packet/ComplexObject.gd | 395 +++++++++++ .../gdTest/gdProtocol/packet/NormalObject.gd | 87 +++ .../gdTest/gdProtocol/packet/ObjectA.gd | 27 + .../gdTest/gdProtocol/packet/ObjectB.gd | 19 + .../gdTest/gdProtocol/packet/SimpleObject.gd | 23 + 15 files changed, 2593 insertions(+) create mode 100644 protocol/gdProtocol/ProtocolManager.gd create mode 100644 protocol/gdProtocol/buffer/ByteBuffer.gd create mode 100644 protocol/gdProtocol/packet/ComplexObject.gd create mode 100644 protocol/gdProtocol/packet/NormalObject.gd create mode 100644 protocol/gdProtocol/packet/ObjectA.gd create mode 100644 protocol/gdProtocol/packet/ObjectB.gd create mode 100644 protocol/gdProtocol/packet/SimpleObject.gd create mode 100644 protocol/src/test/resources/gdTest/GdProtocolTest.gd create mode 100644 protocol/src/test/resources/gdTest/gdProtocol/ProtocolManager.gd create mode 100644 protocol/src/test/resources/gdTest/gdProtocol/buffer/ByteBuffer.gd create mode 100644 protocol/src/test/resources/gdTest/gdProtocol/packet/ComplexObject.gd create mode 100644 protocol/src/test/resources/gdTest/gdProtocol/packet/NormalObject.gd create mode 100644 protocol/src/test/resources/gdTest/gdProtocol/packet/ObjectA.gd create mode 100644 protocol/src/test/resources/gdTest/gdProtocol/packet/ObjectB.gd create mode 100644 protocol/src/test/resources/gdTest/gdProtocol/packet/SimpleObject.gd diff --git a/protocol/gdProtocol/ProtocolManager.gd b/protocol/gdProtocol/ProtocolManager.gd new file mode 100644 index 00000000..98809106 --- /dev/null +++ b/protocol/gdProtocol/ProtocolManager.gd @@ -0,0 +1,33 @@ +const ComplexObject = preload("res://gdProtocol/packet/ComplexObject.gd") +const NormalObject = preload("res://gdProtocol/packet/NormalObject.gd") +const ObjectA = preload("res://gdProtocol/packet/ObjectA.gd") +const ObjectB = preload("res://gdProtocol/packet/ObjectB.gd") +const SimpleObject = preload("res://gdProtocol/packet/SimpleObject.gd") + +const protocols = {} + +static func getProtocol(protocolId: int): + return protocols[protocolId] + +static func newInstance(protocolId: int): + var protocol = protocols[protocolId] + return protocol.new() + +static func write(buffer, packet): + var protocolId: int = packet.PROTOCOL_ID + buffer.writeShort(protocolId) + var protocol = protocols[protocolId] + protocol.write(buffer, packet) + +static func read(buffer): + var protocolId = buffer.readShort(); + var protocol = protocols[protocolId] + var packet = protocol.read(buffer); + return packet; + +static func initProtocol(): + protocols[100] = ComplexObject + protocols[101] = NormalObject + protocols[102] = ObjectA + protocols[103] = ObjectB + protocols[104] = SimpleObject diff --git a/protocol/gdProtocol/buffer/ByteBuffer.gd b/protocol/gdProtocol/buffer/ByteBuffer.gd new file mode 100644 index 00000000..8186a2af --- /dev/null +++ b/protocol/gdProtocol/buffer/ByteBuffer.gd @@ -0,0 +1,661 @@ +const ProtocolManager = preload("res://gdProtocol/ProtocolManager.gd") + +const EMPTY: String = "" + +var buffer = StreamPeerBuffer.new() + +var writeOffset: int = 0 setget setWriteOffset, getWriteOffset +var readOffset: int = 0 setget setReadOffset, getReadOffset + +func _init(): + buffer.big_endian = true + +# -------------------------------------------------get/set------------------------------------------------- +func setWriteOffset(writeIndex: int) -> void: + if (writeIndex > buffer.get_size()): + var template = "writeIndex[{}] out of bounds exception: readerIndex: {}, writerIndex: {} (expected: 0 <= readerIndex <= writerIndex <= capacity: {})" + printerr(template.format([writeIndex, readOffset, writeOffset, buffer.size()], "{}")) + return + writeOffset = writeIndex + +func getWriteOffset() -> int: + return writeOffset + +func setReadOffset(readIndex: int) -> void: + if (readIndex > writeOffset): + var template = "readIndex[{}] out of bounds exception: readerIndex: {}, writerIndex: {} (expected: 0 <= readerIndex <= writerIndex <= capacity: {})" + printerr(template.format([readIndex, readOffset, writeOffset, buffer.size()], "{}")) + return + readOffset = readIndex + +func getReadOffset() -> int: + return readOffset + +# -------------------------------------------------write/read------------------------------------------------- +func writePoolByteArray(value: PoolByteArray): + var length = value.size() + buffer.put_partial_data(value) + writeOffset += length + +func writeBool(value: bool) -> void: + var byte = 0 + if (value): + byte = 1 + buffer.seek(writeOffset) + buffer.put_8(byte) + writeOffset += 1 + +func readBool() -> bool: + buffer.seek(readOffset) + var byte = buffer.get_8() + readOffset += 1 + return byte == 1 + +func writeByte(value: int) -> void: + buffer.seek(writeOffset) + buffer.put_8(value) + writeOffset += 1 + +func readByte() -> int: + buffer.seek(readOffset) + var value = buffer.get_8() + readOffset += 1 + return value + +func writeShort(value: int) -> void: + buffer.seek(writeOffset) + buffer.put_16(value) + writeOffset += 2 + +func readShort() -> int: + buffer.seek(readOffset) + var value = buffer.get_16() + readOffset += 2 + return value + +func writeInt(value) -> void: + writeLong(value) + +func readInt() -> int: + return readLong() + +func writeLong(longValue: int) -> void: + var value = (longValue << 1) ^ (longValue >> 63) + + if (value >> 7 == 0): + writeByte(value) + return + + if (value >> 14 == 0): + writeByte(value | 0x80) + writeByte(value >> 7) + return + + if (value >> 21 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte(value >> 14) + return + + if (value >> 28 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte(value >> 21) + return + + if (value >> 35 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte(value >> 28) + return + + if (value >> 42 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte((value >> 28) | 0x80) + writeByte(value >> 35) + return + + if (value >> 49 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte((value >> 28) | 0x80) + writeByte((value >> 35) | 0x80) + writeByte(value >> 42) + return + + if (value >> 56 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte((value >> 28) | 0x80) + writeByte((value >> 35) | 0x80) + writeByte((value >> 42) | 0x80) + writeByte(value >> 49) + return + + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte((value >> 28) | 0x80) + writeByte((value >> 35) | 0x80) + writeByte((value >> 42) | 0x80) + writeByte((value >> 49) | 0x80) + writeByte(value >> 56) + +func readLong() -> int: + var byte: int = readByte() + var value: int = byte + if (byte < 0): + byte = readByte() + value = value & 0x00000000_0000007F | byte << 7 + if (byte < 0): + byte = readByte() + value = value & 0x00000000_00003FFF | byte << 14 + if (byte < 0): + byte = readByte() + value = value & 0x00000000_001FFFFF | byte << 21 + if (byte < 0): + byte = readByte() + value = value & 0x00000000_0FFFFFFF | byte << 28 + if (byte < 0): + byte = readByte() + value = value & 0x00000007_FFFFFFFF | byte << 35 + if (byte < 0): + byte = readByte() + value = value & 0x000003FF_FFFFFFFF | byte << 42 + if (byte < 0): + byte = readByte() + value = value & 0x0001FFFF_FFFFFFFF | byte << 49 + if (byte < 0): + byte = readByte() + value = value & 0x00FFFFFF_FFFFFFFF | byte << 56 + + var mask = value >> 1 + if (mask < 0): + mask = mask & 0x7FFFFFFF_FFFFFFFF + return mask ^ -(value & 1) + + +func writeFloat(value: float) -> void: + buffer.seek(writeOffset) + buffer.put_float(value) + writeOffset += 4 + +func readFloat() -> float: + buffer.seek(readOffset) + var value = buffer.get_float() + readOffset += 4 + return value + +func writeDouble(value: float) -> void: + buffer.seek(writeOffset) + buffer.put_double(value) + writeOffset += 8 + +func readDouble() -> float: + buffer.seek(readOffset) + var value = buffer.get_double() + readOffset += 8 + return value + + +func writeString(value: String) -> void: + if (value == null || value.length() ==0): + writeInt(0) + return + + buffer.seek(writeOffset) + + var strBytes = value.to_utf8() + var length = strBytes.size() + writeInt(length) + buffer.put_partial_data(strBytes) + writeOffset += length + +func readString() -> String: + var length = readInt() + if (length <= 0): + return EMPTY + + buffer.seek(readOffset) + var value = buffer.get_utf8_string(length) + var strBytes = value.to_utf8() + readOffset += length + return value + +func writeChar(value) -> void: + if (value == null || value.length() == 0): + writeString(EMPTY) + return + writeString(value[0]) + +func readChar() -> String: + return readString() + +func writePacketFlag(packet) -> bool: + var flag = (packet == null) + writeBool(!flag) + return flag + +func writePacket(packet, protocolId): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + protocolRegistration.write(self, packet) + +func readPacket(protocolId): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + return protocolRegistration.read(self) + +func newInstance(protocolId: int): + return ProtocolManager.newInstance(protocolId) + +func writeBooleanArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeBool(element) + +func readBooleanArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readBool()) + return array + +func writeByteArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeByte(element) + +func readByteArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readByte()) + return array + +func writeShortArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeShort(element) + +func readShortArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readShort()) + return array + +func writeIntArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeInt(element) + +func readIntArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readInt()) + return array + +func writeLongArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeLong(element) + +func readLongArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readLong()) + return array + +func writeFloatArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeFloat(element) + +func readFloatArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readFloat()) + return array + +func writeDoubleArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeDouble(element) + +func readDoubleArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readDouble()) + return array + +func writeCharArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeChar(element) + +func readCharArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readChar()) + return array + +func writeStringArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeString(element) + +func readStringArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readString()) + return array + + +func writePacketArray(value, protocolId): + if (value == null): + writeInt(0) + else: + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + writeInt(value.size()); + for element in value: + protocolRegistration.write(self, element) + +func readPacketArray(protocolId): + var array = [] + var size = readInt() + if (size > 0): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index in range(size): + array.append(protocolRegistration.read(self)) + return array + +func writeIntIntMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeInt(key) + writeInt(value[key]) + +func readIntIntMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readInt() + var value = readInt() + map[key] = value + return map + +func writeIntLongMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeInt(key) + writeLong(value[key]) + +func readIntLongMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readInt() + var value = readLong() + map[key] = value + return map + +func writeIntStringMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeInt(key) + writeString(value[key]) + +func readIntStringMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readInt() + var value = readString() + map[key] = value + return map + + +func writeIntPacketMap(value, protocolId): + if (value == null): + writeInt(0) + else: + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + writeInt(value.size()) + for key in value: + writeInt(key) + protocolRegistration.write(self, value[key]) + +func readIntPacketMap(protocolId): + var map = {} + var size = readInt() + if (size > 0): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index in range(size): + var key = readInt() + var value = protocolRegistration.read(self) + map[key] = value + return map + + +func writeLongIntMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeLong(key) + writeInt(value[key]) + +func readLongIntMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readLong() + var value = readInt() + map[key] = value + return map + +func writeLongLongMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeLong(key) + writeLong(value[key]) + +func readLongLongMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readLong() + var value = readLong() + map[key] = value + return map + +func writeLongStringMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeLong(key) + writeString(value[key]) + +func readLongStringMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readLong() + var value = readString() + map[key] = value + return map + + +func writeLongPacketMap(value, protocolId): + if (value == null): + writeInt(0) + else: + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + writeInt(value.size()) + for key in value: + writeLong(key) + protocolRegistration.write(self, value[key]) + +func readLongPacketMap(protocolId): + var map = {} + var size = readInt() + if (size > 0): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index in range(size): + var key = readLong() + var value = protocolRegistration.read(self) + map[key] = value + return map + + +func writeStringIntMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeString(key) + writeInt(value[key]) + +func readStringIntMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readString() + var value = readInt() + map[key] = value + return map + +func writeStringLongMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeString(key) + writeLong(value[key]) + +func readStringLongMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readString() + var value = readLong() + map[key] = value + return map + +func writeStringStringMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeString(key) + writeString(value[key]) + +func readStringStringMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readString() + var value = readString() + map[key] = value + return map + + +func writeStringPacketMap(value, protocolId): + if (value == null): + writeInt(0) + else: + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + writeInt(value.size()) + for key in value: + writeString(key) + protocolRegistration.write(self, value[key]) + +func readStringPacketMap(protocolId): + var map = {} + var size = readInt() + if (size > 0): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index in range(size): + var key = readString() + var value = protocolRegistration.read(self) + map[key] = value + return map diff --git a/protocol/gdProtocol/packet/ComplexObject.gd b/protocol/gdProtocol/packet/ComplexObject.gd new file mode 100644 index 00000000..c7017949 --- /dev/null +++ b/protocol/gdProtocol/packet/ComplexObject.gd @@ -0,0 +1,395 @@ +# 复杂的对象 +# 包括了各种复杂的结构,数组,List,Set,Map +# +# @author jaysunxiao +# @version 3.0 +# byte类型,最简单的整形 +var a # byte +# byte的包装类型 +# 优先使用基础类型,包装类型会有装箱拆箱 +var aa # java.lang.Byte +# 数组类型 +var aaa # byte[] +var aaaa # java.lang.Byte[] +var b # short +var bb # java.lang.Short +var bbb # short[] +var bbbb # java.lang.Short[] +var c # int +var cc # java.lang.Integer +var ccc # int[] +var cccc # java.lang.Integer[] +var d # long +var dd # java.lang.Long +var ddd # long[] +var dddd # java.lang.Long[] +var e # float +var ee # java.lang.Float +var eee # float[] +var eeee # java.lang.Float[] +var f # double +var ff # java.lang.Double +var fff # double[] +var ffff # java.lang.Double[] +var g # boolean +var gg # java.lang.Boolean +var ggg # boolean[] +var gggg # java.lang.Boolean[] +var h # char +var hh # java.lang.Character +var hhh # char[] +var hhhh # java.lang.Character[] +var jj # java.lang.String +var jjj # java.lang.String[] +var kk # com.zfoo.protocol.packet.ObjectA +var kkk # com.zfoo.protocol.packet.ObjectA[] +var l # java.util.List +var ll # java.util.List>> +var lll # java.util.List> +var llll # java.util.List +var lllll # java.util.List> +var m # java.util.Map +var mm # java.util.Map +var mmm # java.util.Map> +var mmmm # java.util.Map>, java.util.List>>> +var mmmmm # java.util.Map>, java.util.Set>> +var s # java.util.Set +var ss # java.util.Set>> +var sss # java.util.Set> +var ssss # java.util.Set +var sssss # java.util.Set> + +const PROTOCOL_ID = 100 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeByte(packet.a) + buffer.writeByte(packet.aa) + buffer.writeByteArray(packet.aaa) + buffer.writeByteArray(packet.aaaa) + buffer.writeShort(packet.b) + buffer.writeShort(packet.bb) + buffer.writeShortArray(packet.bbb) + buffer.writeShortArray(packet.bbbb) + buffer.writeInt(packet.c) + buffer.writeInt(packet.cc) + buffer.writeIntArray(packet.ccc) + buffer.writeIntArray(packet.cccc) + buffer.writeLong(packet.d) + buffer.writeLong(packet.dd) + buffer.writeLongArray(packet.ddd) + buffer.writeLongArray(packet.dddd) + buffer.writeFloat(packet.e) + buffer.writeFloat(packet.ee) + buffer.writeFloatArray(packet.eee) + buffer.writeFloatArray(packet.eeee) + buffer.writeDouble(packet.f) + buffer.writeDouble(packet.ff) + buffer.writeDoubleArray(packet.fff) + buffer.writeDoubleArray(packet.ffff) + buffer.writeBool(packet.g) + buffer.writeBool(packet.gg) + buffer.writeBooleanArray(packet.ggg) + buffer.writeBooleanArray(packet.gggg) + buffer.writeChar(packet.h) + buffer.writeChar(packet.hh) + buffer.writeCharArray(packet.hhh) + buffer.writeCharArray(packet.hhhh) + buffer.writeString(packet.jj) + buffer.writeStringArray(packet.jjj) + buffer.writePacket(packet.kk, 102) + buffer.writePacketArray(packet.kkk, 102) + buffer.writeIntArray(packet.l) + if (packet.ll == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.ll.size()) + for element0 in packet.ll: + if (element0 == null): + buffer.writeInt(0) + else: + buffer.writeInt(element0.size()) + for element1 in element0: + buffer.writeIntArray(element1) + if (packet.lll == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.lll.size()) + for element2 in packet.lll: + buffer.writePacketArray(element2, 102) + buffer.writeStringArray(packet.llll) + if (packet.lllll == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.lllll.size()) + for element3 in packet.lllll: + buffer.writeIntStringMap(element3) + buffer.writeIntStringMap(packet.m) + buffer.writeIntPacketMap(packet.mm, 102) + if (packet.mmm == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.mmm.size()) + for key4 in packet.mmm: + var value5 = packet.mmm[key4] + buffer.writePacket(key4, 102) + buffer.writeIntArray(value5) + if (packet.mmmm == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.mmmm.size()) + for key6 in packet.mmmm: + var value7 = packet.mmmm[key6] + if (key6 == null): + buffer.writeInt(0) + else: + buffer.writeInt(key6.size()) + for element8 in key6: + buffer.writePacketArray(element8, 102) + if (value7 == null): + buffer.writeInt(0) + else: + buffer.writeInt(value7.size()) + for element9 in value7: + if (element9 == null): + buffer.writeInt(0) + else: + buffer.writeInt(element9.size()) + for element10 in element9: + buffer.writeIntArray(element10) + if (packet.mmmmm == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.mmmmm.size()) + for key11 in packet.mmmmm: + var value12 = packet.mmmmm[key11] + if (key11 == null): + buffer.writeInt(0) + else: + buffer.writeInt(key11.size()) + for element13 in key11: + buffer.writeIntStringMap(element13) + if (value12 == null): + buffer.writeInt(0) + else: + buffer.writeInt(value12.size()) + for element14 in value12: + buffer.writeIntStringMap(element14) + buffer.writeIntArray(packet.s) + if (packet.ss == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.ss.size()) + for element15 in packet.ss: + if (element15 == null): + buffer.writeInt(0) + else: + buffer.writeInt(element15.size()) + for element16 in element15: + buffer.writeIntArray(element16) + if (packet.sss == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.sss.size()) + for element17 in packet.sss: + buffer.writePacketArray(element17, 102) + buffer.writeStringArray(packet.ssss) + if (packet.sssss == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.sssss.size()) + for element18 in packet.sssss: + buffer.writeIntStringMap(element18) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(100) + var result19 = buffer.readByte() + packet.a = result19 + var result20 = buffer.readByte() + packet.aa = result20 + var array21 = buffer.readByteArray() + packet.aaa = array21 + var array22 = buffer.readByteArray() + packet.aaaa = array22 + var result23 = buffer.readShort() + packet.b = result23 + var result24 = buffer.readShort() + packet.bb = result24 + var array25 = buffer.readShortArray() + packet.bbb = array25 + var array26 = buffer.readShortArray() + packet.bbbb = array26 + var result27 = buffer.readInt() + packet.c = result27 + var result28 = buffer.readInt() + packet.cc = result28 + var array29 = buffer.readIntArray() + packet.ccc = array29 + var array30 = buffer.readIntArray() + packet.cccc = array30 + var result31 = buffer.readLong() + packet.d = result31 + var result32 = buffer.readLong() + packet.dd = result32 + var array33 = buffer.readLongArray() + packet.ddd = array33 + var array34 = buffer.readLongArray() + packet.dddd = array34 + var result35 = buffer.readFloat() + packet.e = result35 + var result36 = buffer.readFloat() + packet.ee = result36 + var array37 = buffer.readFloatArray() + packet.eee = array37 + var array38 = buffer.readFloatArray() + packet.eeee = array38 + var result39 = buffer.readDouble() + packet.f = result39 + var result40 = buffer.readDouble() + packet.ff = result40 + var array41 = buffer.readDoubleArray() + packet.fff = array41 + var array42 = buffer.readDoubleArray() + packet.ffff = array42 + var result43 = buffer.readBool() + packet.g = result43 + var result44 = buffer.readBool() + packet.gg = result44 + var array45 = buffer.readBooleanArray() + packet.ggg = array45 + var array46 = buffer.readBooleanArray() + packet.gggg = array46 + var result47 = buffer.readChar() + packet.h = result47 + var result48 = buffer.readChar() + packet.hh = result48 + var array49 = buffer.readCharArray() + packet.hhh = array49 + var array50 = buffer.readCharArray() + packet.hhhh = array50 + var result51 = buffer.readString() + packet.jj = result51 + var array52 = buffer.readStringArray() + packet.jjj = array52 + var result53 = buffer.readPacket(102) + packet.kk = result53 + var array54 = buffer.readPacketArray(102) + packet.kkk = array54 + var list55 = buffer.readIntArray() + packet.l = list55 + var result56 = [] + var size58 = buffer.readInt() + if (size58 > 0): + for index57 in range(size58): + var result59 = [] + var size61 = buffer.readInt() + if (size61 > 0): + for index60 in range(size61): + var list62 = buffer.readIntArray() + result59.append(list62) + result56.append(result59) + packet.ll = result56 + var result63 = [] + var size65 = buffer.readInt() + if (size65 > 0): + for index64 in range(size65): + var list66 = buffer.readPacketArray(102) + result63.append(list66) + packet.lll = result63 + var list67 = buffer.readStringArray() + packet.llll = list67 + var result68 = [] + var size70 = buffer.readInt() + if (size70 > 0): + for index69 in range(size70): + var map71 = buffer.readIntStringMap() + result68.append(map71) + packet.lllll = result68 + var map72 = buffer.readIntStringMap() + packet.m = map72 + var map73 = buffer.readIntPacketMap(102) + packet.mm = map73 + var result74 = {} + var size75 = buffer.readInt() + if (size75 > 0): + for index76 in range(size75): + var result77 = buffer.readPacket(102) + var list78 = buffer.readIntArray() + result74[result77] = list78 + packet.mmm = result74 + var result79 = {} + var size80 = buffer.readInt() + if (size80 > 0): + for index81 in range(size80): + var result82 = [] + var size84 = buffer.readInt() + if (size84 > 0): + for index83 in range(size84): + var list85 = buffer.readPacketArray(102) + result82.append(list85) + var result86 = [] + var size88 = buffer.readInt() + if (size88 > 0): + for index87 in range(size88): + var result89 = [] + var size91 = buffer.readInt() + if (size91 > 0): + for index90 in range(size91): + var list92 = buffer.readIntArray() + result89.append(list92) + result86.append(result89) + result79[result82] = result86 + packet.mmmm = result79 + var result93 = {} + var size94 = buffer.readInt() + if (size94 > 0): + for index95 in range(size94): + var result96 = [] + var size98 = buffer.readInt() + if (size98 > 0): + for index97 in range(size98): + var map99 = buffer.readIntStringMap() + result96.append(map99) + var result100 = [] + var size102 = buffer.readInt() + if (size102 > 0): + for index101 in range(size102): + var map103 = buffer.readIntStringMap() + result100.append(map103) + result93[result96] = result100 + packet.mmmmm = result93 + var set104 = buffer.readIntArray() + packet.s = set104 + var result105 = [] + var size107 = buffer.readInt() + if (size107 > 0): + for index106 in range(size107): + var result108 = [] + var size110 = buffer.readInt() + if (size110 > 0): + for index109 in range(size110): + var list111 = buffer.readIntArray() + result108.append(list111) + result105.append(result108) + packet.ss = result105 + var result112 = [] + var size114 = buffer.readInt() + if (size114 > 0): + for index113 in range(size114): + var set115 = buffer.readPacketArray(102) + result112.append(set115) + packet.sss = result112 + var set116 = buffer.readStringArray() + packet.ssss = set116 + var result117 = [] + var size119 = buffer.readInt() + if (size119 > 0): + for index118 in range(size119): + var map120 = buffer.readIntStringMap() + result117.append(map120) + packet.sssss = result117 + return packet diff --git a/protocol/gdProtocol/packet/NormalObject.gd b/protocol/gdProtocol/packet/NormalObject.gd new file mode 100644 index 00000000..bd79a1b1 --- /dev/null +++ b/protocol/gdProtocol/packet/NormalObject.gd @@ -0,0 +1,87 @@ +# @author jaysunxiao +# @version 3.0 +var a # byte +var aaa # byte[] +var b # short +var c # int +var d # long +var e # float +var f # double +var g # boolean +var jj # java.lang.String +var kk # com.zfoo.protocol.packet.ObjectA +var l # java.util.List +var ll # java.util.List +var lll # java.util.List +var llll # java.util.List +var m # java.util.Map +var mm # java.util.Map +var s # java.util.Set +var ssss # java.util.Set + +const PROTOCOL_ID = 101 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeByte(packet.a) + buffer.writeByteArray(packet.aaa) + buffer.writeShort(packet.b) + buffer.writeInt(packet.c) + buffer.writeLong(packet.d) + buffer.writeFloat(packet.e) + buffer.writeDouble(packet.f) + buffer.writeBool(packet.g) + buffer.writeString(packet.jj) + buffer.writePacket(packet.kk, 102) + buffer.writeIntArray(packet.l) + buffer.writeLongArray(packet.ll) + buffer.writePacketArray(packet.lll, 102) + buffer.writeStringArray(packet.llll) + buffer.writeIntStringMap(packet.m) + buffer.writeIntPacketMap(packet.mm, 102) + buffer.writeIntArray(packet.s) + buffer.writeStringArray(packet.ssss) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(101) + var result0 = buffer.readByte() + packet.a = result0 + var array1 = buffer.readByteArray() + packet.aaa = array1 + var result2 = buffer.readShort() + packet.b = result2 + var result3 = buffer.readInt() + packet.c = result3 + var result4 = buffer.readLong() + packet.d = result4 + var result5 = buffer.readFloat() + packet.e = result5 + var result6 = buffer.readDouble() + packet.f = result6 + var result7 = buffer.readBool() + packet.g = result7 + var result8 = buffer.readString() + packet.jj = result8 + var result9 = buffer.readPacket(102) + packet.kk = result9 + var list10 = buffer.readIntArray() + packet.l = list10 + var list11 = buffer.readLongArray() + packet.ll = list11 + var list12 = buffer.readPacketArray(102) + packet.lll = list12 + var list13 = buffer.readStringArray() + packet.llll = list13 + var map14 = buffer.readIntStringMap() + packet.m = map14 + var map15 = buffer.readIntPacketMap(102) + packet.mm = map15 + var set16 = buffer.readIntArray() + packet.s = set16 + var set17 = buffer.readStringArray() + packet.ssss = set17 + return packet diff --git a/protocol/gdProtocol/packet/ObjectA.gd b/protocol/gdProtocol/packet/ObjectA.gd new file mode 100644 index 00000000..d83ee802 --- /dev/null +++ b/protocol/gdProtocol/packet/ObjectA.gd @@ -0,0 +1,27 @@ +# @author jaysunxiao +# @version 3.0 +var a # int +var m # java.util.Map +var objectB # com.zfoo.protocol.packet.ObjectB + +const PROTOCOL_ID = 102 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeInt(packet.a) + buffer.writeIntStringMap(packet.m) + buffer.writePacket(packet.objectB, 103) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(102) + var result0 = buffer.readInt() + packet.a = result0 + var map1 = buffer.readIntStringMap() + packet.m = map1 + var result2 = buffer.readPacket(103) + packet.objectB = result2 + return packet diff --git a/protocol/gdProtocol/packet/ObjectB.gd b/protocol/gdProtocol/packet/ObjectB.gd new file mode 100644 index 00000000..2aaad10a --- /dev/null +++ b/protocol/gdProtocol/packet/ObjectB.gd @@ -0,0 +1,19 @@ +# @author jaysunxiao +# @version 3.0 +var flag # boolean + +const PROTOCOL_ID = 103 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeBool(packet.flag) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(103) + var result0 = buffer.readBool() + packet.flag = result0 + return packet diff --git a/protocol/gdProtocol/packet/SimpleObject.gd b/protocol/gdProtocol/packet/SimpleObject.gd new file mode 100644 index 00000000..dc6f31c0 --- /dev/null +++ b/protocol/gdProtocol/packet/SimpleObject.gd @@ -0,0 +1,23 @@ +# @author jaysunxiao +# @version 3.0 +var c # int +var g # boolean + +const PROTOCOL_ID = 104 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeInt(packet.c) + buffer.writeBool(packet.g) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(104) + var result0 = buffer.readInt() + packet.c = result0 + var result1 = buffer.readBool() + packet.g = result1 + return packet diff --git a/protocol/src/test/resources/gdTest/GdProtocolTest.gd b/protocol/src/test/resources/gdTest/GdProtocolTest.gd new file mode 100644 index 00000000..789b634a --- /dev/null +++ b/protocol/src/test/resources/gdTest/GdProtocolTest.gd @@ -0,0 +1,103 @@ +extends Node2D + + +const ProtocolManager = preload("res://gdProtocol/ProtocolManager.gd") +const ByteBuffer = preload("res://gdProtocol/buffer/ByteBuffer.gd") +const FileUtils = preload("res://zfoo/util/FileUtils.gd") + +func _ready(): + var buffer = ByteBuffer.new() + + buffer.writeBool(true) + buffer.writeBool(false) + assert(true == buffer.readBool()) + assert(false == buffer.readBool()) + + buffer.writeByte(-128) + buffer.writeByte(99) + buffer.writeByte(127) + assert(-128 == buffer.readByte()) + assert(99 == buffer.readByte()) + assert(127 == buffer.readByte()) + + buffer.writeShort(-32768) + buffer.writeShort(0) + buffer.writeShort(32767) + assert(-32768 == buffer.readShort()) + assert(0 == buffer.readShort()) + assert(32767 == buffer.readShort()) + + buffer.writeInt(-2147483648) + buffer.writeInt(-999999) + buffer.writeInt(0) + buffer.writeInt(999999) + buffer.writeInt(2147483647) + assert(-2147483648 == buffer.readInt()) + assert(-999999 == buffer.readInt()) + assert(0 == buffer.readInt()) + assert(999999 == buffer.readInt()) + assert(2147483647 == buffer.readInt()) + + var maxLong = int("9223372036854775807") + var minLong = int("-9223372036854775808") + buffer.writeLong(maxLong) + buffer.writeLong(9999999999999999) + buffer.writeLong(99999999) + buffer.writeLong(0) + buffer.writeLong(-99999999) + buffer.writeLong(-9999999999999999) + buffer.writeLong(minLong) + + assert(maxLong == buffer.readLong()) + assert(9999999999999999 == buffer.readLong()) + assert(99999999 == buffer.readLong()) + assert(0 == buffer.readLong()) + assert(-99999999 == buffer.readLong()) + assert(-9999999999999999 == buffer.readLong()) + assert(minLong == buffer.readLong()) + + buffer.writeFloat(-1234.5678) + buffer.writeFloat(0) + buffer.writeFloat(1234.5678) + assert(abs(-1234.5678 - buffer.readFloat()) < 0.001) + assert(0 == buffer.readFloat()) + assert(abs(1234.5678 - buffer.readFloat()) < 0.001) + + buffer.writeDouble(-1234.5678) + buffer.writeDouble(0) + buffer.writeDouble(1234.5678) + assert(abs(-1234.5678 - buffer.readDouble()) < 0.001) + assert(0 == buffer.readDouble()) + assert(abs(1234.5678 - buffer.readDouble()) < 0.001) + + var strValue = "你好 hello world" + buffer.writeString(strValue) + assert(strValue == buffer.readString()) + + buffer.writeChar(strValue) + assert(strValue[0] == buffer.readChar()) + buffer.writeChar("") + assert(ByteBuffer.EMPTY == buffer.readChar()) + test() + + +func test(): + ProtocolManager.initProtocol() + var buffer = ByteBuffer.new() + var poolByteArray = FileUtils.readFileToByteArray("user://ComplexObject.bytes") + buffer.writePoolByteArray(poolByteArray) + + var packet = ProtocolManager.read(buffer) + print(packet) + + var newByteBuffer = ByteBuffer.new() + ProtocolManager.write(newByteBuffer, packet); + + var newPacket = ProtocolManager.read(newByteBuffer); + print(newPacket) + + + + + + diff --git a/protocol/src/test/resources/gdTest/gdProtocol/ProtocolManager.gd b/protocol/src/test/resources/gdTest/gdProtocol/ProtocolManager.gd new file mode 100644 index 00000000..98809106 --- /dev/null +++ b/protocol/src/test/resources/gdTest/gdProtocol/ProtocolManager.gd @@ -0,0 +1,33 @@ +const ComplexObject = preload("res://gdProtocol/packet/ComplexObject.gd") +const NormalObject = preload("res://gdProtocol/packet/NormalObject.gd") +const ObjectA = preload("res://gdProtocol/packet/ObjectA.gd") +const ObjectB = preload("res://gdProtocol/packet/ObjectB.gd") +const SimpleObject = preload("res://gdProtocol/packet/SimpleObject.gd") + +const protocols = {} + +static func getProtocol(protocolId: int): + return protocols[protocolId] + +static func newInstance(protocolId: int): + var protocol = protocols[protocolId] + return protocol.new() + +static func write(buffer, packet): + var protocolId: int = packet.PROTOCOL_ID + buffer.writeShort(protocolId) + var protocol = protocols[protocolId] + protocol.write(buffer, packet) + +static func read(buffer): + var protocolId = buffer.readShort(); + var protocol = protocols[protocolId] + var packet = protocol.read(buffer); + return packet; + +static func initProtocol(): + protocols[100] = ComplexObject + protocols[101] = NormalObject + protocols[102] = ObjectA + protocols[103] = ObjectB + protocols[104] = SimpleObject diff --git a/protocol/src/test/resources/gdTest/gdProtocol/buffer/ByteBuffer.gd b/protocol/src/test/resources/gdTest/gdProtocol/buffer/ByteBuffer.gd new file mode 100644 index 00000000..8186a2af --- /dev/null +++ b/protocol/src/test/resources/gdTest/gdProtocol/buffer/ByteBuffer.gd @@ -0,0 +1,661 @@ +const ProtocolManager = preload("res://gdProtocol/ProtocolManager.gd") + +const EMPTY: String = "" + +var buffer = StreamPeerBuffer.new() + +var writeOffset: int = 0 setget setWriteOffset, getWriteOffset +var readOffset: int = 0 setget setReadOffset, getReadOffset + +func _init(): + buffer.big_endian = true + +# -------------------------------------------------get/set------------------------------------------------- +func setWriteOffset(writeIndex: int) -> void: + if (writeIndex > buffer.get_size()): + var template = "writeIndex[{}] out of bounds exception: readerIndex: {}, writerIndex: {} (expected: 0 <= readerIndex <= writerIndex <= capacity: {})" + printerr(template.format([writeIndex, readOffset, writeOffset, buffer.size()], "{}")) + return + writeOffset = writeIndex + +func getWriteOffset() -> int: + return writeOffset + +func setReadOffset(readIndex: int) -> void: + if (readIndex > writeOffset): + var template = "readIndex[{}] out of bounds exception: readerIndex: {}, writerIndex: {} (expected: 0 <= readerIndex <= writerIndex <= capacity: {})" + printerr(template.format([readIndex, readOffset, writeOffset, buffer.size()], "{}")) + return + readOffset = readIndex + +func getReadOffset() -> int: + return readOffset + +# -------------------------------------------------write/read------------------------------------------------- +func writePoolByteArray(value: PoolByteArray): + var length = value.size() + buffer.put_partial_data(value) + writeOffset += length + +func writeBool(value: bool) -> void: + var byte = 0 + if (value): + byte = 1 + buffer.seek(writeOffset) + buffer.put_8(byte) + writeOffset += 1 + +func readBool() -> bool: + buffer.seek(readOffset) + var byte = buffer.get_8() + readOffset += 1 + return byte == 1 + +func writeByte(value: int) -> void: + buffer.seek(writeOffset) + buffer.put_8(value) + writeOffset += 1 + +func readByte() -> int: + buffer.seek(readOffset) + var value = buffer.get_8() + readOffset += 1 + return value + +func writeShort(value: int) -> void: + buffer.seek(writeOffset) + buffer.put_16(value) + writeOffset += 2 + +func readShort() -> int: + buffer.seek(readOffset) + var value = buffer.get_16() + readOffset += 2 + return value + +func writeInt(value) -> void: + writeLong(value) + +func readInt() -> int: + return readLong() + +func writeLong(longValue: int) -> void: + var value = (longValue << 1) ^ (longValue >> 63) + + if (value >> 7 == 0): + writeByte(value) + return + + if (value >> 14 == 0): + writeByte(value | 0x80) + writeByte(value >> 7) + return + + if (value >> 21 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte(value >> 14) + return + + if (value >> 28 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte(value >> 21) + return + + if (value >> 35 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte(value >> 28) + return + + if (value >> 42 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte((value >> 28) | 0x80) + writeByte(value >> 35) + return + + if (value >> 49 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte((value >> 28) | 0x80) + writeByte((value >> 35) | 0x80) + writeByte(value >> 42) + return + + if (value >> 56 == 0): + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte((value >> 28) | 0x80) + writeByte((value >> 35) | 0x80) + writeByte((value >> 42) | 0x80) + writeByte(value >> 49) + return + + writeByte(value | 0x80) + writeByte((value >> 7) | 0x80) + writeByte((value >> 14) | 0x80) + writeByte((value >> 21) | 0x80) + writeByte((value >> 28) | 0x80) + writeByte((value >> 35) | 0x80) + writeByte((value >> 42) | 0x80) + writeByte((value >> 49) | 0x80) + writeByte(value >> 56) + +func readLong() -> int: + var byte: int = readByte() + var value: int = byte + if (byte < 0): + byte = readByte() + value = value & 0x00000000_0000007F | byte << 7 + if (byte < 0): + byte = readByte() + value = value & 0x00000000_00003FFF | byte << 14 + if (byte < 0): + byte = readByte() + value = value & 0x00000000_001FFFFF | byte << 21 + if (byte < 0): + byte = readByte() + value = value & 0x00000000_0FFFFFFF | byte << 28 + if (byte < 0): + byte = readByte() + value = value & 0x00000007_FFFFFFFF | byte << 35 + if (byte < 0): + byte = readByte() + value = value & 0x000003FF_FFFFFFFF | byte << 42 + if (byte < 0): + byte = readByte() + value = value & 0x0001FFFF_FFFFFFFF | byte << 49 + if (byte < 0): + byte = readByte() + value = value & 0x00FFFFFF_FFFFFFFF | byte << 56 + + var mask = value >> 1 + if (mask < 0): + mask = mask & 0x7FFFFFFF_FFFFFFFF + return mask ^ -(value & 1) + + +func writeFloat(value: float) -> void: + buffer.seek(writeOffset) + buffer.put_float(value) + writeOffset += 4 + +func readFloat() -> float: + buffer.seek(readOffset) + var value = buffer.get_float() + readOffset += 4 + return value + +func writeDouble(value: float) -> void: + buffer.seek(writeOffset) + buffer.put_double(value) + writeOffset += 8 + +func readDouble() -> float: + buffer.seek(readOffset) + var value = buffer.get_double() + readOffset += 8 + return value + + +func writeString(value: String) -> void: + if (value == null || value.length() ==0): + writeInt(0) + return + + buffer.seek(writeOffset) + + var strBytes = value.to_utf8() + var length = strBytes.size() + writeInt(length) + buffer.put_partial_data(strBytes) + writeOffset += length + +func readString() -> String: + var length = readInt() + if (length <= 0): + return EMPTY + + buffer.seek(readOffset) + var value = buffer.get_utf8_string(length) + var strBytes = value.to_utf8() + readOffset += length + return value + +func writeChar(value) -> void: + if (value == null || value.length() == 0): + writeString(EMPTY) + return + writeString(value[0]) + +func readChar() -> String: + return readString() + +func writePacketFlag(packet) -> bool: + var flag = (packet == null) + writeBool(!flag) + return flag + +func writePacket(packet, protocolId): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + protocolRegistration.write(self, packet) + +func readPacket(protocolId): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + return protocolRegistration.read(self) + +func newInstance(protocolId: int): + return ProtocolManager.newInstance(protocolId) + +func writeBooleanArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeBool(element) + +func readBooleanArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readBool()) + return array + +func writeByteArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeByte(element) + +func readByteArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readByte()) + return array + +func writeShortArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeShort(element) + +func readShortArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readShort()) + return array + +func writeIntArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeInt(element) + +func readIntArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readInt()) + return array + +func writeLongArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeLong(element) + +func readLongArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readLong()) + return array + +func writeFloatArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeFloat(element) + +func readFloatArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readFloat()) + return array + +func writeDoubleArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeDouble(element) + +func readDoubleArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readDouble()) + return array + +func writeCharArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeChar(element) + +func readCharArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readChar()) + return array + +func writeStringArray(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()); + for element in value: + writeString(element) + +func readStringArray(): + var array = [] + var size = readInt() + if (size > 0): + for index in range(size): + array.append(readString()) + return array + + +func writePacketArray(value, protocolId): + if (value == null): + writeInt(0) + else: + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + writeInt(value.size()); + for element in value: + protocolRegistration.write(self, element) + +func readPacketArray(protocolId): + var array = [] + var size = readInt() + if (size > 0): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index in range(size): + array.append(protocolRegistration.read(self)) + return array + +func writeIntIntMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeInt(key) + writeInt(value[key]) + +func readIntIntMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readInt() + var value = readInt() + map[key] = value + return map + +func writeIntLongMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeInt(key) + writeLong(value[key]) + +func readIntLongMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readInt() + var value = readLong() + map[key] = value + return map + +func writeIntStringMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeInt(key) + writeString(value[key]) + +func readIntStringMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readInt() + var value = readString() + map[key] = value + return map + + +func writeIntPacketMap(value, protocolId): + if (value == null): + writeInt(0) + else: + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + writeInt(value.size()) + for key in value: + writeInt(key) + protocolRegistration.write(self, value[key]) + +func readIntPacketMap(protocolId): + var map = {} + var size = readInt() + if (size > 0): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index in range(size): + var key = readInt() + var value = protocolRegistration.read(self) + map[key] = value + return map + + +func writeLongIntMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeLong(key) + writeInt(value[key]) + +func readLongIntMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readLong() + var value = readInt() + map[key] = value + return map + +func writeLongLongMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeLong(key) + writeLong(value[key]) + +func readLongLongMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readLong() + var value = readLong() + map[key] = value + return map + +func writeLongStringMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeLong(key) + writeString(value[key]) + +func readLongStringMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readLong() + var value = readString() + map[key] = value + return map + + +func writeLongPacketMap(value, protocolId): + if (value == null): + writeInt(0) + else: + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + writeInt(value.size()) + for key in value: + writeLong(key) + protocolRegistration.write(self, value[key]) + +func readLongPacketMap(protocolId): + var map = {} + var size = readInt() + if (size > 0): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index in range(size): + var key = readLong() + var value = protocolRegistration.read(self) + map[key] = value + return map + + +func writeStringIntMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeString(key) + writeInt(value[key]) + +func readStringIntMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readString() + var value = readInt() + map[key] = value + return map + +func writeStringLongMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeString(key) + writeLong(value[key]) + +func readStringLongMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readString() + var value = readLong() + map[key] = value + return map + +func writeStringStringMap(value): + if (value == null): + writeInt(0) + else: + writeInt(value.size()) + for key in value: + writeString(key) + writeString(value[key]) + +func readStringStringMap(): + var map = {} + var size = readInt() + if (size > 0): + for index in range(size): + var key = readString() + var value = readString() + map[key] = value + return map + + +func writeStringPacketMap(value, protocolId): + if (value == null): + writeInt(0) + else: + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + writeInt(value.size()) + for key in value: + writeString(key) + protocolRegistration.write(self, value[key]) + +func readStringPacketMap(protocolId): + var map = {} + var size = readInt() + if (size > 0): + var protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index in range(size): + var key = readString() + var value = protocolRegistration.read(self) + map[key] = value + return map diff --git a/protocol/src/test/resources/gdTest/gdProtocol/packet/ComplexObject.gd b/protocol/src/test/resources/gdTest/gdProtocol/packet/ComplexObject.gd new file mode 100644 index 00000000..c7017949 --- /dev/null +++ b/protocol/src/test/resources/gdTest/gdProtocol/packet/ComplexObject.gd @@ -0,0 +1,395 @@ +# 复杂的对象 +# 包括了各种复杂的结构,数组,List,Set,Map +# +# @author jaysunxiao +# @version 3.0 +# byte类型,最简单的整形 +var a # byte +# byte的包装类型 +# 优先使用基础类型,包装类型会有装箱拆箱 +var aa # java.lang.Byte +# 数组类型 +var aaa # byte[] +var aaaa # java.lang.Byte[] +var b # short +var bb # java.lang.Short +var bbb # short[] +var bbbb # java.lang.Short[] +var c # int +var cc # java.lang.Integer +var ccc # int[] +var cccc # java.lang.Integer[] +var d # long +var dd # java.lang.Long +var ddd # long[] +var dddd # java.lang.Long[] +var e # float +var ee # java.lang.Float +var eee # float[] +var eeee # java.lang.Float[] +var f # double +var ff # java.lang.Double +var fff # double[] +var ffff # java.lang.Double[] +var g # boolean +var gg # java.lang.Boolean +var ggg # boolean[] +var gggg # java.lang.Boolean[] +var h # char +var hh # java.lang.Character +var hhh # char[] +var hhhh # java.lang.Character[] +var jj # java.lang.String +var jjj # java.lang.String[] +var kk # com.zfoo.protocol.packet.ObjectA +var kkk # com.zfoo.protocol.packet.ObjectA[] +var l # java.util.List +var ll # java.util.List>> +var lll # java.util.List> +var llll # java.util.List +var lllll # java.util.List> +var m # java.util.Map +var mm # java.util.Map +var mmm # java.util.Map> +var mmmm # java.util.Map>, java.util.List>>> +var mmmmm # java.util.Map>, java.util.Set>> +var s # java.util.Set +var ss # java.util.Set>> +var sss # java.util.Set> +var ssss # java.util.Set +var sssss # java.util.Set> + +const PROTOCOL_ID = 100 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeByte(packet.a) + buffer.writeByte(packet.aa) + buffer.writeByteArray(packet.aaa) + buffer.writeByteArray(packet.aaaa) + buffer.writeShort(packet.b) + buffer.writeShort(packet.bb) + buffer.writeShortArray(packet.bbb) + buffer.writeShortArray(packet.bbbb) + buffer.writeInt(packet.c) + buffer.writeInt(packet.cc) + buffer.writeIntArray(packet.ccc) + buffer.writeIntArray(packet.cccc) + buffer.writeLong(packet.d) + buffer.writeLong(packet.dd) + buffer.writeLongArray(packet.ddd) + buffer.writeLongArray(packet.dddd) + buffer.writeFloat(packet.e) + buffer.writeFloat(packet.ee) + buffer.writeFloatArray(packet.eee) + buffer.writeFloatArray(packet.eeee) + buffer.writeDouble(packet.f) + buffer.writeDouble(packet.ff) + buffer.writeDoubleArray(packet.fff) + buffer.writeDoubleArray(packet.ffff) + buffer.writeBool(packet.g) + buffer.writeBool(packet.gg) + buffer.writeBooleanArray(packet.ggg) + buffer.writeBooleanArray(packet.gggg) + buffer.writeChar(packet.h) + buffer.writeChar(packet.hh) + buffer.writeCharArray(packet.hhh) + buffer.writeCharArray(packet.hhhh) + buffer.writeString(packet.jj) + buffer.writeStringArray(packet.jjj) + buffer.writePacket(packet.kk, 102) + buffer.writePacketArray(packet.kkk, 102) + buffer.writeIntArray(packet.l) + if (packet.ll == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.ll.size()) + for element0 in packet.ll: + if (element0 == null): + buffer.writeInt(0) + else: + buffer.writeInt(element0.size()) + for element1 in element0: + buffer.writeIntArray(element1) + if (packet.lll == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.lll.size()) + for element2 in packet.lll: + buffer.writePacketArray(element2, 102) + buffer.writeStringArray(packet.llll) + if (packet.lllll == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.lllll.size()) + for element3 in packet.lllll: + buffer.writeIntStringMap(element3) + buffer.writeIntStringMap(packet.m) + buffer.writeIntPacketMap(packet.mm, 102) + if (packet.mmm == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.mmm.size()) + for key4 in packet.mmm: + var value5 = packet.mmm[key4] + buffer.writePacket(key4, 102) + buffer.writeIntArray(value5) + if (packet.mmmm == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.mmmm.size()) + for key6 in packet.mmmm: + var value7 = packet.mmmm[key6] + if (key6 == null): + buffer.writeInt(0) + else: + buffer.writeInt(key6.size()) + for element8 in key6: + buffer.writePacketArray(element8, 102) + if (value7 == null): + buffer.writeInt(0) + else: + buffer.writeInt(value7.size()) + for element9 in value7: + if (element9 == null): + buffer.writeInt(0) + else: + buffer.writeInt(element9.size()) + for element10 in element9: + buffer.writeIntArray(element10) + if (packet.mmmmm == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.mmmmm.size()) + for key11 in packet.mmmmm: + var value12 = packet.mmmmm[key11] + if (key11 == null): + buffer.writeInt(0) + else: + buffer.writeInt(key11.size()) + for element13 in key11: + buffer.writeIntStringMap(element13) + if (value12 == null): + buffer.writeInt(0) + else: + buffer.writeInt(value12.size()) + for element14 in value12: + buffer.writeIntStringMap(element14) + buffer.writeIntArray(packet.s) + if (packet.ss == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.ss.size()) + for element15 in packet.ss: + if (element15 == null): + buffer.writeInt(0) + else: + buffer.writeInt(element15.size()) + for element16 in element15: + buffer.writeIntArray(element16) + if (packet.sss == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.sss.size()) + for element17 in packet.sss: + buffer.writePacketArray(element17, 102) + buffer.writeStringArray(packet.ssss) + if (packet.sssss == null): + buffer.writeInt(0) + else: + buffer.writeInt(packet.sssss.size()) + for element18 in packet.sssss: + buffer.writeIntStringMap(element18) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(100) + var result19 = buffer.readByte() + packet.a = result19 + var result20 = buffer.readByte() + packet.aa = result20 + var array21 = buffer.readByteArray() + packet.aaa = array21 + var array22 = buffer.readByteArray() + packet.aaaa = array22 + var result23 = buffer.readShort() + packet.b = result23 + var result24 = buffer.readShort() + packet.bb = result24 + var array25 = buffer.readShortArray() + packet.bbb = array25 + var array26 = buffer.readShortArray() + packet.bbbb = array26 + var result27 = buffer.readInt() + packet.c = result27 + var result28 = buffer.readInt() + packet.cc = result28 + var array29 = buffer.readIntArray() + packet.ccc = array29 + var array30 = buffer.readIntArray() + packet.cccc = array30 + var result31 = buffer.readLong() + packet.d = result31 + var result32 = buffer.readLong() + packet.dd = result32 + var array33 = buffer.readLongArray() + packet.ddd = array33 + var array34 = buffer.readLongArray() + packet.dddd = array34 + var result35 = buffer.readFloat() + packet.e = result35 + var result36 = buffer.readFloat() + packet.ee = result36 + var array37 = buffer.readFloatArray() + packet.eee = array37 + var array38 = buffer.readFloatArray() + packet.eeee = array38 + var result39 = buffer.readDouble() + packet.f = result39 + var result40 = buffer.readDouble() + packet.ff = result40 + var array41 = buffer.readDoubleArray() + packet.fff = array41 + var array42 = buffer.readDoubleArray() + packet.ffff = array42 + var result43 = buffer.readBool() + packet.g = result43 + var result44 = buffer.readBool() + packet.gg = result44 + var array45 = buffer.readBooleanArray() + packet.ggg = array45 + var array46 = buffer.readBooleanArray() + packet.gggg = array46 + var result47 = buffer.readChar() + packet.h = result47 + var result48 = buffer.readChar() + packet.hh = result48 + var array49 = buffer.readCharArray() + packet.hhh = array49 + var array50 = buffer.readCharArray() + packet.hhhh = array50 + var result51 = buffer.readString() + packet.jj = result51 + var array52 = buffer.readStringArray() + packet.jjj = array52 + var result53 = buffer.readPacket(102) + packet.kk = result53 + var array54 = buffer.readPacketArray(102) + packet.kkk = array54 + var list55 = buffer.readIntArray() + packet.l = list55 + var result56 = [] + var size58 = buffer.readInt() + if (size58 > 0): + for index57 in range(size58): + var result59 = [] + var size61 = buffer.readInt() + if (size61 > 0): + for index60 in range(size61): + var list62 = buffer.readIntArray() + result59.append(list62) + result56.append(result59) + packet.ll = result56 + var result63 = [] + var size65 = buffer.readInt() + if (size65 > 0): + for index64 in range(size65): + var list66 = buffer.readPacketArray(102) + result63.append(list66) + packet.lll = result63 + var list67 = buffer.readStringArray() + packet.llll = list67 + var result68 = [] + var size70 = buffer.readInt() + if (size70 > 0): + for index69 in range(size70): + var map71 = buffer.readIntStringMap() + result68.append(map71) + packet.lllll = result68 + var map72 = buffer.readIntStringMap() + packet.m = map72 + var map73 = buffer.readIntPacketMap(102) + packet.mm = map73 + var result74 = {} + var size75 = buffer.readInt() + if (size75 > 0): + for index76 in range(size75): + var result77 = buffer.readPacket(102) + var list78 = buffer.readIntArray() + result74[result77] = list78 + packet.mmm = result74 + var result79 = {} + var size80 = buffer.readInt() + if (size80 > 0): + for index81 in range(size80): + var result82 = [] + var size84 = buffer.readInt() + if (size84 > 0): + for index83 in range(size84): + var list85 = buffer.readPacketArray(102) + result82.append(list85) + var result86 = [] + var size88 = buffer.readInt() + if (size88 > 0): + for index87 in range(size88): + var result89 = [] + var size91 = buffer.readInt() + if (size91 > 0): + for index90 in range(size91): + var list92 = buffer.readIntArray() + result89.append(list92) + result86.append(result89) + result79[result82] = result86 + packet.mmmm = result79 + var result93 = {} + var size94 = buffer.readInt() + if (size94 > 0): + for index95 in range(size94): + var result96 = [] + var size98 = buffer.readInt() + if (size98 > 0): + for index97 in range(size98): + var map99 = buffer.readIntStringMap() + result96.append(map99) + var result100 = [] + var size102 = buffer.readInt() + if (size102 > 0): + for index101 in range(size102): + var map103 = buffer.readIntStringMap() + result100.append(map103) + result93[result96] = result100 + packet.mmmmm = result93 + var set104 = buffer.readIntArray() + packet.s = set104 + var result105 = [] + var size107 = buffer.readInt() + if (size107 > 0): + for index106 in range(size107): + var result108 = [] + var size110 = buffer.readInt() + if (size110 > 0): + for index109 in range(size110): + var list111 = buffer.readIntArray() + result108.append(list111) + result105.append(result108) + packet.ss = result105 + var result112 = [] + var size114 = buffer.readInt() + if (size114 > 0): + for index113 in range(size114): + var set115 = buffer.readPacketArray(102) + result112.append(set115) + packet.sss = result112 + var set116 = buffer.readStringArray() + packet.ssss = set116 + var result117 = [] + var size119 = buffer.readInt() + if (size119 > 0): + for index118 in range(size119): + var map120 = buffer.readIntStringMap() + result117.append(map120) + packet.sssss = result117 + return packet diff --git a/protocol/src/test/resources/gdTest/gdProtocol/packet/NormalObject.gd b/protocol/src/test/resources/gdTest/gdProtocol/packet/NormalObject.gd new file mode 100644 index 00000000..bd79a1b1 --- /dev/null +++ b/protocol/src/test/resources/gdTest/gdProtocol/packet/NormalObject.gd @@ -0,0 +1,87 @@ +# @author jaysunxiao +# @version 3.0 +var a # byte +var aaa # byte[] +var b # short +var c # int +var d # long +var e # float +var f # double +var g # boolean +var jj # java.lang.String +var kk # com.zfoo.protocol.packet.ObjectA +var l # java.util.List +var ll # java.util.List +var lll # java.util.List +var llll # java.util.List +var m # java.util.Map +var mm # java.util.Map +var s # java.util.Set +var ssss # java.util.Set + +const PROTOCOL_ID = 101 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeByte(packet.a) + buffer.writeByteArray(packet.aaa) + buffer.writeShort(packet.b) + buffer.writeInt(packet.c) + buffer.writeLong(packet.d) + buffer.writeFloat(packet.e) + buffer.writeDouble(packet.f) + buffer.writeBool(packet.g) + buffer.writeString(packet.jj) + buffer.writePacket(packet.kk, 102) + buffer.writeIntArray(packet.l) + buffer.writeLongArray(packet.ll) + buffer.writePacketArray(packet.lll, 102) + buffer.writeStringArray(packet.llll) + buffer.writeIntStringMap(packet.m) + buffer.writeIntPacketMap(packet.mm, 102) + buffer.writeIntArray(packet.s) + buffer.writeStringArray(packet.ssss) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(101) + var result0 = buffer.readByte() + packet.a = result0 + var array1 = buffer.readByteArray() + packet.aaa = array1 + var result2 = buffer.readShort() + packet.b = result2 + var result3 = buffer.readInt() + packet.c = result3 + var result4 = buffer.readLong() + packet.d = result4 + var result5 = buffer.readFloat() + packet.e = result5 + var result6 = buffer.readDouble() + packet.f = result6 + var result7 = buffer.readBool() + packet.g = result7 + var result8 = buffer.readString() + packet.jj = result8 + var result9 = buffer.readPacket(102) + packet.kk = result9 + var list10 = buffer.readIntArray() + packet.l = list10 + var list11 = buffer.readLongArray() + packet.ll = list11 + var list12 = buffer.readPacketArray(102) + packet.lll = list12 + var list13 = buffer.readStringArray() + packet.llll = list13 + var map14 = buffer.readIntStringMap() + packet.m = map14 + var map15 = buffer.readIntPacketMap(102) + packet.mm = map15 + var set16 = buffer.readIntArray() + packet.s = set16 + var set17 = buffer.readStringArray() + packet.ssss = set17 + return packet diff --git a/protocol/src/test/resources/gdTest/gdProtocol/packet/ObjectA.gd b/protocol/src/test/resources/gdTest/gdProtocol/packet/ObjectA.gd new file mode 100644 index 00000000..d83ee802 --- /dev/null +++ b/protocol/src/test/resources/gdTest/gdProtocol/packet/ObjectA.gd @@ -0,0 +1,27 @@ +# @author jaysunxiao +# @version 3.0 +var a # int +var m # java.util.Map +var objectB # com.zfoo.protocol.packet.ObjectB + +const PROTOCOL_ID = 102 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeInt(packet.a) + buffer.writeIntStringMap(packet.m) + buffer.writePacket(packet.objectB, 103) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(102) + var result0 = buffer.readInt() + packet.a = result0 + var map1 = buffer.readIntStringMap() + packet.m = map1 + var result2 = buffer.readPacket(103) + packet.objectB = result2 + return packet diff --git a/protocol/src/test/resources/gdTest/gdProtocol/packet/ObjectB.gd b/protocol/src/test/resources/gdTest/gdProtocol/packet/ObjectB.gd new file mode 100644 index 00000000..2aaad10a --- /dev/null +++ b/protocol/src/test/resources/gdTest/gdProtocol/packet/ObjectB.gd @@ -0,0 +1,19 @@ +# @author jaysunxiao +# @version 3.0 +var flag # boolean + +const PROTOCOL_ID = 103 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeBool(packet.flag) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(103) + var result0 = buffer.readBool() + packet.flag = result0 + return packet diff --git a/protocol/src/test/resources/gdTest/gdProtocol/packet/SimpleObject.gd b/protocol/src/test/resources/gdTest/gdProtocol/packet/SimpleObject.gd new file mode 100644 index 00000000..dc6f31c0 --- /dev/null +++ b/protocol/src/test/resources/gdTest/gdProtocol/packet/SimpleObject.gd @@ -0,0 +1,23 @@ +# @author jaysunxiao +# @version 3.0 +var c # int +var g # boolean + +const PROTOCOL_ID = 104 + +static func write(buffer, packet): + if (buffer.writePacketFlag(packet)): + return + buffer.writeInt(packet.c) + buffer.writeBool(packet.g) + + +static func read(buffer): + if (!buffer.readBool()): + return null + var packet = buffer.newInstance(104) + var result0 = buffer.readInt() + packet.c = result0 + var result1 = buffer.readBool() + packet.g = result1 + return packet