313 lines
6.4 KiB
Lua
313 lines
6.4 KiB
Lua
-- Original chunk: @Lua\LuaFiles\LX6\Service\RPCSerializeBase.lua
|
|
-- Decompiled from: 00065_RPCSerializeBase.lua_87fc20cbb21f.luajit
|
|
|
|
local Serializer = uv0
|
|
local SerializeObjectMarkNull = 0
|
|
local SerializeObjectMarkCommon = 255
|
|
|
|
function Serializer.WritePrimitive(writer, val, nontrivial, default)
|
|
if not val then
|
|
nontrivial(writer, default)
|
|
else
|
|
nontrivial(writer, val)
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteStringWrap(nullable, name, limit)
|
|
return function (writer, val)
|
|
writer:WriteString(val, nullable, name, limit)
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteStruct(writer, val, nontrivial, name)
|
|
if not val then
|
|
print_error("[RPC] WriteStruct '" .. name .. "' = nil")
|
|
nontrivial(writer, uv0)
|
|
else
|
|
nontrivial(writer, val)
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteStructWrap(nontrivial, name)
|
|
return function (writer, val)
|
|
Serializer.WriteStruct(writer, val, nontrivial, name)
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteBuffer(writer, val, name, nullable, limit, length)
|
|
if not val then
|
|
if nullable then
|
|
writer:WriteByte(SerializeObjectMarkNull)
|
|
else
|
|
print_error("[RPC] WriteBuffer '" .. name .. "' = nil")
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
writer:WriteInt32(0)
|
|
end
|
|
|
|
return
|
|
else
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
writer:WriteBuffer(val, length or -1, limit)
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteBuffer7Bit(writer, val, name, nullable, limit, length)
|
|
if not val then
|
|
if nullable then
|
|
writer:WriteByte(SerializeObjectMarkNull)
|
|
else
|
|
print_error("[RPC] WriteBuffer '" .. name .. "' = nil")
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
writer:Write7BitEncodedInt(0)
|
|
end
|
|
|
|
return
|
|
else
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
writer:WriteBuffer7Bit(val, length or -1, limit)
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteComplexWrap(nontrivial, name, nullable)
|
|
return function (writer, val)
|
|
Serializer.WriteComplex(writer, val, nontrivial, name, nullable)
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteComplex(writer, val, nontrivial, name, nullable)
|
|
if not val then
|
|
if nullable then
|
|
writer:WriteByte(SerializeObjectMarkNull)
|
|
else
|
|
print_error("[RPC] WriteComplex '" .. name .. "' = nil")
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
nontrivial(writer, SerializeObjectMarkNull)
|
|
end
|
|
|
|
return
|
|
else
|
|
if type(val) == "userdata" then
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
nontrivial(writer, val)
|
|
|
|
return
|
|
end
|
|
|
|
if not val._tp then
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
else
|
|
writer:WriteByte(val._tp)
|
|
end
|
|
|
|
nontrivial(writer, val)
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteList(writer, val, itemWriter, default, name, nullable, limit, length)
|
|
if not val then
|
|
if nullable then
|
|
writer:WriteByte(SerializeObjectMarkNull)
|
|
else
|
|
print_error("[RPC] WriteList '" .. name .. "' = nil")
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
writer:WriteInt32(0)
|
|
end
|
|
|
|
return
|
|
else
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
end
|
|
|
|
local function counter(val)
|
|
local count = 0
|
|
|
|
for n in pairs(val) do
|
|
if count < n then
|
|
count = n or count
|
|
end
|
|
end
|
|
|
|
return count
|
|
end
|
|
|
|
local num = length or val.Count or counter(val)
|
|
|
|
if limit > 0 and limit < num then
|
|
error("[RPC] WriteList '" .. name .. "' exceed count=" .. num .. " limit=" .. limit)
|
|
end
|
|
|
|
writer:WriteInt32(num)
|
|
|
|
if val.get_Item then
|
|
for i = 0, num - 1 do
|
|
local item = val:get_Item(i)
|
|
|
|
if not item then
|
|
itemWriter(writer, default)
|
|
else
|
|
itemWriter(writer, item)
|
|
end
|
|
end
|
|
else
|
|
for i = 1, num do
|
|
local item = val[i]
|
|
|
|
if not item then
|
|
itemWriter(writer, default)
|
|
else
|
|
itemWriter(writer, item)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteList7Bit(writer, val, itemWriter, default, name, nullable, limit, length)
|
|
if not val then
|
|
if nullable then
|
|
writer:WriteByte(SerializeObjectMarkNull)
|
|
else
|
|
print_error("[RPC] WriteList '" .. name .. "' = nil")
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
writer:Write7BitEncodedInt(0)
|
|
end
|
|
|
|
return
|
|
else
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
end
|
|
|
|
local function counter(val)
|
|
local count = 0
|
|
|
|
for n in pairs(val) do
|
|
if count < n then
|
|
count = n or count
|
|
end
|
|
end
|
|
|
|
return count
|
|
end
|
|
|
|
local num = length or val.Count or counter(val)
|
|
|
|
if limit > 0 and limit < num then
|
|
error("[RPC] WriteList '" .. name .. "' exceed count=" .. num .. " limit=" .. limit)
|
|
end
|
|
|
|
writer:Write7BitEncodedInt(num)
|
|
|
|
if val.get_Item then
|
|
for i = 0, num - 1 do
|
|
local item = val:get_Item(i)
|
|
|
|
if not item then
|
|
itemWriter(writer, default)
|
|
else
|
|
itemWriter(writer, item)
|
|
end
|
|
end
|
|
else
|
|
for i = 1, num do
|
|
local item = val[i]
|
|
|
|
if not item then
|
|
itemWriter(writer, default)
|
|
else
|
|
itemWriter(writer, item)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteDict(writer, val, keyWriter, itemWriter, default, name, nullable, limit)
|
|
if not val then
|
|
if nullable then
|
|
writer:WriteByte(SerializeObjectMarkNull)
|
|
else
|
|
print_error("[RPC] WriteDict '" .. name .. "' = nil")
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
writer:WriteInt32(0)
|
|
end
|
|
|
|
return
|
|
else
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
end
|
|
|
|
local count = 0
|
|
|
|
for n in pairs(val) do
|
|
count = count + 1
|
|
end
|
|
|
|
if limit > 0 and limit < count then
|
|
error("[RPC] WriteDict '" .. name .. "' exceed count=" .. count .. " limit=" .. limit)
|
|
end
|
|
|
|
writer:WriteInt32(count)
|
|
|
|
for k, v in pairs(val) do
|
|
keyWriter(writer, k)
|
|
|
|
if not v then
|
|
itemWriter(writer, default)
|
|
else
|
|
itemWriter(writer, v)
|
|
end
|
|
end
|
|
end
|
|
|
|
function Serializer.WriteDict7Bit(writer, val, keyWriter, itemWriter, default, name, nullable, limit)
|
|
if not val then
|
|
if nullable then
|
|
writer:WriteByte(SerializeObjectMarkNull)
|
|
else
|
|
print_error("[RPC] WriteDict '" .. name .. "' = nil")
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
writer:Write7BitEncodedInt(0)
|
|
end
|
|
|
|
return
|
|
else
|
|
writer:WriteByte(SerializeObjectMarkCommon)
|
|
end
|
|
|
|
local count = 0
|
|
|
|
for n in pairs(val) do
|
|
count = count + 1
|
|
end
|
|
|
|
if limit > 0 and limit < count then
|
|
error("[RPC] WriteDict '" .. name .. "' exceed count=" .. count .. " limit=" .. limit)
|
|
end
|
|
|
|
writer:Write7BitEncodedInt(count)
|
|
|
|
for k, v in pairs(val) do
|
|
keyWriter(writer, k)
|
|
|
|
if not v then
|
|
itemWriter(writer, default)
|
|
else
|
|
itemWriter(writer, v)
|
|
end
|
|
end
|
|
end
|
|
|
|
function Serializer.CheckEnum(value, typeName, defaultVal)
|
|
local enumDef = EnumCheck[typeName]
|
|
|
|
for _, v in pairs(enumDef) do
|
|
if v == value then
|
|
return value
|
|
end
|
|
end
|
|
|
|
print_error("[RPC] enum out of range " .. enumDef .. "=" .. value)
|
|
|
|
return defaultVal
|
|
end
|
|
|
|
return Serializer
|