Files
Ananta-ps/Ananta.Proxy/proxy/lua/RPCSerializeBase.lua
T

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