From 78cb8bd2fc64136d6e96b7c5e7afe4fcea577d90 Mon Sep 17 00:00:00 2001 From: jaysunxiao Date: Sun, 22 May 2022 22:26:42 +0800 Subject: [PATCH] =?UTF-8?q?feat[protocol]:=20=E6=8F=90=E5=8D=87=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E7=9A=84=E5=85=BC=E5=AE=B9=E6=80=A7=EF=BC=8C=E5=8D=8F?= =?UTF-8?q?=E8=AE=AE=E5=90=91=E5=89=8D=E5=85=BC=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../protocol/registration/EnhanceUtils.java | 2 +- .../serializer/csharp/GenerateCsUtils.java | 17 +- .../serializer/gdscript/GenerateGdUtils.java | 6 + .../javascript/GenerateJsUtils.java | 7 +- .../serializer/lua/GenerateLuaUtils.java | 6 + .../resources/csharp/Buffer/ByteBuffer.cs | 8 +- .../resources/gdscript/buffer/ByteBuffer.gd | 3 + .../resources/javascript/buffer/ByteBuffer.js | 6 +- .../main/resources/lua/Buffer/ByteBuffer.lua | 4 + .../csharp/CsProtocol/Buffer/ByteBuffer.cs | 8 +- .../csharp/CsProtocol/Packet/ComplexObject.cs | 21 +- protocol/src/test/gdscript/GdProtocolTest.gd | 2 +- .../gdscript/gdProtocol/ProtocolManager.gd | 12 +- .../gdscript/gdProtocol/buffer/ByteBuffer.gd | 3 + .../gdProtocol/packet/ComplexObject.gd | 13 + protocol/src/test/javascript/main.spec.js | 4 +- .../test/javascript/zfoojs/ProtocolManager.js | 9 +- .../javascript/zfoojs/buffer/ByteBuffer.js | 74 +- .../javascript/zfoojs/packet/ComplexObject.js | 17 +- .../lua/LuaProtocol/Buffer/ByteBuffer.lua | 591 ++++++++- .../src/test/lua/LuaProtocol/Buffer/Long.lua | 2 +- .../lua/LuaProtocol/Packet/ComplexObject.lua | 1156 +++++------------ .../lua/LuaProtocol/Packet/NormalObject.lua | 391 +----- .../test/lua/LuaProtocol/Packet/ObjectA.lua | 51 +- .../test/lua/LuaProtocol/Packet/ObjectB.lua | 19 +- .../lua/LuaProtocol/Packet/SimpleObject.lua | 23 +- .../test/lua/LuaProtocol/ProtocolManager.lua | 47 +- protocol/src/test/lua/main.lua | 5 +- 28 files changed, 1192 insertions(+), 1315 deletions(-) diff --git a/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java b/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java index cd6afc90..077b1e98 100644 --- a/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/registration/EnhanceUtils.java @@ -235,7 +235,7 @@ public abstract class EnhanceUtils { var readObject = enhanceSerializer(fieldRegistration.serializer()).readObject(builder, field, fieldRegistration); // 协议向后兼容 if (field.isAnnotationPresent(Compatible.class)) { - builder.append(StringUtils.format("if(!$1.isReadable()){ return packet; }")); + builder.append("if(!$1.isReadable()){ return packet; }"); } if (Modifier.isPublic(field.getModifiers())) { diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/csharp/GenerateCsUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/csharp/GenerateCsUtils.java index cd3f2567..bb33da56 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/csharp/GenerateCsUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/csharp/GenerateCsUtils.java @@ -19,6 +19,7 @@ import com.zfoo.protocol.generate.GenerateProtocolFile; import com.zfoo.protocol.generate.GenerateProtocolPath; import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.ProtocolRegistration; +import com.zfoo.protocol.registration.anno.Compatible; import com.zfoo.protocol.serializer.reflect.*; import com.zfoo.protocol.util.ClassUtils; import com.zfoo.protocol.util.FileUtils; @@ -178,7 +179,7 @@ public abstract class GenerateCsUtils { var fields = registration.getFields(); var fieldRegistrations = registration.getFieldRegistrations(); var csBuilder = new StringBuilder(); - for (int i = 0; i < fields.length; i++) { + for (var i = 0; i < fields.length; i++) { var field = fields[i]; var fieldRegistration = fieldRegistrations[i]; csSerializer(fieldRegistration.serializer()).writeObject(csBuilder, "message." + field.getName(), 3, field, fieldRegistration); @@ -191,13 +192,17 @@ public abstract class GenerateCsUtils { var fields = registration.getFields(); var fieldRegistrations = registration.getFieldRegistrations(); var csBuilder = new StringBuilder(); - for (int i = 0; i < fields.length; i++) { + for (var i = 0; i < fields.length; i++) { var field = fields[i]; var fieldRegistration = fieldRegistrations[i]; - String readObject = csSerializer(fieldRegistration.serializer()).readObject(csBuilder, 3, field, fieldRegistration); - csBuilder.append(TAB + TAB + TAB) - .append(StringUtils.format("packet.{} = {};", field.getName(), readObject)) - .append(LS); + if (field.isAnnotationPresent(Compatible.class)) { + csBuilder.append(TAB + TAB + TAB).append("if (!buffer.IsReadable())").append(LS); + csBuilder.append(TAB + TAB + TAB).append("{").append(LS); + csBuilder.append(TAB + TAB + TAB + TAB).append("return packet;").append(LS); + csBuilder.append(TAB + TAB + TAB).append("}").append(LS); + } + var readObject = csSerializer(fieldRegistration.serializer()).readObject(csBuilder, 3, field, fieldRegistration); + csBuilder.append(TAB + TAB + TAB).append(StringUtils.format("packet.{} = {};", field.getName(), readObject)).append(LS); } return csBuilder.toString(); } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java index f6e2d7cd..0fe9d9bf 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/gdscript/GenerateGdUtils.java @@ -19,6 +19,7 @@ import com.zfoo.protocol.generate.GenerateProtocolFile; import com.zfoo.protocol.generate.GenerateProtocolPath; import com.zfoo.protocol.registration.IProtocolRegistration; import com.zfoo.protocol.registration.ProtocolRegistration; +import com.zfoo.protocol.registration.anno.Compatible; import com.zfoo.protocol.serializer.reflect.*; import com.zfoo.protocol.util.ClassUtils; import com.zfoo.protocol.util.FileUtils; @@ -33,6 +34,7 @@ import java.util.List; import java.util.Map; import static com.zfoo.protocol.util.FileUtils.LS; +import static com.zfoo.protocol.util.StringUtils.TAB; import static com.zfoo.protocol.util.StringUtils.TAB_ASCII; /** @@ -169,6 +171,10 @@ public abstract class GenerateGdUtils { for (var i = 0; i < fields.length; i++) { var field = fields[i]; var fieldRegistration = fieldRegistrations[i]; + if (field.isAnnotationPresent(Compatible.class)) { + gdBuilder.append(TAB_ASCII).append("if (!buffer.isReadable()):").append(LS); + gdBuilder.append(TAB_ASCII + TAB_ASCII).append("return packet").append(LS); + } var readObject = gdSerializer(fieldRegistration.serializer()).readObject(gdBuilder, 1, field, fieldRegistration); gdBuilder.append(TAB_ASCII).append(StringUtils.format("packet.{} = {}", field.getName(), readObject)).append(LS); } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/GenerateJsUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/GenerateJsUtils.java index c79add67..81effbd5 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/GenerateJsUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/javascript/GenerateJsUtils.java @@ -20,6 +20,7 @@ import com.zfoo.protocol.generate.GenerateProtocolPath; import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.IProtocolRegistration; import com.zfoo.protocol.registration.ProtocolRegistration; +import com.zfoo.protocol.registration.anno.Compatible; import com.zfoo.protocol.serializer.reflect.*; import com.zfoo.protocol.util.ClassUtils; import com.zfoo.protocol.util.FileUtils; @@ -183,7 +184,11 @@ public abstract class GenerateJsUtils { 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 = jsSerializer(fieldRegistration.serializer()).readObject(jsBuilder, 1, field, fieldRegistration); jsBuilder.append(TAB).append(StringUtils.format("packet.{} = {};", field.getName(), readObject)).append(LS); } diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java index 4e262691..6fef6bde 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/lua/GenerateLuaUtils.java @@ -20,6 +20,7 @@ import com.zfoo.protocol.generate.GenerateProtocolPath; import com.zfoo.protocol.model.Pair; import com.zfoo.protocol.registration.IProtocolRegistration; import com.zfoo.protocol.registration.ProtocolRegistration; +import com.zfoo.protocol.registration.anno.Compatible; import com.zfoo.protocol.serializer.reflect.*; import com.zfoo.protocol.util.ClassUtils; import com.zfoo.protocol.util.FileUtils; @@ -193,6 +194,11 @@ public abstract class GenerateLuaUtils { for (int i = 0; i < fields.length; i++) { var field = fields[i]; var fieldRegistration = fieldRegistrations[i]; + if (field.isAnnotationPresent(Compatible.class)) { + luaBuilder.append(TAB).append("if not(buffer:isReadable()) then").append(LS); + luaBuilder.append(TAB + TAB).append("return packet").append(LS); + luaBuilder.append(TAB).append("end").append(LS); + } var readObject = luaSerializer(fieldRegistration.serializer()).readObject(luaBuilder, 1, field, fieldRegistration); luaBuilder.append(TAB).append(StringUtils.format("packet.{} = {}", field.getName(), readObject)).append(LS); } diff --git a/protocol/src/main/resources/csharp/Buffer/ByteBuffer.cs b/protocol/src/main/resources/csharp/Buffer/ByteBuffer.cs index 473b6040..170222aa 100644 --- a/protocol/src/main/resources/csharp/Buffer/ByteBuffer.cs +++ b/protocol/src/main/resources/csharp/Buffer/ByteBuffer.cs @@ -88,6 +88,10 @@ namespace CsProtocol.Buffer return bytes; } + public bool IsReadable() + { + return writeOffset > readOffset; + } // -------------------------------------------------write/read------------------------------------------------- public void WriteBool(bool value) @@ -1907,7 +1911,7 @@ namespace CsProtocol.Buffer return map; } - + public void WritePacket(T packet, short protocolId) { IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); @@ -1920,4 +1924,4 @@ namespace CsProtocol.Buffer return (T) protocolRegistration.Read(this); } } -} \ No newline at end of file +} diff --git a/protocol/src/main/resources/gdscript/buffer/ByteBuffer.gd b/protocol/src/main/resources/gdscript/buffer/ByteBuffer.gd index f66cbfc6..fea48a90 100644 --- a/protocol/src/main/resources/gdscript/buffer/ByteBuffer.gd +++ b/protocol/src/main/resources/gdscript/buffer/ByteBuffer.gd @@ -31,6 +31,9 @@ func setReadOffset(readIndex: int) -> void: func getReadOffset() -> int: return readOffset +func isReadable() -> bool: + return writeOffset > readOffset + # -------------------------------------------------write/read------------------------------------------------- func writePoolByteArray(value: PoolByteArray): var length = value.size() diff --git a/protocol/src/main/resources/javascript/buffer/ByteBuffer.js b/protocol/src/main/resources/javascript/buffer/ByteBuffer.js index c48d67a0..dda8c512 100644 --- a/protocol/src/main/resources/javascript/buffer/ByteBuffer.js +++ b/protocol/src/main/resources/javascript/buffer/ByteBuffer.js @@ -82,6 +82,10 @@ const ByteBuffer = function() { } }; + this.isReadable = function() { + return this.writeOffset > this.readOffset; + }; + this.writeBoolean = function(value) { if (!(value === true || value === false)) { throw new Error('value must be true of false'); @@ -339,7 +343,7 @@ const ByteBuffer = function() { }; this.writePacketFlag = function(value) { - const flag = value === null; + const flag = (value === null) || (value === undefined); this.writeBoolean(!flag); return flag; }; diff --git a/protocol/src/main/resources/lua/Buffer/ByteBuffer.lua b/protocol/src/main/resources/lua/Buffer/ByteBuffer.lua index b7be98e4..e3348220 100644 --- a/protocol/src/main/resources/lua/Buffer/ByteBuffer.lua +++ b/protocol/src/main/resources/lua/Buffer/ByteBuffer.lua @@ -125,6 +125,10 @@ function ByteBuffer:getAvailable() return #self.buffer - self.writeOffset + 1 end +function ByteBuffer:isReadable() + return self.writeOffset > self.readOffset +end + -------------------------------------write和read------------------------------------- --bool diff --git a/protocol/src/test/csharp/CsProtocol/Buffer/ByteBuffer.cs b/protocol/src/test/csharp/CsProtocol/Buffer/ByteBuffer.cs index 473b6040..170222aa 100644 --- a/protocol/src/test/csharp/CsProtocol/Buffer/ByteBuffer.cs +++ b/protocol/src/test/csharp/CsProtocol/Buffer/ByteBuffer.cs @@ -88,6 +88,10 @@ namespace CsProtocol.Buffer return bytes; } + public bool IsReadable() + { + return writeOffset > readOffset; + } // -------------------------------------------------write/read------------------------------------------------- public void WriteBool(bool value) @@ -1907,7 +1911,7 @@ namespace CsProtocol.Buffer return map; } - + public void WritePacket(T packet, short protocolId) { IProtocolRegistration protocolRegistration = ProtocolManager.GetProtocol(protocolId); @@ -1920,4 +1924,4 @@ namespace CsProtocol.Buffer return (T) protocolRegistration.Read(this); } } -} \ No newline at end of file +} diff --git a/protocol/src/test/csharp/CsProtocol/Packet/ComplexObject.cs b/protocol/src/test/csharp/CsProtocol/Packet/ComplexObject.cs index 0903be46..8addcf33 100644 --- a/protocol/src/test/csharp/CsProtocol/Packet/ComplexObject.cs +++ b/protocol/src/test/csharp/CsProtocol/Packet/ComplexObject.cs @@ -66,8 +66,11 @@ namespace CsProtocol public HashSet> sss; public HashSet ssss; public HashSet> sssss; + // 如果要修改协议并且兼容老协议,需要加上Compatible注解,按照增加的顺序添加order + public int myCompatible; + public ObjectA myObject; - public static ComplexObject ValueOf(byte a, byte aa, byte[] aaa, byte[] aaaa, short b, short bb, short[] bbb, short[] bbbb, int c, int cc, int[] ccc, int[] cccc, long d, long dd, long[] ddd, long[] dddd, float e, float ee, float[] eee, float[] eeee, double f, double ff, double[] fff, double[] ffff, bool g, bool gg, bool[] ggg, bool[] gggg, char h, char hh, char[] hhh, char[] hhhh, string jj, string[] jjj, ObjectA kk, ObjectA[] kkk, List l, List>> ll, List> lll, List llll, List> lllll, Dictionary m, Dictionary mm, Dictionary> mmm, Dictionary>, List>>> mmmm, Dictionary>, HashSet>> mmmmm, HashSet s, HashSet>> ss, HashSet> sss, HashSet ssss, HashSet> sssss) + public static ComplexObject ValueOf(byte a, byte aa, byte[] aaa, byte[] aaaa, short b, short bb, short[] bbb, short[] bbbb, int c, int cc, int[] ccc, int[] cccc, long d, long dd, long[] ddd, long[] dddd, float e, float ee, float[] eee, float[] eeee, double f, double ff, double[] fff, double[] ffff, bool g, bool gg, bool[] ggg, bool[] gggg, char h, char hh, char[] hhh, char[] hhhh, string jj, string[] jjj, ObjectA kk, ObjectA[] kkk, List l, List>> ll, List> lll, List llll, List> lllll, Dictionary m, Dictionary mm, Dictionary> mmm, Dictionary>, List>>> mmmm, Dictionary>, HashSet>> mmmmm, HashSet s, HashSet>> ss, HashSet> sss, HashSet ssss, HashSet> sssss, int myCompatible, ObjectA myObject) { var packet = new ComplexObject(); packet.a = a; @@ -121,6 +124,8 @@ namespace CsProtocol packet.sss = sss; packet.ssss = ssss; packet.sssss = sssss; + packet.myCompatible = myCompatible; + packet.myObject = myObject; return packet; } @@ -398,6 +403,8 @@ namespace CsProtocol buffer.WriteIntStringMap(i37); } } + buffer.WriteInt(message.myCompatible); + buffer.WritePacket(message.myObject, 102); } public IPacket Read(ByteBuffer buffer) @@ -656,6 +663,18 @@ namespace CsProtocol } } packet.sssss = result136; + if (!buffer.IsReadable()) + { + return packet; + } + int result140 = buffer.ReadInt(); + packet.myCompatible = result140; + if (!buffer.IsReadable()) + { + return packet; + } + ObjectA result141 = buffer.ReadPacket(102); + packet.myObject = result141; return packet; } } diff --git a/protocol/src/test/gdscript/GdProtocolTest.gd b/protocol/src/test/gdscript/GdProtocolTest.gd index 44bcaf8e..b00cb7dd 100644 --- a/protocol/src/test/gdscript/GdProtocolTest.gd +++ b/protocol/src/test/gdscript/GdProtocolTest.gd @@ -89,7 +89,7 @@ func test(): var packet = ProtocolManager.read(buffer) print(packet) - + packet.myCompatible = 0 var newByteBuffer = ByteBuffer.new() ProtocolManager.write(newByteBuffer, packet); print(newByteBuffer.getWriteOffset()) diff --git a/protocol/src/test/gdscript/gdProtocol/ProtocolManager.gd b/protocol/src/test/gdscript/gdProtocol/ProtocolManager.gd index b2aab51f..0e08f018 100644 --- a/protocol/src/test/gdscript/gdProtocol/ProtocolManager.gd +++ b/protocol/src/test/gdscript/gdProtocol/ProtocolManager.gd @@ -10,8 +10,8 @@ static func getProtocol(protocolId: int): return protocols[protocolId] static func newInstance(protocolId: int): - var protocol = protocols[protocolId] - return protocol.new() + var protocol = protocols[protocolId] + return protocol.new() static func write(buffer, packet): var protocolId: int = packet.PROTOCOL_ID @@ -20,10 +20,10 @@ static func write(buffer, packet): protocol.write(buffer, packet) static func read(buffer): - var protocolId = buffer.readShort(); - var protocol = protocols[protocolId] - var packet = protocol.read(buffer); - return packet; + var protocolId = buffer.readShort(); + var protocol = protocols[protocolId] + var packet = protocol.read(buffer); + return packet; static func initProtocol(): protocols[100] = ComplexObject diff --git a/protocol/src/test/gdscript/gdProtocol/buffer/ByteBuffer.gd b/protocol/src/test/gdscript/gdProtocol/buffer/ByteBuffer.gd index f66cbfc6..fea48a90 100644 --- a/protocol/src/test/gdscript/gdProtocol/buffer/ByteBuffer.gd +++ b/protocol/src/test/gdscript/gdProtocol/buffer/ByteBuffer.gd @@ -31,6 +31,9 @@ func setReadOffset(readIndex: int) -> void: func getReadOffset() -> int: return readOffset +func isReadable() -> bool: + return writeOffset > readOffset + # -------------------------------------------------write/read------------------------------------------------- func writePoolByteArray(value: PoolByteArray): var length = value.size() diff --git a/protocol/src/test/gdscript/gdProtocol/packet/ComplexObject.gd b/protocol/src/test/gdscript/gdProtocol/packet/ComplexObject.gd index ca35096e..9ec67128 100644 --- a/protocol/src/test/gdscript/gdProtocol/packet/ComplexObject.gd +++ b/protocol/src/test/gdscript/gdProtocol/packet/ComplexObject.gd @@ -59,6 +59,9 @@ var ss # java.util.Set>> var sss # java.util.Set> var ssss # java.util.Set var sssss # java.util.Set> +# 如果要修改协议并且兼容老协议,需要加上Compatible注解,按照增加的顺序添加order +var myCompatible # int +var myObject # com.zfoo.protocol.packet.ObjectA const PROTOCOL_ID = 100 @@ -202,6 +205,8 @@ static func write(buffer, packet): buffer.writeInt(packet.sssss.size()) for element18 in packet.sssss: buffer.writeIntStringMap(element18) + buffer.writeInt(packet.myCompatible) + buffer.writePacket(packet.myObject, 102) static func read(buffer): @@ -393,4 +398,12 @@ static func read(buffer): var map120 = buffer.readIntStringMap() result117.append(map120) packet.sssss = result117 + if (!buffer.isReadable()): + return packet + var result121 = buffer.readInt() + packet.myCompatible = result121 + if (!buffer.isReadable()): + return packet + var result122 = buffer.readPacket(102) + packet.myObject = result122 return packet diff --git a/protocol/src/test/javascript/main.spec.js b/protocol/src/test/javascript/main.spec.js index 887dc672..e4e672a1 100644 --- a/protocol/src/test/javascript/main.spec.js +++ b/protocol/src/test/javascript/main.spec.js @@ -16,6 +16,8 @@ describe('jsProtocolTest', () => { byteBuffer.writeBytes(arrayBytes); const packet = ProtocolManager.read(byteBuffer); + // complexObjec是老的协议,所以序列化回来myCompatible是nil,所以要重新赋值 + packet.myCompatible = 0 console.log(packet); const newByteBuffer = new ByteBuffer(); @@ -24,7 +26,7 @@ describe('jsProtocolTest', () => { const newPacket = ProtocolManager.read(newByteBuffer); console.log(newPacket); - expect(byteBuffer.readOffset).toBe(newByteBuffer.writeOffset); + expect(byteBuffer.readOffset).toBeLessThan(newByteBuffer.writeOffset); // set和map是无序的,所以有的时候输入和输出的字节流有可能不一致,但是长度一定是一致的 const length = newByteBuffer.writeOffset; diff --git a/protocol/src/test/javascript/zfoojs/ProtocolManager.js b/protocol/src/test/javascript/zfoojs/ProtocolManager.js index ce83dfcd..22ba541e 100644 --- a/protocol/src/test/javascript/zfoojs/ProtocolManager.js +++ b/protocol/src/test/javascript/zfoojs/ProtocolManager.js @@ -6,11 +6,7 @@ import SimpleObject from './packet/SimpleObject.js'; const protocols = new Map(); -const ProtocolManager = protocols.set(100, ComplexObject); -protocols.set(101, NormalObject); -protocols.set(102, ObjectA); -protocols.set(103, ObjectB); -protocols.set(104, SimpleObject); +const ProtocolManager = protocols.set(100, ComplexObject); protocols.set(101, NormalObject); protocols.set(102, ObjectA); protocols.set(103, ObjectB); protocols.set(104, SimpleObject); ProtocolManager.getProtocol = function getProtocol(protocolId) { const protocol = protocols.get(protocolId); @@ -35,8 +31,7 @@ ProtocolManager.read = function read(buffer) { }; ProtocolManager.initProtocol = function initProtocol() { - { - } + {} }; export default ProtocolManager; diff --git a/protocol/src/test/javascript/zfoojs/buffer/ByteBuffer.js b/protocol/src/test/javascript/zfoojs/buffer/ByteBuffer.js index 642b7a0e..bf44d124 100644 --- a/protocol/src/test/javascript/zfoojs/buffer/ByteBuffer.js +++ b/protocol/src/test/javascript/zfoojs/buffer/ByteBuffer.js @@ -1,4 +1,4 @@ -import {readInt64, writeInt64} from './longbits.js'; +import { readInt64, writeInt64 } from './longbits.js'; import ProtocolManager from '../ProtocolManager.js'; const empty_str = ''; @@ -82,6 +82,10 @@ const ByteBuffer = function() { } }; + this.isReadable = function() { + return this.writeOffset > this.readOffset; + }; + this.writeBoolean = function(value) { if (!(value === true || value === false)) { throw new Error('value must be true of false'); @@ -339,22 +343,22 @@ const ByteBuffer = function() { }; this.writePacketFlag = function(value) { - const flag = value === null; + const flag = (value === null) || (value === undefined); this.writeBoolean(!flag); return flag; }; - this.writePacket = function (packet, protocolId) { + this.writePacket = function(packet, protocolId) { const protocolRegistration = ProtocolManager.getProtocol(protocolId); protocolRegistration.write(this, packet); }; - this.readPacket = function (protocolId) { + this.readPacket = function(protocolId) { const protocolRegistration = ProtocolManager.getProtocol(protocolId); return protocolRegistration.read(this); }; - this.writeBooleanArray = function (array) { + this.writeBooleanArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -365,7 +369,7 @@ const ByteBuffer = function() { } }; - this.readBooleanArray = function () { + this.readBooleanArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -376,7 +380,7 @@ const ByteBuffer = function() { return array; }; - this.writeByteArray = function (array) { + this.writeByteArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -387,7 +391,7 @@ const ByteBuffer = function() { } }; - this.readByteArray = function () { + this.readByteArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -398,7 +402,7 @@ const ByteBuffer = function() { return array; }; - this.writeShortArray = function (array) { + this.writeShortArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -409,7 +413,7 @@ const ByteBuffer = function() { } }; - this.readShortArray = function () { + this.readShortArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -420,7 +424,7 @@ const ByteBuffer = function() { return array; }; - this.writeIntArray = function (array) { + this.writeIntArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -431,7 +435,7 @@ const ByteBuffer = function() { } }; - this.readIntArray = function () { + this.readIntArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -442,7 +446,7 @@ const ByteBuffer = function() { return array; }; - this.writeLongArray = function (array) { + this.writeLongArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -453,7 +457,7 @@ const ByteBuffer = function() { } }; - this.readLongArray = function () { + this.readLongArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -464,7 +468,7 @@ const ByteBuffer = function() { return array; }; - this.writeFloatArray = function (array) { + this.writeFloatArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -475,7 +479,7 @@ const ByteBuffer = function() { } }; - this.readFloatArray = function () { + this.readFloatArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -486,7 +490,7 @@ const ByteBuffer = function() { return array; }; - this.writeDoubleArray = function (array) { + this.writeDoubleArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -497,7 +501,7 @@ const ByteBuffer = function() { } }; - this.readDoubleArray = function () { + this.readDoubleArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -508,7 +512,7 @@ const ByteBuffer = function() { return array; }; - this.writeStringArray = function (array) { + this.writeStringArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -519,7 +523,7 @@ const ByteBuffer = function() { } }; - this.readStringArray = function () { + this.readStringArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -530,7 +534,7 @@ const ByteBuffer = function() { return array; }; - this.writeCharArray = function (array) { + this.writeCharArray = function(array) { if (array === null) { this.writeInt(0); } else { @@ -541,7 +545,7 @@ const ByteBuffer = function() { } }; - this.readCharArray = function () { + this.readCharArray = function() { const array = []; const length = this.readInt(); if (length > 0) { @@ -552,7 +556,7 @@ const ByteBuffer = function() { return array; }; - this.writePacketArray = function (array, protocolId) { + this.writePacketArray = function(array, protocolId) { if (array === null) { this.writeInt(0); } else { @@ -576,7 +580,7 @@ const ByteBuffer = function() { return array; }; - this.writeIntIntMap = function (map) { + this.writeIntIntMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -601,7 +605,7 @@ const ByteBuffer = function() { return map; }; - this.writeIntLongMap = function (map) { + this.writeIntLongMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -626,7 +630,7 @@ const ByteBuffer = function() { return map; }; - this.writeIntStringMap = function (map) { + this.writeIntStringMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -651,7 +655,7 @@ const ByteBuffer = function() { return map; }; - this.writeIntPacketMap = function (map, protocolId) { + this.writeIntPacketMap = function(map, protocolId) { if (map === null) { this.writeInt(0); } else { @@ -678,7 +682,7 @@ const ByteBuffer = function() { return map; }; - this.writeLongIntMap = function (map) { + this.writeLongIntMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -703,7 +707,7 @@ const ByteBuffer = function() { return map; }; - this.writeLongLongMap = function (map) { + this.writeLongLongMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -728,7 +732,7 @@ const ByteBuffer = function() { return map; }; - this.writeLongStringMap = function (map) { + this.writeLongStringMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -753,7 +757,7 @@ const ByteBuffer = function() { return map; }; - this.writeLongPacketMap = function (map, protocolId) { + this.writeLongPacketMap = function(map, protocolId) { if (map === null) { this.writeInt(0); } else { @@ -780,7 +784,7 @@ const ByteBuffer = function() { return map; }; - this.writeStringIntMap = function (map) { + this.writeStringIntMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -805,7 +809,7 @@ const ByteBuffer = function() { return map; }; - this.writeStringLongMap = function (map) { + this.writeStringLongMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -830,7 +834,7 @@ const ByteBuffer = function() { return map; }; - this.writeStringStringMap = function (map) { + this.writeStringStringMap = function(map) { if (map === null) { this.writeInt(0); } else { @@ -855,7 +859,7 @@ const ByteBuffer = function() { return map; }; - this.writeStringPacketMap = function (map, protocolId) { + this.writeStringPacketMap = function(map, protocolId) { if (map === null) { this.writeInt(0); } else { diff --git a/protocol/src/test/javascript/zfoojs/packet/ComplexObject.js b/protocol/src/test/javascript/zfoojs/packet/ComplexObject.js index 66c363c4..ca794c9a 100644 --- a/protocol/src/test/javascript/zfoojs/packet/ComplexObject.js +++ b/protocol/src/test/javascript/zfoojs/packet/ComplexObject.js @@ -3,7 +3,7 @@ // // @author jaysunxiao // @version 3.0 -const ComplexObject = function(a, aa, aaa, aaaa, b, bb, bbb, bbbb, c, cc, ccc, cccc, d, dd, ddd, dddd, e, ee, eee, eeee, f, ff, fff, ffff, g, gg, ggg, gggg, h, hh, hhh, hhhh, jj, jjj, kk, kkk, l, ll, lll, llll, lllll, m, mm, mmm, mmmm, mmmmm, s, ss, sss, ssss, sssss) { +const ComplexObject = function(a, aa, aaa, aaaa, b, bb, bbb, bbbb, c, cc, ccc, cccc, d, dd, ddd, dddd, e, ee, eee, eeee, f, ff, fff, ffff, g, gg, ggg, gggg, h, hh, hhh, hhhh, jj, jjj, kk, kkk, l, ll, lll, llll, lllll, m, mm, mmm, mmmm, mmmmm, s, ss, sss, ssss, sssss, myCompatible, myObject) { // byte类型,最简单的整形 this.a = a; // byte // byte的包装类型 @@ -59,6 +59,9 @@ const ComplexObject = function(a, aa, aaa, aaaa, b, bb, bbb, bbbb, c, cc, ccc, c this.sss = sss; // java.util.Set> this.ssss = ssss; // java.util.Set this.sssss = sssss; // java.util.Set> + // 如果要修改协议并且兼容老协议,需要加上Compatible注解,按照增加的顺序添加order + this.myCompatible = myCompatible; // int + this.myObject = myObject; // com.zfoo.protocol.packet.ObjectA }; ComplexObject.prototype.protocolId = function() { @@ -235,6 +238,8 @@ ComplexObject.write = function(buffer, packet) { buffer.writeIntStringMap(element18); }); } + buffer.writeInt(packet.myCompatible); + buffer.writePacket(packet.myObject, 102); }; ComplexObject.read = function(buffer) { @@ -459,6 +464,16 @@ ComplexObject.read = function(buffer) { } } packet.sssss = result117; + if (!buffer.isReadable()) { + return packet; + } + const result121 = buffer.readInt(); + packet.myCompatible = result121; + if (!buffer.isReadable()) { + return packet; + } + const result122 = buffer.readPacket(102); + packet.myObject = result122; return packet; }; diff --git a/protocol/src/test/lua/LuaProtocol/Buffer/ByteBuffer.lua b/protocol/src/test/lua/LuaProtocol/Buffer/ByteBuffer.lua index 83ac7b6d..e3348220 100644 --- a/protocol/src/test/lua/LuaProtocol/Buffer/ByteBuffer.lua +++ b/protocol/src/test/lua/LuaProtocol/Buffer/ByteBuffer.lua @@ -2,9 +2,11 @@ --支持的lua版本为>=5.3 --支持标准的Lua是使用64-bit的int以及64-bit的双精度float --当lua只能支持32位的整数类型时,可以考虑用Long来替代,需要修改原代码 - +--右移操作>>是无符号右移 --local Long = require("Long") +local ProtocolManager = require("LuaProtocol.ProtocolManager") + local maxInt = 2147483647 local minInt = -2147483648 local initSize = 128 @@ -33,6 +35,14 @@ function ByteBuffer:new() end +-- C#传进来的byte数组到lua里就会变成string +function readBytes(bytes) + local buffer = ByteBuffer:new() + buffer:writeBuffer(bytes) + local packet = ProtocolManager.read(buffer) + return packet +end + -------------------------------------UTF8------------------------------------- -- 判断utf8字符byte长度 -- 0xxxxxxx - 1 byte @@ -115,6 +125,10 @@ function ByteBuffer:getAvailable() return #self.buffer - self.writeOffset + 1 end +function ByteBuffer:isReadable() + return self.writeOffset > self.readOffset +end + -------------------------------------write和read------------------------------------- --bool @@ -387,7 +401,7 @@ function ByteBuffer:writeString(str) self:writeInt(#str) self:writeBuffer(str) return self - end +end function ByteBuffer:readString() local length = self:readInt() @@ -396,6 +410,10 @@ end --char function ByteBuffer:writeChar(charValue) + if charValue == nil or #charValue == 0 then + self:writeString("") + return + end local str = utf8sub(charValue, 1, 1) self:writeString(str) return self @@ -445,4 +463,571 @@ function ByteBuffer:getBytes(startIndex, endIndex) return table.concat(self.buffer, "", startIndex, endIndex) end -return ByteBuffer \ No newline at end of file +function ByteBuffer:writePacketFlag(value) + local flag = (value == null) + self:writeBoolean(not flag) + return flag +end + +function ByteBuffer:writePacket(value, protocolId) + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + protocolRegistration:write(self, value) + return self +end + +function ByteBuffer:readPacket(protocolId) + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + return protocolRegistration:read(self) +end + +function ByteBuffer:writeBooleanArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeBoolean(element) + end + end + return self +end + +function ByteBuffer:readBooleanArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readBoolean()) + end + end + return array +end + +function ByteBuffer:writeByteArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeByte(element) + end + end + return self +end + +function ByteBuffer:readByteArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readByte()) + end + end + return array +end + +function ByteBuffer:writeShortArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeShort(element) + end + end + return self +end + +function ByteBuffer:readShortArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readShort()) + end + end + return array +end + +function ByteBuffer:writeIntArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeInt(element) + end + end + return self +end + +function ByteBuffer:readIntArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readInt()) + end + end + return array +end + +function ByteBuffer:writeLongArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeLong(element) + end + end + return self +end + +function ByteBuffer:readLongArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readLong()) + end + end + return array +end + +function ByteBuffer:writeFloatArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeFloat(element) + end + end + return self +end + +function ByteBuffer:readFloatArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readFloat()) + end + end + return array +end + +function ByteBuffer:writeDoubleArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeDouble(element) + end + end + return self +end + +function ByteBuffer:readDoubleArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readDouble()) + end + end + return array +end + +function ByteBuffer:writeCharArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeChar(element) + end + end + return self +end + +function ByteBuffer:readCharArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readChar()) + end + end + return array +end + +function ByteBuffer:writeStringArray(array) + if array == null then + self:writeInt(0) + else + self:writeInt(#array); + for index, element in pairs(array) do + self:writeString(element) + end + end + return self +end + +function ByteBuffer:readStringArray() + local array = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + table.insert(array, self:readString()) + end + end + return array +end + +function ByteBuffer:writePacketArray(array, protocolId) + if array == null then + self:writeInt(0) + else + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + self:writeInt(#array); + for index, element in pairs(array) do + protocolRegistration:write(self, element) + end + end + return self +end + +function ByteBuffer:readPacketArray(protocolId) + local array = {} + local size = self:readInt() + if size > 0 then + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index = 1, size do + table.insert(array, protocolRegistration:read(self)) + end + end + return array +end + +function ByteBuffer:writeIntIntMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeInt(key) + self:writeInt(value) + end + end + return self +end + +function ByteBuffer:readIntIntMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readInt() + local value = self:readInt() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeIntLongMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeInt(key) + self:writeLong(value) + end + end + return self +end + +function ByteBuffer:readIntLongMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readInt() + local value = self:readLong() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeIntStringMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeInt(key) + self:writeString(value) + end + end + return self +end + +function ByteBuffer:readIntStringMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readInt() + local value = self:readString() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeIntPacketMap(map, protocolId) + if map == null then + self:writeInt(0) + else + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeInt(key) + protocolRegistration:write(self, value) + end + end + return self +end + +function ByteBuffer:readIntPacketMap(protocolId) + local map = {} + local size = self:readInt() + if size > 0 then + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index = 1, size do + local key = self:readInt() + local value = protocolRegistration:read(self) + map[key] = value + end + end + return map +end + +function ByteBuffer:writeLongIntMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeLong(key) + self:writeInt(value) + end + end + return self +end + +function ByteBuffer:readLongIntMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readLong() + local value = self:readInt() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeLongLongMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeLong(key) + self:writeLong(value) + end + end + return self +end + +function ByteBuffer:readLongLongMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readLong() + local value = self:readLong() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeLongStringMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeLong(key) + self:writeString(value) + end + end + return self +end + +function ByteBuffer:readLongStringMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readLong() + local value = self:readString() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeLongPacketMap(map, protocolId) + if map == null then + self:writeInt(0) + else + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeLong(key) + protocolRegistration:write(self, value) + end + end + return self +end + +function ByteBuffer:readLongPacketMap(protocolId) + local map = {} + local size = self:readInt() + if size > 0 then + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index = 1, size do + local key = self:readLong() + local value = protocolRegistration:read(self) + map[key] = value + end + end + return map +end + +function ByteBuffer:writeStringIntMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeString(key) + self:writeInt(value) + end + end + return self +end + +function ByteBuffer:readStringIntMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readString() + local value = self:readInt() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeStringLongMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeString(key) + self:writeLong(value) + end + end + return self +end + +function ByteBuffer:readStringLongMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readString() + local value = self:readLong() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeStringStringMap(map) + if map == null then + self:writeInt(0) + else + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeString(key) + self:writeString(value) + end + end + return self +end + +function ByteBuffer:readStringStringMap() + local map = {} + local size = self:readInt() + if size > 0 then + for index = 1, size do + local key = self:readString() + local value = self:readString() + map[key] = value + end + end + return map +end + +function ByteBuffer:writeStringPacketMap(map, protocolId) + if map == null then + self:writeInt(0) + else + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + self:writeInt(table.mapSize(map)); + for key, value in pairs(map) do + self:writeString(key) + protocolRegistration:write(self, value) + end + end + return self +end + +function ByteBuffer:readStringPacketMap(protocolId) + local map = {} + local size = self:readInt() + if size > 0 then + local protocolRegistration = ProtocolManager.getProtocol(protocolId) + for index = 1, size do + local key = self:readString() + local value = protocolRegistration:read(self) + map[key] = value + end + end + return map +end + +return ByteBuffer diff --git a/protocol/src/test/lua/LuaProtocol/Buffer/Long.lua b/protocol/src/test/lua/LuaProtocol/Buffer/Long.lua index 2e0a2080..2dd618f1 100644 --- a/protocol/src/test/lua/LuaProtocol/Buffer/Long.lua +++ b/protocol/src/test/lua/LuaProtocol/Buffer/Long.lua @@ -1,4 +1,4 @@ -al MAX_LONG_4BYTE = 1 << 32 +local MAX_LONG_4BYTE = 1 << 32 local MIN_INT = -2147483648 local MAX_INT = 2147483647 local MIN_LONG = 0x8000000000000000 diff --git a/protocol/src/test/lua/LuaProtocol/Packet/ComplexObject.lua b/protocol/src/test/lua/LuaProtocol/Packet/ComplexObject.lua index 7c5cee94..406d28a3 100644 --- a/protocol/src/test/lua/LuaProtocol/Packet/ComplexObject.lua +++ b/protocol/src/test/lua/LuaProtocol/Packet/ComplexObject.lua @@ -2,14 +2,11 @@ -- 包括了各种复杂的结构,数组,List,Set,Map -- -- @author jaysunxiao --- @version 1.0 --- @since 2017 10.14 11:19 - -local ProtocolManager = require("LuaProtocol.ProtocolManager") +-- @version 3.0 local ComplexObject = {} -function ComplexObject:new(a, aa, aaa, aaaa, b, bb, bbb, bbbb, c, cc, ccc, cccc, d, dd, ddd, dddd, e, ee, eee, eeee, f, ff, fff, ffff, g, gg, ggg, gggg, h, hh, hhh, hhhh, jj, jjj, kk, kkk, l, ll, lll, llll, lllll, m, mm, mmm, mmmm, mmmmm, s, ss, sss, ssss, sssss) +function ComplexObject:new(a, aa, aaa, aaaa, b, bb, bbb, bbbb, c, cc, ccc, cccc, d, dd, ddd, dddd, e, ee, eee, eeee, f, ff, fff, ffff, g, gg, ggg, gggg, h, hh, hhh, hhhh, jj, jjj, kk, kkk, l, ll, lll, llll, lllll, m, mm, mmm, mmmm, mmmmm, s, ss, sss, ssss, sssss, myCompatible, myObject) local obj = { -- byte类型,最简单的整形 a = a, -- byte @@ -65,7 +62,10 @@ function ComplexObject:new(a, aa, aaa, aaaa, b, bb, bbb, bbbb, c, cc, ccc, cccc, ss = ss, -- java.util.Set>> sss = sss, -- java.util.Set> ssss = ssss, -- java.util.Set - sssss = sssss -- java.util.Set> + sssss = sssss, -- java.util.Set> + -- 如果要修改协议并且兼容老协议,需要加上Compatible注解,按照增加的顺序添加order + myCompatible = myCompatible, -- int + myObject = myObject -- com.zfoo.protocol.packet.ObjectA } setmetatable(obj, self) self.__index = self @@ -73,318 +73,117 @@ function ComplexObject:new(a, aa, aaa, aaaa, b, bb, bbb, bbbb, c, cc, ccc, cccc, end function ComplexObject:protocolId() - return 1160 + return 100 end -function ComplexObject:write(byteBuffer, packet) - if packet == null then - byteBuffer:writeBoolean(false) +function ComplexObject:write(buffer, packet) + if buffer:writePacketFlag(packet) then return end - byteBuffer:writeBoolean(true) - byteBuffer:writeByte(packet.a) - byteBuffer:writeByte(packet.aa) - if packet.aaa == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.aaa); - for index0, element1 in pairs(packet.aaa) do - byteBuffer:writeByte(element1) - end - end - if packet.aaaa == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.aaaa); - for index2, element3 in pairs(packet.aaaa) do - byteBuffer:writeByte(element3) - end - end - byteBuffer:writeShort(packet.b) - byteBuffer:writeShort(packet.bb) - if packet.bbb == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.bbb); - for index4, element5 in pairs(packet.bbb) do - byteBuffer:writeShort(element5) - end - end - if packet.bbbb == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.bbbb); - for index6, element7 in pairs(packet.bbbb) do - byteBuffer:writeShort(element7) - end - end - byteBuffer:writeInt(packet.c) - byteBuffer:writeInt(packet.cc) - if packet.ccc == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.ccc); - for index8, element9 in pairs(packet.ccc) do - byteBuffer:writeInt(element9) - end - end - if packet.cccc == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.cccc); - for index10, element11 in pairs(packet.cccc) do - byteBuffer:writeInt(element11) - end - end - byteBuffer:writeLong(packet.d) - byteBuffer:writeLong(packet.dd) - if packet.ddd == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.ddd); - for index12, element13 in pairs(packet.ddd) do - byteBuffer:writeLong(element13) - end - end - if packet.dddd == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.dddd); - for index14, element15 in pairs(packet.dddd) do - byteBuffer:writeLong(element15) - end - end - byteBuffer:writeFloat(packet.e) - byteBuffer:writeFloat(packet.ee) - if packet.eee == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.eee); - for index16, element17 in pairs(packet.eee) do - byteBuffer:writeFloat(element17) - end - end - if packet.eeee == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.eeee); - for index18, element19 in pairs(packet.eeee) do - byteBuffer:writeFloat(element19) - end - end - byteBuffer:writeDouble(packet.f) - byteBuffer:writeDouble(packet.ff) - if packet.fff == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.fff); - for index20, element21 in pairs(packet.fff) do - byteBuffer:writeDouble(element21) - end - end - if packet.ffff == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.ffff); - for index22, element23 in pairs(packet.ffff) do - byteBuffer:writeDouble(element23) - end - end - byteBuffer:writeBoolean(packet.g) - byteBuffer:writeBoolean(packet.gg) - if packet.ggg == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.ggg); - for index24, element25 in pairs(packet.ggg) do - byteBuffer:writeBoolean(element25) - end - end - if packet.gggg == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.gggg); - for index26, element27 in pairs(packet.gggg) do - byteBuffer:writeBoolean(element27) - end - end - byteBuffer:writeChar(packet.h) - byteBuffer:writeChar(packet.hh) - if packet.hhh == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.hhh); - for index28, element29 in pairs(packet.hhh) do - byteBuffer:writeChar(element29) - end - end - if packet.hhhh == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.hhhh); - for index30, element31 in pairs(packet.hhhh) do - byteBuffer:writeChar(element31) - end - end - byteBuffer:writeString(packet.jj) - if packet.jjj == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.jjj); - for index32, element33 in pairs(packet.jjj) do - byteBuffer:writeString(element33) - end - end - ProtocolManager.getProtocol(1116):write(byteBuffer, packet.kk) - if packet.kkk == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.kkk); - for index34, element35 in pairs(packet.kkk) do - ProtocolManager.getProtocol(1116):write(byteBuffer, element35) - end - end - if packet.l == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.l) - for index36, element37 in pairs(packet.l) do - byteBuffer:writeInt(element37) - end - end + 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:writeBoolean(packet.g) + buffer:writeBoolean(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 then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(#packet.ll) - for index38, element39 in pairs(packet.ll) do - if element39 == null then - byteBuffer:writeInt(0) + buffer:writeInt(#packet.ll) + for index0, element1 in pairs(packet.ll) do + if element1 == null then + buffer:writeInt(0) else - byteBuffer:writeInt(#element39) - for index40, element41 in pairs(element39) do - if element41 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#element41) - for index42, element43 in pairs(element41) do - byteBuffer:writeInt(element43) - end - end + buffer:writeInt(#element1) + for index2, element3 in pairs(element1) do + buffer:writeIntArray(element3) end end end end if packet.lll == null then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(#packet.lll) - for index44, element45 in pairs(packet.lll) do - if element45 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#element45) - for index46, element47 in pairs(element45) do - ProtocolManager.getProtocol(1116):write(byteBuffer, element47) - end - end - end - end - if packet.llll == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.llll) - for index48, element49 in pairs(packet.llll) do - byteBuffer:writeString(element49) + buffer:writeInt(#packet.lll) + for index4, element5 in pairs(packet.lll) do + buffer:writePacketArray(element5, 102) end end + buffer:writeStringArray(packet.llll) if packet.lllll == null then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(#packet.lllll) - for index50, element51 in pairs(packet.lllll) do - if element51 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(element51)) - for key52, value53 in pairs(element51) do - byteBuffer:writeInt(key52) - byteBuffer:writeString(value53) - end - end - end - end - if packet.m == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(packet.m)) - for key54, value55 in pairs(packet.m) do - byteBuffer:writeInt(key54) - byteBuffer:writeString(value55) - end - end - if packet.mm == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(packet.mm)) - for key56, value57 in pairs(packet.mm) do - byteBuffer:writeInt(key56) - ProtocolManager.getProtocol(1116):write(byteBuffer, value57) + buffer:writeInt(#packet.lllll) + for index6, element7 in pairs(packet.lllll) do + buffer:writeIntStringMap(element7) end end + buffer:writeIntStringMap(packet.m) + buffer:writeIntPacketMap(packet.mm, 102) if packet.mmm == null then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(table.mapSize(packet.mmm)) - for key58, value59 in pairs(packet.mmm) do - ProtocolManager.getProtocol(1116):write(byteBuffer, key58) - if value59 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#value59) - for index60, element61 in pairs(value59) do - byteBuffer:writeInt(element61) - end - end + buffer:writeInt(table.mapSize(packet.mmm)) + for key8, value9 in pairs(packet.mmm) do + buffer:writePacket(key8, 102) + buffer:writeIntArray(value9) end end if packet.mmmm == null then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(table.mapSize(packet.mmmm)) - for key62, value63 in pairs(packet.mmmm) do - if key62 == null then - byteBuffer:writeInt(0) + buffer:writeInt(table.mapSize(packet.mmmm)) + for key10, value11 in pairs(packet.mmmm) do + if key10 == null then + buffer:writeInt(0) else - byteBuffer:writeInt(#key62) - for index64, element65 in pairs(key62) do - if element65 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#element65) - for index66, element67 in pairs(element65) do - ProtocolManager.getProtocol(1116):write(byteBuffer, element67) - end - end + buffer:writeInt(#key10) + for index12, element13 in pairs(key10) do + buffer:writePacketArray(element13, 102) end end - if value63 == null then - byteBuffer:writeInt(0) + if value11 == null then + buffer:writeInt(0) else - byteBuffer:writeInt(#value63) - for index68, element69 in pairs(value63) do - if element69 == null then - byteBuffer:writeInt(0) + buffer:writeInt(#value11) + for index14, element15 in pairs(value11) do + if element15 == null then + buffer:writeInt(0) else - byteBuffer:writeInt(#element69) - for index70, element71 in pairs(element69) do - if element71 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#element71) - for index72, element73 in pairs(element71) do - byteBuffer:writeInt(element73) - end - end + buffer:writeInt(#element15) + for index16, element17 in pairs(element15) do + buffer:writeIntArray(element17) end end end @@ -392,588 +191,297 @@ function ComplexObject:write(byteBuffer, packet) end end if packet.mmmmm == null then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(table.mapSize(packet.mmmmm)) - for key74, value75 in pairs(packet.mmmmm) do - if key74 == null then - byteBuffer:writeInt(0) + buffer:writeInt(table.mapSize(packet.mmmmm)) + for key18, value19 in pairs(packet.mmmmm) do + if key18 == null then + buffer:writeInt(0) else - byteBuffer:writeInt(#key74) - for index76, element77 in pairs(key74) do - if element77 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(element77)) - for key78, value79 in pairs(element77) do - byteBuffer:writeInt(key78) - byteBuffer:writeString(value79) - end - end + buffer:writeInt(#key18) + for index20, element21 in pairs(key18) do + buffer:writeIntStringMap(element21) end end - if value75 == null then - byteBuffer:writeInt(0) + if value19 == null then + buffer:writeInt(0) else - byteBuffer:writeInt(table.setSize(value75)) - for index80, element81 in pairs(value75) do - if element81 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(element81)) - for key82, value83 in pairs(element81) do - byteBuffer:writeInt(key82) - byteBuffer:writeString(value83) - end - end + buffer:writeInt(#value19) + for index22, element23 in pairs(value19) do + buffer:writeIntStringMap(element23) end end end end - if packet.s == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.setSize(packet.s)) - for index84, element85 in pairs(packet.s) do - byteBuffer:writeInt(element85) - end - end + buffer:writeIntArray(packet.s) if packet.ss == null then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(table.setSize(packet.ss)) - for index86, element87 in pairs(packet.ss) do - if element87 == null then - byteBuffer:writeInt(0) + buffer:writeInt(#packet.ss) + for index24, element25 in pairs(packet.ss) do + if element25 == null then + buffer:writeInt(0) else - byteBuffer:writeInt(table.setSize(element87)) - for index88, element89 in pairs(element87) do - if element89 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#element89) - for index90, element91 in pairs(element89) do - byteBuffer:writeInt(element91) - end - end + buffer:writeInt(#element25) + for index26, element27 in pairs(element25) do + buffer:writeIntArray(element27) end end end end if packet.sss == null then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(table.setSize(packet.sss)) - for index92, element93 in pairs(packet.sss) do - if element93 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.setSize(element93)) - for index94, element95 in pairs(element93) do - ProtocolManager.getProtocol(1116):write(byteBuffer, element95) - end - end - end - end - if packet.ssss == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.setSize(packet.ssss)) - for index96, element97 in pairs(packet.ssss) do - byteBuffer:writeString(element97) + buffer:writeInt(#packet.sss) + for index28, element29 in pairs(packet.sss) do + buffer:writePacketArray(element29, 102) end end + buffer:writeStringArray(packet.ssss) if packet.sssss == null then - byteBuffer:writeInt(0) + buffer:writeInt(0) else - byteBuffer:writeInt(table.setSize(packet.sssss)) - for index98, element99 in pairs(packet.sssss) do - if element99 == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(element99)) - for key100, value101 in pairs(element99) do - byteBuffer:writeInt(key100) - byteBuffer:writeString(value101) - end - end + buffer:writeInt(#packet.sssss) + for index30, element31 in pairs(packet.sssss) do + buffer:writeIntStringMap(element31) end end + buffer:writeInt(packet.myCompatible) + buffer:writePacket(packet.myObject, 102) end -function ComplexObject:read(byteBuffer) - if not(byteBuffer:readBoolean()) then +function ComplexObject:read(buffer) + if not(buffer:readBoolean()) then return nil end local packet = ComplexObject:new() - local result102 = byteBuffer:readByte() - packet.a = result102 - local result103 = byteBuffer:readByte() - packet.aa = result103 - local result104 = {} - local size106 = byteBuffer:readInt() - if size106 > 0 then - for index105 = 1, size106 do - local result107 = byteBuffer:readByte() - table.insert(result104, result107) + local result32 = buffer:readByte() + packet.a = result32 + local result33 = buffer:readByte() + packet.aa = result33 + local array34 = buffer:readByteArray() + packet.aaa = array34 + local array35 = buffer:readByteArray() + packet.aaaa = array35 + local result36 = buffer:readShort() + packet.b = result36 + local result37 = buffer:readShort() + packet.bb = result37 + local array38 = buffer:readShortArray() + packet.bbb = array38 + local array39 = buffer:readShortArray() + packet.bbbb = array39 + local result40 = buffer:readInt() + packet.c = result40 + local result41 = buffer:readInt() + packet.cc = result41 + local array42 = buffer:readIntArray() + packet.ccc = array42 + local array43 = buffer:readIntArray() + packet.cccc = array43 + local result44 = buffer:readLong() + packet.d = result44 + local result45 = buffer:readLong() + packet.dd = result45 + local array46 = buffer:readLongArray() + packet.ddd = array46 + local array47 = buffer:readLongArray() + packet.dddd = array47 + local result48 = buffer:readFloat() + packet.e = result48 + local result49 = buffer:readFloat() + packet.ee = result49 + local array50 = buffer:readFloatArray() + packet.eee = array50 + local array51 = buffer:readFloatArray() + packet.eeee = array51 + local result52 = buffer:readDouble() + packet.f = result52 + local result53 = buffer:readDouble() + packet.ff = result53 + local array54 = buffer:readDoubleArray() + packet.fff = array54 + local array55 = buffer:readDoubleArray() + packet.ffff = array55 + local result56 = buffer:readBoolean() + packet.g = result56 + local result57 = buffer:readBoolean() + packet.gg = result57 + local array58 = buffer:readBooleanArray() + packet.ggg = array58 + local array59 = buffer:readBooleanArray() + packet.gggg = array59 + local result60 = buffer:readChar() + packet.h = result60 + local result61 = buffer:readChar() + packet.hh = result61 + local array62 = buffer:readCharArray() + packet.hhh = array62 + local array63 = buffer:readCharArray() + packet.hhhh = array63 + local result64 = buffer:readString() + packet.jj = result64 + local array65 = buffer:readStringArray() + packet.jjj = array65 + local result66 = buffer:readPacket(102) + packet.kk = result66 + local array67 = buffer:readPacketArray(102) + packet.kkk = array67 + local list68 = buffer:readIntArray() + packet.l = list68 + local result69 = {} + local size70 = buffer:readInt() + if size70 > 0 then + for index71 = 1, size70 do + local result72 = {} + local size73 = buffer:readInt() + if size73 > 0 then + for index74 = 1, size73 do + local list75 = buffer:readIntArray() + table.insert(result72, list75) + end + end + table.insert(result69, result72) end end - packet.aaa = result104 - local result108 = {} - local size110 = byteBuffer:readInt() - if size110 > 0 then - for index109 = 1, size110 do - local result111 = byteBuffer:readByte() - table.insert(result108, result111) + packet.ll = result69 + local result76 = {} + local size77 = buffer:readInt() + if size77 > 0 then + for index78 = 1, size77 do + local list79 = buffer:readPacketArray(102) + table.insert(result76, list79) end end - packet.aaaa = result108 - local result112 = byteBuffer:readShort() - packet.b = result112 - local result113 = byteBuffer:readShort() - packet.bb = result113 - local result114 = {} - local size116 = byteBuffer:readInt() - if size116 > 0 then - for index115 = 1, size116 do - local result117 = byteBuffer:readShort() - table.insert(result114, result117) + packet.lll = result76 + local list80 = buffer:readStringArray() + packet.llll = list80 + local result81 = {} + local size82 = buffer:readInt() + if size82 > 0 then + for index83 = 1, size82 do + local map84 = buffer:readIntStringMap() + table.insert(result81, map84) end end - packet.bbb = result114 + packet.lllll = result81 + local map85 = buffer:readIntStringMap() + packet.m = map85 + local map86 = buffer:readIntPacketMap(102) + packet.mm = map86 + local result87 = {} + local size88 = buffer:readInt() + if size88 > 0 then + for index89 = 1, size88 do + local result90 = buffer:readPacket(102) + local list91 = buffer:readIntArray() + result87[result90] = list91 + end + end + packet.mmm = result87 + local result92 = {} + local size93 = buffer:readInt() + if size93 > 0 then + for index94 = 1, size93 do + local result95 = {} + local size96 = buffer:readInt() + if size96 > 0 then + for index97 = 1, size96 do + local list98 = buffer:readPacketArray(102) + table.insert(result95, list98) + end + end + local result99 = {} + local size100 = buffer:readInt() + if size100 > 0 then + for index101 = 1, size100 do + local result102 = {} + local size103 = buffer:readInt() + if size103 > 0 then + for index104 = 1, size103 do + local list105 = buffer:readIntArray() + table.insert(result102, list105) + end + end + table.insert(result99, result102) + end + end + result92[result95] = result99 + end + end + packet.mmmm = result92 + local result106 = {} + local size107 = buffer:readInt() + if size107 > 0 then + for index108 = 1, size107 do + local result109 = {} + local size110 = buffer:readInt() + if size110 > 0 then + for index111 = 1, size110 do + local map112 = buffer:readIntStringMap() + table.insert(result109, map112) + end + end + local result113 = {} + local size114 = buffer:readInt() + if size114 > 0 then + for index115 = 1, size114 do + local map116 = buffer:readIntStringMap() + table.insert(result113, map116) + end + end + result106[result109] = result113 + end + end + packet.mmmmm = result106 + local set117 = buffer:readIntArray() + packet.s = set117 local result118 = {} - local size120 = byteBuffer:readInt() - if size120 > 0 then - for index119 = 1, size120 do - local result121 = byteBuffer:readShort() + local size119 = buffer:readInt() + if size119 > 0 then + for index120 = 1, size119 do + local result121 = {} + local size122 = buffer:readInt() + if size122 > 0 then + for index123 = 1, size122 do + local list124 = buffer:readIntArray() + table.insert(result121, list124) + end + end table.insert(result118, result121) end end - packet.bbbb = result118 - local result122 = byteBuffer:readInt() - packet.c = result122 - local result123 = byteBuffer:readInt() - packet.cc = result123 - local result124 = {} - local size126 = byteBuffer:readInt() + packet.ss = result118 + local result125 = {} + local size126 = buffer:readInt() if size126 > 0 then - for index125 = 1, size126 do - local result127 = byteBuffer:readInt() - table.insert(result124, result127) + for index127 = 1, size126 do + local set128 = buffer:readPacketArray(102) + table.insert(result125, set128) end end - packet.ccc = result124 - local result128 = {} - local size130 = byteBuffer:readInt() - if size130 > 0 then - for index129 = 1, size130 do - local result131 = byteBuffer:readInt() - table.insert(result128, result131) + packet.sss = result125 + local set129 = buffer:readStringArray() + packet.ssss = set129 + local result130 = {} + local size131 = buffer:readInt() + if size131 > 0 then + for index132 = 1, size131 do + local map133 = buffer:readIntStringMap() + table.insert(result130, map133) end end - packet.cccc = result128 - local result132 = byteBuffer:readLong() - packet.d = result132 - local result133 = byteBuffer:readLong() - packet.dd = result133 - local result134 = {} - local size136 = byteBuffer:readInt() - if size136 > 0 then - for index135 = 1, size136 do - local result137 = byteBuffer:readLong() - table.insert(result134, result137) - end + packet.sssss = result130 + if not(buffer:isReadable()) then + return packet end - packet.ddd = result134 - local result138 = {} - local size140 = byteBuffer:readInt() - if size140 > 0 then - for index139 = 1, size140 do - local result141 = byteBuffer:readLong() - table.insert(result138, result141) - end + local result134 = buffer:readInt() + packet.myCompatible = result134 + if not(buffer:isReadable()) then + return packet end - packet.dddd = result138 - local result142 = byteBuffer:readFloat() - packet.e = result142 - local result143 = byteBuffer:readFloat() - packet.ee = result143 - local result144 = {} - local size146 = byteBuffer:readInt() - if size146 > 0 then - for index145 = 1, size146 do - local result147 = byteBuffer:readFloat() - table.insert(result144, result147) - end - end - packet.eee = result144 - local result148 = {} - local size150 = byteBuffer:readInt() - if size150 > 0 then - for index149 = 1, size150 do - local result151 = byteBuffer:readFloat() - table.insert(result148, result151) - end - end - packet.eeee = result148 - local result152 = byteBuffer:readDouble() - packet.f = result152 - local result153 = byteBuffer:readDouble() - packet.ff = result153 - local result154 = {} - local size156 = byteBuffer:readInt() - if size156 > 0 then - for index155 = 1, size156 do - local result157 = byteBuffer:readDouble() - table.insert(result154, result157) - end - end - packet.fff = result154 - local result158 = {} - local size160 = byteBuffer:readInt() - if size160 > 0 then - for index159 = 1, size160 do - local result161 = byteBuffer:readDouble() - table.insert(result158, result161) - end - end - packet.ffff = result158 - local result162 = byteBuffer:readBoolean() - packet.g = result162 - local result163 = byteBuffer:readBoolean() - packet.gg = result163 - local result164 = {} - local size166 = byteBuffer:readInt() - if size166 > 0 then - for index165 = 1, size166 do - local result167 = byteBuffer:readBoolean() - table.insert(result164, result167) - end - end - packet.ggg = result164 - local result168 = {} - local size170 = byteBuffer:readInt() - if size170 > 0 then - for index169 = 1, size170 do - local result171 = byteBuffer:readBoolean() - table.insert(result168, result171) - end - end - packet.gggg = result168 - local result172 = byteBuffer:readChar() - packet.h = result172 - local result173 = byteBuffer:readChar() - packet.hh = result173 - local result174 = {} - local size176 = byteBuffer:readInt() - if size176 > 0 then - for index175 = 1, size176 do - local result177 = byteBuffer:readChar() - table.insert(result174, result177) - end - end - packet.hhh = result174 - local result178 = {} - local size180 = byteBuffer:readInt() - if size180 > 0 then - for index179 = 1, size180 do - local result181 = byteBuffer:readChar() - table.insert(result178, result181) - end - end - packet.hhhh = result178 - local result182 = byteBuffer:readString() - packet.jj = result182 - local result183 = {} - local size185 = byteBuffer:readInt() - if size185 > 0 then - for index184 = 1, size185 do - local result186 = byteBuffer:readString() - table.insert(result183, result186) - end - end - packet.jjj = result183 - local result187 = ProtocolManager.getProtocol(1116):read(byteBuffer) - packet.kk = result187 - local result188 = {} - local size190 = byteBuffer:readInt() - if size190 > 0 then - for index189 = 1, size190 do - local result191 = ProtocolManager.getProtocol(1116):read(byteBuffer) - table.insert(result188, result191) - end - end - packet.kkk = result188 - local result192 = {} - local size193 = byteBuffer:readInt() - if size193 > 0 then - for index194 = 1, size193 do - local result195 = byteBuffer:readInt() - table.insert(result192, result195) - end - end - packet.l = result192 - local result196 = {} - local size197 = byteBuffer:readInt() - if size197 > 0 then - for index198 = 1, size197 do - local result199 = {} - local size200 = byteBuffer:readInt() - if size200 > 0 then - for index201 = 1, size200 do - local result202 = {} - local size203 = byteBuffer:readInt() - if size203 > 0 then - for index204 = 1, size203 do - local result205 = byteBuffer:readInt() - table.insert(result202, result205) - end - end - table.insert(result199, result202) - end - end - table.insert(result196, result199) - end - end - packet.ll = result196 - local result206 = {} - local size207 = byteBuffer:readInt() - if size207 > 0 then - for index208 = 1, size207 do - local result209 = {} - local size210 = byteBuffer:readInt() - if size210 > 0 then - for index211 = 1, size210 do - local result212 = ProtocolManager.getProtocol(1116):read(byteBuffer) - table.insert(result209, result212) - end - end - table.insert(result206, result209) - end - end - packet.lll = result206 - local result213 = {} - local size214 = byteBuffer:readInt() - if size214 > 0 then - for index215 = 1, size214 do - local result216 = byteBuffer:readString() - table.insert(result213, result216) - end - end - packet.llll = result213 - local result217 = {} - local size218 = byteBuffer:readInt() - if size218 > 0 then - for index219 = 1, size218 do - local result220 = {} - local size221 = byteBuffer:readInt() - if size221 > 0 then - for index222 = 1, size221 do - local result223 = byteBuffer:readInt() - local result224 = byteBuffer:readString() - result220[result223] = result224 - end - end - table.insert(result217, result220) - end - end - packet.lllll = result217 - local result225 = {} - local size226 = byteBuffer:readInt() - if size226 > 0 then - for index227 = 1, size226 do - local result228 = byteBuffer:readInt() - local result229 = byteBuffer:readString() - result225[result228] = result229 - end - end - packet.m = result225 - local result230 = {} - local size231 = byteBuffer:readInt() - if size231 > 0 then - for index232 = 1, size231 do - local result233 = byteBuffer:readInt() - local result234 = ProtocolManager.getProtocol(1116):read(byteBuffer) - result230[result233] = result234 - end - end - packet.mm = result230 - local result235 = {} - local size236 = byteBuffer:readInt() - if size236 > 0 then - for index237 = 1, size236 do - local result238 = ProtocolManager.getProtocol(1116):read(byteBuffer) - local result239 = {} - local size240 = byteBuffer:readInt() - if size240 > 0 then - for index241 = 1, size240 do - local result242 = byteBuffer:readInt() - table.insert(result239, result242) - end - end - result235[result238] = result239 - end - end - packet.mmm = result235 - local result243 = {} - local size244 = byteBuffer:readInt() - if size244 > 0 then - for index245 = 1, size244 do - local result246 = {} - local size247 = byteBuffer:readInt() - if size247 > 0 then - for index248 = 1, size247 do - local result249 = {} - local size250 = byteBuffer:readInt() - if size250 > 0 then - for index251 = 1, size250 do - local result252 = ProtocolManager.getProtocol(1116):read(byteBuffer) - table.insert(result249, result252) - end - end - table.insert(result246, result249) - end - end - local result253 = {} - local size254 = byteBuffer:readInt() - if size254 > 0 then - for index255 = 1, size254 do - local result256 = {} - local size257 = byteBuffer:readInt() - if size257 > 0 then - for index258 = 1, size257 do - local result259 = {} - local size260 = byteBuffer:readInt() - if size260 > 0 then - for index261 = 1, size260 do - local result262 = byteBuffer:readInt() - table.insert(result259, result262) - end - end - table.insert(result256, result259) - end - end - table.insert(result253, result256) - end - end - result243[result246] = result253 - end - end - packet.mmmm = result243 - local result263 = {} - local size264 = byteBuffer:readInt() - if size264 > 0 then - for index265 = 1, size264 do - local result266 = {} - local size267 = byteBuffer:readInt() - if size267 > 0 then - for index268 = 1, size267 do - local result269 = {} - local size270 = byteBuffer:readInt() - if size270 > 0 then - for index271 = 1, size270 do - local result272 = byteBuffer:readInt() - local result273 = byteBuffer:readString() - result269[result272] = result273 - end - end - table.insert(result266, result269) - end - end - local result274 = {} - local size275 = byteBuffer:readInt() - if size275 > 0 then - for index276 = 1, size275 do - local result277 = {} - local size278 = byteBuffer:readInt() - if size278 > 0 then - for index279 = 1, size278 do - local result280 = byteBuffer:readInt() - local result281 = byteBuffer:readString() - result277[result280] = result281 - end - end - result274[result277] = result277 - end - end - result263[result266] = result274 - end - end - packet.mmmmm = result263 - local result282 = {} - local size283 = byteBuffer:readInt() - if size283 > 0 then - for index284 = 1, size283 do - local result285 = byteBuffer:readInt() - result282[result285] = result285 - end - end - packet.s = result282 - local result286 = {} - local size287 = byteBuffer:readInt() - if size287 > 0 then - for index288 = 1, size287 do - local result289 = {} - local size290 = byteBuffer:readInt() - if size290 > 0 then - for index291 = 1, size290 do - local result292 = {} - local size293 = byteBuffer:readInt() - if size293 > 0 then - for index294 = 1, size293 do - local result295 = byteBuffer:readInt() - table.insert(result292, result295) - end - end - result289[result292] = result292 - end - end - result286[result289] = result289 - end - end - packet.ss = result286 - local result296 = {} - local size297 = byteBuffer:readInt() - if size297 > 0 then - for index298 = 1, size297 do - local result299 = {} - local size300 = byteBuffer:readInt() - if size300 > 0 then - for index301 = 1, size300 do - local result302 = ProtocolManager.getProtocol(1116):read(byteBuffer) - result299[result302] = result302 - end - end - result296[result299] = result299 - end - end - packet.sss = result296 - local result303 = {} - local size304 = byteBuffer:readInt() - if size304 > 0 then - for index305 = 1, size304 do - local result306 = byteBuffer:readString() - result303[result306] = result306 - end - end - packet.ssss = result303 - local result307 = {} - local size308 = byteBuffer:readInt() - if size308 > 0 then - for index309 = 1, size308 do - local result310 = {} - local size311 = byteBuffer:readInt() - if size311 > 0 then - for index312 = 1, size311 do - local result313 = byteBuffer:readInt() - local result314 = byteBuffer:readString() - result310[result313] = result314 - end - end - result307[result310] = result310 - end - end - packet.sssss = result307 + local result135 = buffer:readPacket(102) + packet.myObject = result135 return packet end diff --git a/protocol/src/test/lua/LuaProtocol/Packet/NormalObject.lua b/protocol/src/test/lua/LuaProtocol/Packet/NormalObject.lua index 216098de..503a1c86 100644 --- a/protocol/src/test/lua/LuaProtocol/Packet/NormalObject.lua +++ b/protocol/src/test/lua/LuaProtocol/Packet/NormalObject.lua @@ -1,34 +1,23 @@ -- @author jaysunxiao --- @version 1.0 --- @since 2021-02-07 17:18 - -local ProtocolManager = require("LuaProtocol.ProtocolManager") +-- @version 3.0 local NormalObject = {} -function NormalObject:new(a, aaa, b, bbb, c, ccc, d, ddd, e, eee, f, fff, g, ggg, h, hhh, jj, jjj, kk, kkk, l, llll, m, mm, s, ssss) +function NormalObject:new(a, aaa, b, c, d, e, f, g, jj, kk, l, ll, lll, llll, m, mm, s, ssss) local obj = { a = a, -- byte aaa = aaa, -- byte[] b = b, -- short - bbb = bbb, -- short[] c = c, -- int - ccc = ccc, -- int[] d = d, -- long - ddd = ddd, -- long[] e = e, -- float - eee = eee, -- float[] f = f, -- double - fff = fff, -- double[] g = g, -- boolean - ggg = ggg, -- boolean[] - h = h, -- char - hhh = hhh, -- char[] jj = jj, -- java.lang.String - jjj = jjj, -- java.lang.String[] kk = kk, -- com.zfoo.protocol.packet.ObjectA - kkk = kkk, -- com.zfoo.protocol.packet.ObjectA[] l = l, -- java.util.List + ll = ll, -- java.util.List + lll = lll, -- java.util.List llll = llll, -- java.util.List m = m, -- java.util.Map mm = mm, -- java.util.Map @@ -41,328 +30,74 @@ function NormalObject:new(a, aaa, b, bbb, c, ccc, d, ddd, e, eee, f, fff, g, ggg end function NormalObject:protocolId() - return 1161 + return 101 end -function NormalObject:write(byteBuffer, packet) - if packet == null then - byteBuffer:writeBoolean(false) +function NormalObject:write(buffer, packet) + if buffer:writePacketFlag(packet) then return end - byteBuffer:writeBoolean(true) - byteBuffer:writeByte(packet.a) - if packet.aaa == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.aaa); - for index0, element1 in pairs(packet.aaa) do - byteBuffer:writeByte(element1) - end - end - byteBuffer:writeShort(packet.b) - if packet.bbb == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.bbb); - for index2, element3 in pairs(packet.bbb) do - byteBuffer:writeShort(element3) - end - end - byteBuffer:writeInt(packet.c) - if packet.ccc == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.ccc); - for index4, element5 in pairs(packet.ccc) do - byteBuffer:writeInt(element5) - end - end - byteBuffer:writeLong(packet.d) - if packet.ddd == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.ddd); - for index6, element7 in pairs(packet.ddd) do - byteBuffer:writeLong(element7) - end - end - byteBuffer:writeFloat(packet.e) - if packet.eee == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.eee); - for index8, element9 in pairs(packet.eee) do - byteBuffer:writeFloat(element9) - end - end - byteBuffer:writeDouble(packet.f) - if packet.fff == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.fff); - for index10, element11 in pairs(packet.fff) do - byteBuffer:writeDouble(element11) - end - end - byteBuffer:writeBoolean(packet.g) - if packet.ggg == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.ggg); - for index12, element13 in pairs(packet.ggg) do - byteBuffer:writeBoolean(element13) - end - end - byteBuffer:writeChar(packet.h) - if packet.hhh == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.hhh); - for index14, element15 in pairs(packet.hhh) do - byteBuffer:writeChar(element15) - end - end - byteBuffer:writeString(packet.jj) - if packet.jjj == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.jjj); - for index16, element17 in pairs(packet.jjj) do - byteBuffer:writeString(element17) - end - end - ProtocolManager.getProtocol(1116):write(byteBuffer, packet.kk) - if packet.kkk == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.kkk); - for index18, element19 in pairs(packet.kkk) do - ProtocolManager.getProtocol(1116):write(byteBuffer, element19) - end - end - if packet.l == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.l) - for index20, element21 in pairs(packet.l) do - byteBuffer:writeInt(element21) - end - end - if packet.llll == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(#packet.llll) - for index22, element23 in pairs(packet.llll) do - byteBuffer:writeString(element23) - end - end - if packet.m == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(packet.m)) - for key24, value25 in pairs(packet.m) do - byteBuffer:writeInt(key24) - byteBuffer:writeString(value25) - end - end - if packet.mm == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(packet.mm)) - for key26, value27 in pairs(packet.mm) do - byteBuffer:writeInt(key26) - ProtocolManager.getProtocol(1116):write(byteBuffer, value27) - end - end - if packet.s == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.setSize(packet.s)) - for index28, element29 in pairs(packet.s) do - byteBuffer:writeInt(element29) - end - end - if packet.ssss == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.setSize(packet.ssss)) - for index30, element31 in pairs(packet.ssss) do - byteBuffer:writeString(element31) - end - end + 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:writeBoolean(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) end -function NormalObject:read(byteBuffer) - if not(byteBuffer:readBoolean()) then +function NormalObject:read(buffer) + if not(buffer:readBoolean()) then return nil end local packet = NormalObject:new() - local result32 = byteBuffer:readByte() - packet.a = result32 - local result33 = {} - local size35 = byteBuffer:readInt() - if size35 > 0 then - for index34 = 1, size35 do - local result36 = byteBuffer:readByte() - table.insert(result33, result36) - end - end - packet.aaa = result33 - local result37 = byteBuffer:readShort() - packet.b = result37 - local result38 = {} - local size40 = byteBuffer:readInt() - if size40 > 0 then - for index39 = 1, size40 do - local result41 = byteBuffer:readShort() - table.insert(result38, result41) - end - end - packet.bbb = result38 - local result42 = byteBuffer:readInt() - packet.c = result42 - local result43 = {} - local size45 = byteBuffer:readInt() - if size45 > 0 then - for index44 = 1, size45 do - local result46 = byteBuffer:readInt() - table.insert(result43, result46) - end - end - packet.ccc = result43 - local result47 = byteBuffer:readLong() - packet.d = result47 - local result48 = {} - local size50 = byteBuffer:readInt() - if size50 > 0 then - for index49 = 1, size50 do - local result51 = byteBuffer:readLong() - table.insert(result48, result51) - end - end - packet.ddd = result48 - local result52 = byteBuffer:readFloat() - packet.e = result52 - local result53 = {} - local size55 = byteBuffer:readInt() - if size55 > 0 then - for index54 = 1, size55 do - local result56 = byteBuffer:readFloat() - table.insert(result53, result56) - end - end - packet.eee = result53 - local result57 = byteBuffer:readDouble() - packet.f = result57 - local result58 = {} - local size60 = byteBuffer:readInt() - if size60 > 0 then - for index59 = 1, size60 do - local result61 = byteBuffer:readDouble() - table.insert(result58, result61) - end - end - packet.fff = result58 - local result62 = byteBuffer:readBoolean() - packet.g = result62 - local result63 = {} - local size65 = byteBuffer:readInt() - if size65 > 0 then - for index64 = 1, size65 do - local result66 = byteBuffer:readBoolean() - table.insert(result63, result66) - end - end - packet.ggg = result63 - local result67 = byteBuffer:readChar() - packet.h = result67 - local result68 = {} - local size70 = byteBuffer:readInt() - if size70 > 0 then - for index69 = 1, size70 do - local result71 = byteBuffer:readChar() - table.insert(result68, result71) - end - end - packet.hhh = result68 - local result72 = byteBuffer:readString() - packet.jj = result72 - local result73 = {} - local size75 = byteBuffer:readInt() - if size75 > 0 then - for index74 = 1, size75 do - local result76 = byteBuffer:readString() - table.insert(result73, result76) - end - end - packet.jjj = result73 - local result77 = ProtocolManager.getProtocol(1116):read(byteBuffer) - packet.kk = result77 - local result78 = {} - local size80 = byteBuffer:readInt() - if size80 > 0 then - for index79 = 1, size80 do - local result81 = ProtocolManager.getProtocol(1116):read(byteBuffer) - table.insert(result78, result81) - end - end - packet.kkk = result78 - local result82 = {} - local size83 = byteBuffer:readInt() - if size83 > 0 then - for index84 = 1, size83 do - local result85 = byteBuffer:readInt() - table.insert(result82, result85) - end - end - packet.l = result82 - local result86 = {} - local size87 = byteBuffer:readInt() - if size87 > 0 then - for index88 = 1, size87 do - local result89 = byteBuffer:readString() - table.insert(result86, result89) - end - end - packet.llll = result86 - local result90 = {} - local size91 = byteBuffer:readInt() - if size91 > 0 then - for index92 = 1, size91 do - local result93 = byteBuffer:readInt() - local result94 = byteBuffer:readString() - result90[result93] = result94 - end - end - packet.m = result90 - local result95 = {} - local size96 = byteBuffer:readInt() - if size96 > 0 then - for index97 = 1, size96 do - local result98 = byteBuffer:readInt() - local result99 = ProtocolManager.getProtocol(1116):read(byteBuffer) - result95[result98] = result99 - end - end - packet.mm = result95 - local result100 = {} - local size101 = byteBuffer:readInt() - if size101 > 0 then - for index102 = 1, size101 do - local result103 = byteBuffer:readInt() - result100[result103] = result103 - end - end - packet.s = result100 - local result104 = {} - local size105 = byteBuffer:readInt() - if size105 > 0 then - for index106 = 1, size105 do - local result107 = byteBuffer:readString() - result104[result107] = result107 - end - end - packet.ssss = result104 + local result0 = buffer:readByte() + packet.a = result0 + local array1 = buffer:readByteArray() + packet.aaa = array1 + local result2 = buffer:readShort() + packet.b = result2 + local result3 = buffer:readInt() + packet.c = result3 + local result4 = buffer:readLong() + packet.d = result4 + local result5 = buffer:readFloat() + packet.e = result5 + local result6 = buffer:readDouble() + packet.f = result6 + local result7 = buffer:readBoolean() + packet.g = result7 + local result8 = buffer:readString() + packet.jj = result8 + local result9 = buffer:readPacket(102) + packet.kk = result9 + local list10 = buffer:readIntArray() + packet.l = list10 + local list11 = buffer:readLongArray() + packet.ll = list11 + local list12 = buffer:readPacketArray(102) + packet.lll = list12 + local list13 = buffer:readStringArray() + packet.llll = list13 + local map14 = buffer:readIntStringMap() + packet.m = map14 + local map15 = buffer:readIntPacketMap(102) + packet.mm = map15 + local set16 = buffer:readIntArray() + packet.s = set16 + local set17 = buffer:readStringArray() + packet.ssss = set17 return packet end diff --git a/protocol/src/test/lua/LuaProtocol/Packet/ObjectA.lua b/protocol/src/test/lua/LuaProtocol/Packet/ObjectA.lua index df3bfab8..7c7d8a48 100644 --- a/protocol/src/test/lua/LuaProtocol/Packet/ObjectA.lua +++ b/protocol/src/test/lua/LuaProtocol/Packet/ObjectA.lua @@ -1,8 +1,5 @@ -- @author jaysunxiao --- @version 1.0 --- @since 2017 10.12 15:39 - -local ProtocolManager = require("LuaProtocol.ProtocolManager") +-- @version 3.0 local ObjectA = {} @@ -18,47 +15,29 @@ function ObjectA:new(a, m, objectB) end function ObjectA:protocolId() - return 1116 + return 102 end -function ObjectA:write(byteBuffer, packet) - if packet == null then - byteBuffer:writeBoolean(false) +function ObjectA:write(buffer, packet) + if buffer:writePacketFlag(packet) then return end - byteBuffer:writeBoolean(true) - byteBuffer:writeInt(packet.a) - if packet.m == null then - byteBuffer:writeInt(0) - else - byteBuffer:writeInt(table.mapSize(packet.m)) - for key0, value1 in pairs(packet.m) do - byteBuffer:writeInt(key0) - byteBuffer:writeString(value1) - end - end - ProtocolManager.getProtocol(1117):write(byteBuffer, packet.objectB) + buffer:writeInt(packet.a) + buffer:writeIntStringMap(packet.m) + buffer:writePacket(packet.objectB, 103) end -function ObjectA:read(byteBuffer) - if not(byteBuffer:readBoolean()) then +function ObjectA:read(buffer) + if not(buffer:readBoolean()) then return nil end local packet = ObjectA:new() - local result2 = byteBuffer:readInt() - packet.a = result2 - local result3 = {} - local size4 = byteBuffer:readInt() - if size4 > 0 then - for index5 = 1, size4 do - local result6 = byteBuffer:readInt() - local result7 = byteBuffer:readString() - result3[result6] = result7 - end - end - packet.m = result3 - local result8 = ProtocolManager.getProtocol(1117):read(byteBuffer) - packet.objectB = result8 + local result0 = buffer:readInt() + packet.a = result0 + local map1 = buffer:readIntStringMap() + packet.m = map1 + local result2 = buffer:readPacket(103) + packet.objectB = result2 return packet end diff --git a/protocol/src/test/lua/LuaProtocol/Packet/ObjectB.lua b/protocol/src/test/lua/LuaProtocol/Packet/ObjectB.lua index 37c58491..b8963b81 100644 --- a/protocol/src/test/lua/LuaProtocol/Packet/ObjectB.lua +++ b/protocol/src/test/lua/LuaProtocol/Packet/ObjectB.lua @@ -1,6 +1,5 @@ -- @author jaysunxiao --- @version 1.0 --- @since 2017 10.12 15:39 +-- @version 3.0 local ObjectB = {} @@ -14,24 +13,22 @@ function ObjectB:new(flag) end function ObjectB:protocolId() - return 1117 + return 103 end -function ObjectB:write(byteBuffer, packet) - if packet == null then - byteBuffer:writeBoolean(false) +function ObjectB:write(buffer, packet) + if buffer:writePacketFlag(packet) then return end - byteBuffer:writeBoolean(true) - byteBuffer:writeBoolean(packet.flag) + buffer:writeBoolean(packet.flag) end -function ObjectB:read(byteBuffer) - if not(byteBuffer:readBoolean()) then +function ObjectB:read(buffer) + if not(buffer:readBoolean()) then return nil end local packet = ObjectB:new() - local result0 = byteBuffer:readBoolean() + local result0 = buffer:readBoolean() packet.flag = result0 return packet end diff --git a/protocol/src/test/lua/LuaProtocol/Packet/SimpleObject.lua b/protocol/src/test/lua/LuaProtocol/Packet/SimpleObject.lua index 37e61e48..ea8484e3 100644 --- a/protocol/src/test/lua/LuaProtocol/Packet/SimpleObject.lua +++ b/protocol/src/test/lua/LuaProtocol/Packet/SimpleObject.lua @@ -1,6 +1,5 @@ -- @author jaysunxiao --- @version 1.0 --- @since 2021-03-27 15:18 +-- @version 3.0 local SimpleObject = {} @@ -15,27 +14,25 @@ function SimpleObject:new(c, g) end function SimpleObject:protocolId() - return 1163 + return 104 end -function SimpleObject:write(byteBuffer, packet) - if packet == null then - byteBuffer:writeBoolean(false) +function SimpleObject:write(buffer, packet) + if buffer:writePacketFlag(packet) then return end - byteBuffer:writeBoolean(true) - byteBuffer:writeInt(packet.c) - byteBuffer:writeBoolean(packet.g) + buffer:writeInt(packet.c) + buffer:writeBoolean(packet.g) end -function SimpleObject:read(byteBuffer) - if not(byteBuffer:readBoolean()) then +function SimpleObject:read(buffer) + if not(buffer:readBoolean()) then return nil end local packet = SimpleObject:new() - local result0 = byteBuffer:readInt() + local result0 = buffer:readInt() packet.c = result0 - local result1 = byteBuffer:readBoolean() + local result1 = buffer:readBoolean() packet.g = result1 return packet end diff --git a/protocol/src/test/lua/LuaProtocol/ProtocolManager.lua b/protocol/src/test/lua/LuaProtocol/ProtocolManager.lua index b02b37de..b3c8f39d 100644 --- a/protocol/src/test/lua/LuaProtocol/ProtocolManager.lua +++ b/protocol/src/test/lua/LuaProtocol/ProtocolManager.lua @@ -1,19 +1,8 @@ -local ByteBuffer = require("LuaProtocol.Buffer.ByteBuffer") - protocols = {} ProtocolManager = {} --- table扩展方法,后去set和map的大小 -function table.setSize(set) - local size = 0 - for _,_ in pairs(set) do - size = size + 1 - end - return size -end - - +-- table扩展方法,map的大小 function table.mapSize(map) local size = 0 for _,_ in pairs(map) do @@ -30,38 +19,30 @@ function ProtocolManager.getProtocol(protocolId) return protocol end -function ProtocolManager.write(byteBuffer, packet) +function ProtocolManager.write(buffer, packet) local protocolId = packet:protocolId() -- 写入协议号 - byteBuffer:writeShort(protocolId) + buffer:writeShort(protocolId) -- 写入包体 - ProtocolManager.getProtocol(protocolId):write(byteBuffer, packet) + ProtocolManager.getProtocol(protocolId):write(buffer, packet) end -function ProtocolManager.read(byteBuffer) - local protocolId = byteBuffer:readShort() - return ProtocolManager.getProtocol(protocolId):read(byteBuffer) -end - --- C#传进来的byte数组到lua里就会变成string -function readBytes(bytes) - local byteBuffer = ByteBuffer:new() - byteBuffer:writeBuffer(bytes) - local packet = ProtocolManager.read(byteBuffer) - return packet +function ProtocolManager.read(buffer) + local protocolId = buffer:readShort() + return ProtocolManager.getProtocol(protocolId):read(buffer) end function initProtocol() - local ObjectA = require("LuaProtocol.Packet.ObjectA") - local ObjectB = require("LuaProtocol.Packet.ObjectB") local ComplexObject = require("LuaProtocol.Packet.ComplexObject") local NormalObject = require("LuaProtocol.Packet.NormalObject") + local ObjectA = require("LuaProtocol.Packet.ObjectA") + local ObjectB = require("LuaProtocol.Packet.ObjectB") local SimpleObject = require("LuaProtocol.Packet.SimpleObject") - protocols[1116] = ObjectA - protocols[1117] = ObjectB - protocols[1160] = ComplexObject - protocols[1161] = NormalObject - protocols[1163] = SimpleObject + protocols[100] = ComplexObject + protocols[101] = NormalObject + protocols[102] = ObjectA + protocols[103] = ObjectB + protocols[104] = SimpleObject end ProtocolManager.initProtocol = initProtocol diff --git a/protocol/src/test/lua/main.lua b/protocol/src/test/lua/main.lua index 60278de5..49f4775a 100644 --- a/protocol/src/test/lua/main.lua +++ b/protocol/src/test/lua/main.lua @@ -10,9 +10,11 @@ function complexObjectTest(bytes) byteBuffer:writeBuffer(bytes) local packet = ProtocolManager.read(byteBuffer) + -- complexObjec是老的协议,所以序列化回来myCompatible是nil,所以要重新赋值 + packet.myCompatible = 0 local newByteBuffer = ByteBuffer:new() ProtocolManager.write(newByteBuffer, packet) - assert(#byteBuffer.buffer == #newByteBuffer.buffer) + assert(#byteBuffer.buffer <= #newByteBuffer.buffer) -- set和map是无序的,所以有的时候输入和输出的字节流有可能不一致,但是长度一定是一致的 --for i = 1, #byteBuffer.buffer do @@ -134,4 +136,5 @@ function byteBufferTest() print("----------------------------------------------------") + print("Hello") end