test[lua]: lua protocol test

This commit is contained in:
godotg
2024-07-16 18:19:16 +08:00
parent 36949e923a
commit 1c1b09f876
7 changed files with 71 additions and 36 deletions
+4 -4
View File
@@ -52,10 +52,10 @@ end
function byteBufferTest()
local byteBuffer = ByteBuffer:new()
byteBuffer:writeBoolean(true)
byteBuffer:writeBoolean(false)
assert(byteBuffer:readBoolean() == true)
assert(byteBuffer:readBoolean() == false)
byteBuffer:writeBool(true)
byteBuffer:writeBool(false)
assert(byteBuffer:readBool() == true)
assert(byteBuffer:readBool() == false)
byteBuffer:setWriteOffset(1)
byteBuffer:setReadOffset(1)
+15 -11
View File
@@ -14,8 +14,8 @@ local zeroByte = string.char(0)
local ByteBuffer = {}
local trueBooleanStrValue = string.char(1)
local falseBooleanStrValue = string.char(0)
local trueBoolStrValue = string.char(1)
local falseBoolStrValue = string.char(0)
function serializeTableToJson(tbl)
local res = {}
@@ -127,6 +127,10 @@ function ByteBuffer:compatibleRead(beforeReadIndex, length)
end
-------------------------------------get和set-------------------------------------
function ByteBuffer:getBuffer()
return self.buffer
end
function ByteBuffer:getWriteOffset()
return self.writeOffset
end
@@ -166,19 +170,19 @@ end
-------------------------------------write和read-------------------------------------
--bool
function ByteBuffer:writeBoolean(boolValue)
function ByteBuffer:writeBool(boolValue)
if boolValue then
self:writeRawByteStr(trueBooleanStrValue)
self:writeRawByteStr(trueBoolStrValue)
else
self:writeRawByteStr(falseBooleanStrValue)
self:writeRawByteStr(falseBoolStrValue)
end
return self
end
function ByteBuffer:readBoolean()
function ByteBuffer:readBool()
-- When char > 256, the readUByte method will show an error.
-- So, we have to use readChar
return self:readRawByteStr() == trueBooleanStrValue
return self:readRawByteStr() == trueBoolStrValue
end
@@ -527,24 +531,24 @@ function ByteBuffer:readPacket(protocolId)
return protocolRegistration:read(self)
end
function ByteBuffer:writeBooleanArray(array)
function ByteBuffer:writeBoolArray(array)
if array == nil then
self:writeInt(0)
else
self:writeInt(#array)
for index, element in pairs(array) do
self:writeBoolean(element)
self:writeBool(element)
end
end
return self
end
function ByteBuffer:readBooleanArray()
function ByteBuffer:readBoolArray()
local array = {}
local size = self:readInt()
if size > 0 then
for index = 1, size do
table.insert(array, self:readBoolean())
table.insert(array, self:readBool())
end
end
return array
@@ -105,10 +105,10 @@ function ComplexObject:write(buffer, packet)
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:writeBool(packet.g)
buffer:writeBool(packet.gg)
buffer:writeBoolArray(packet.ggg)
buffer:writeBoolArray(packet.gggg)
buffer:writeString(packet.jj)
buffer:writeStringArray(packet.jjj)
buffer:writePacket(packet.kk, 102)
@@ -303,13 +303,13 @@ function ComplexObject:read(buffer)
packet.fff = array22
local array23 = buffer:readDoubleArray()
packet.ffff = array23
local result24 = buffer:readBoolean()
local result24 = buffer:readBool()
packet.g = result24
local result25 = buffer:readBoolean()
local result25 = buffer:readBool()
packet.gg = result25
local array26 = buffer:readBooleanArray()
local array26 = buffer:readBoolArray()
packet.ggg = array26
local array27 = buffer:readBooleanArray()
local array27 = buffer:readBoolArray()
packet.gggg = array27
local result28 = buffer:readString()
packet.jj = result28
@@ -1,4 +1,4 @@
-- 常规的对象,取所有语言语法的交集,基本上所有语言都支持下面的语法
local NormalObject = {}
function NormalObject:new()
@@ -6,6 +6,7 @@ function NormalObject:new()
a = 0, -- byte
aaa = {}, -- byte[]
b = 0, -- short
-- 整数类型
c = 0, -- int
d = 0, -- long
e = 0, -- float
@@ -20,7 +21,9 @@ function NormalObject:new()
m = {}, -- Dictionary<int, string>
mm = {}, -- Dictionary<int, ObjectA>
s = {}, -- HashSet<int>
ssss = {} -- HashSet<string>
ssss = {}, -- HashSet<string>
outCompatibleValue = 0, -- int
outCompatibleValue2 = 0 -- int
}
setmetatable(obj, self)
self.__index = self
@@ -44,7 +47,8 @@ function NormalObject:write(buffer, packet)
buffer:writeInt(0)
return
end
buffer:writeInt(-1)
local beforeWriteIndex = buffer:getWriteOffset()
buffer:writeInt(857)
buffer:writeByte(packet.a)
buffer:writeByteArray(packet.aaa)
buffer:writeShort(packet.b)
@@ -52,7 +56,7 @@ function NormalObject:write(buffer, packet)
buffer:writeLong(packet.d)
buffer:writeFloat(packet.e)
buffer:writeDouble(packet.f)
buffer:writeBoolean(packet.g)
buffer:writeBool(packet.g)
buffer:writeString(packet.jj)
buffer:writePacket(packet.kk, 102)
buffer:writeIntArray(packet.l)
@@ -63,6 +67,9 @@ function NormalObject:write(buffer, packet)
buffer:writeIntPacketMap(packet.mm, 102)
buffer:writeIntArray(packet.s)
buffer:writeStringArray(packet.ssss)
buffer:writeInt(packet.outCompatibleValue)
buffer:writeInt(packet.outCompatibleValue2)
buffer:adjustPadding(857, beforeWriteIndex)
end
function NormalObject:read(buffer)
@@ -86,7 +93,7 @@ function NormalObject:read(buffer)
packet.e = result5
local result6 = buffer:readDouble()
packet.f = result6
local result7 = buffer:readBoolean()
local result7 = buffer:readBool()
packet.g = result7
local result8 = buffer:readString()
packet.jj = result8
@@ -108,6 +115,14 @@ function NormalObject:read(buffer)
packet.s = set16
local set17 = buffer:readStringArray()
packet.ssss = set17
if buffer:compatibleRead(beforeReadIndex, length) then
local result18 = buffer:readInt()
packet.outCompatibleValue = result18
end
if buffer:compatibleRead(beforeReadIndex, length) then
local result19 = buffer:readInt()
packet.outCompatibleValue2 = result19
end
if length > 0 then
buffer:setReadOffset(beforeReadIndex + length)
end
@@ -5,7 +5,8 @@ function ObjectA:new()
local obj = {
a = 0, -- int
m = {}, -- Dictionary<int, string>
objectB = nil -- ObjectB
objectB = nil, -- ObjectB
innerCompatibleValue = 0 -- int
}
setmetatable(obj, self)
self.__index = self
@@ -29,10 +30,13 @@ function ObjectA:write(buffer, packet)
buffer:writeInt(0)
return
end
buffer:writeInt(-1)
local beforeWriteIndex = buffer:getWriteOffset()
buffer:writeInt(201)
buffer:writeInt(packet.a)
buffer:writeIntStringMap(packet.m)
buffer:writePacket(packet.objectB, 103)
buffer:writeInt(packet.innerCompatibleValue)
buffer:adjustPadding(201, beforeWriteIndex)
end
function ObjectA:read(buffer)
@@ -48,6 +52,10 @@ function ObjectA:read(buffer)
packet.m = map1
local result2 = buffer:readPacket(103)
packet.objectB = result2
if buffer:compatibleRead(beforeReadIndex, length) then
local result3 = buffer:readInt()
packet.innerCompatibleValue = result3
end
if length > 0 then
buffer:setReadOffset(beforeReadIndex + length)
end
@@ -3,7 +3,8 @@ local ObjectB = {}
function ObjectB:new()
local obj = {
flag = false -- bool
flag = false, -- bool
innerCompatibleValue = 0 -- int
}
setmetatable(obj, self)
self.__index = self
@@ -27,8 +28,11 @@ function ObjectB:write(buffer, packet)
buffer:writeInt(0)
return
end
buffer:writeInt(-1)
buffer:writeBoolean(packet.flag)
local beforeWriteIndex = buffer:getWriteOffset()
buffer:writeInt(4)
buffer:writeBool(packet.flag)
buffer:writeInt(packet.innerCompatibleValue)
buffer:adjustPadding(4, beforeWriteIndex)
end
function ObjectB:read(buffer)
@@ -38,8 +42,12 @@ function ObjectB:read(buffer)
end
local beforeReadIndex = buffer:getReadOffset()
local packet = ObjectB:new()
local result0 = buffer:readBoolean()
local result0 = buffer:readBool()
packet.flag = result0
if buffer:compatibleRead(beforeReadIndex, length) then
local result1 = buffer:readInt()
packet.innerCompatibleValue = result1
end
if length > 0 then
buffer:setReadOffset(beforeReadIndex + length)
end
@@ -30,7 +30,7 @@ function SimpleObject:write(buffer, packet)
end
buffer:writeInt(-1)
buffer:writeInt(packet.c)
buffer:writeBoolean(packet.g)
buffer:writeBool(packet.g)
end
function SimpleObject:read(buffer)
@@ -42,7 +42,7 @@ function SimpleObject:read(buffer)
local packet = SimpleObject:new()
local result0 = buffer:readInt()
packet.c = result0
local result1 = buffer:readBoolean()
local result1 = buffer:readBool()
packet.g = result1
if length > 0 then
buffer:setReadOffset(beforeReadIndex + length)