parent
d98f6f7673
commit
c517f7b745
@ -0,0 +1,26 @@
|
|||||||
|
function InputMessage:getData()
|
||||||
|
local dataType = self:getU8()
|
||||||
|
if dataType == NetworkMessageTypes.Boolean then
|
||||||
|
return numbertoboolean(self:getU8())
|
||||||
|
elseif dataType == NetworkMessageTypes.Number then
|
||||||
|
return self:getU64()
|
||||||
|
elseif dataType == NetworkMessageTypes.String then
|
||||||
|
return self:getString()
|
||||||
|
elseif dataType == NetworkMessageTypes.Table then
|
||||||
|
return self:getTable()
|
||||||
|
else
|
||||||
|
perror('Unknown data type ' .. dataType)
|
||||||
|
end
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
function InputMessage:getTable()
|
||||||
|
local ret = {}
|
||||||
|
local size = self:getU32()
|
||||||
|
for i=1,size do
|
||||||
|
local index = self:getData()
|
||||||
|
local value = self:getData()
|
||||||
|
ret[index] = value
|
||||||
|
end
|
||||||
|
return ret
|
||||||
|
end
|
@ -0,0 +1,42 @@
|
|||||||
|
function OutputMessage:addData(data)
|
||||||
|
if type(data) == 'boolean' then
|
||||||
|
self:addU8(NetworkMessageTypes.Boolean)
|
||||||
|
self:addU8(booleantonumber(data))
|
||||||
|
elseif type(data) == 'number' then
|
||||||
|
self:addU8(NetworkMessageTypes.Number)
|
||||||
|
self:addU64(data)
|
||||||
|
elseif type(data) == 'string' then
|
||||||
|
self:addU8(NetworkMessageTypes.String)
|
||||||
|
self:addString(data)
|
||||||
|
elseif type(data) == 'table' then
|
||||||
|
self:addU8(NetworkMessageTypes.Table)
|
||||||
|
self:addTable(data)
|
||||||
|
else
|
||||||
|
perror('Invalid data type ' .. type(data))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function OutputMessage:addTable(data)
|
||||||
|
local size = 0
|
||||||
|
|
||||||
|
-- reserve for size
|
||||||
|
local sizePos = self:getWritePos()
|
||||||
|
self:addU32(size)
|
||||||
|
local sizeSize = self:getWritePos() - sizePos
|
||||||
|
|
||||||
|
-- add values
|
||||||
|
for key,value in pairs(data) do
|
||||||
|
self:addData(key)
|
||||||
|
self:addData(value)
|
||||||
|
size = size + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
-- write size
|
||||||
|
local currentPos = self:getWritePos()
|
||||||
|
self:setWritePos(sizePos)
|
||||||
|
self:addU32(size)
|
||||||
|
|
||||||
|
-- fix msg size and go back to end
|
||||||
|
self:setMessageSize(self:getMessageSize() - sizeSize)
|
||||||
|
self:setWritePos(currentPos)
|
||||||
|
end
|
Loading…
Reference in new issue