5e0d58cfad
EN: 1.2.0.60 CN: 1.2.0.61 JP: 1.2.0.63 KR: 1.2.0.67
69 lines
2.2 KiB
Lua
69 lines
2.2 KiB
Lua
require("libtdrlua")
|
|
local m = {}
|
|
for k, v in pairs(libtdrlua) do
|
|
m[k] = v
|
|
end
|
|
local load_metalib, load_metalib_buf, free_metalib, get_meta, table2buf, buf2table, str2table, metamaxbufsize, bufalloc, buffree, buf2str
|
|
load_metalib, m.load_metalib = m.load_metalib, nil
|
|
load_metalib_buf, m.load_metalib_buf = m.load_metalib_buf, nil
|
|
free_metalib, m.free_metalib = m.free_metalib, nil
|
|
get_meta, m.get_meta = m.get_meta, nil
|
|
table2buf, m.table2buf = m.table2buf, nil
|
|
buf2table, m.buf2table = m.buf2table, nil
|
|
str2table, m.str2table = m.str2table, nil
|
|
buf2str, m.buf2str = m.buf2str, nil
|
|
metamaxbufsize, m.metamaxbufsize = m.metamaxbufsize, nil
|
|
bufalloc, m.bufalloc = m.bufalloc, nil
|
|
buffree, m.buffree = m.buffree, nil
|
|
local create_msg_pk = function(meta, buf, buf_size)
|
|
return {
|
|
buff = buf,
|
|
pack = function(obj)
|
|
local ret_code, used_size = table2buf(meta, obj, buf, buf_size, 0)
|
|
if ret_code ~= 0 then
|
|
return ret_code, used_size
|
|
end
|
|
return buf2str(buf, used_size)
|
|
end,
|
|
unpack = function(str)
|
|
return libtdrlua.str2table(meta, str, 0)
|
|
end
|
|
}
|
|
end
|
|
local create_lib = function(metalib)
|
|
return setmetatable({}, {
|
|
__index = function(obj, k)
|
|
local ret_code, meta = libtdrlua.get_meta(metalib, k)
|
|
if ret_code ~= 0 then
|
|
error("libtdrlua.get_meta() failed: errno=" .. ret_code .. ",msg=" .. meta)
|
|
end
|
|
local ret_code, buf_size = libtdrlua.metamaxbufsize(metalib, k)
|
|
if ret_code ~= 0 then
|
|
error("libtdrlua.metamaxbufsize() failed: errno=" .. ret_code .. ",msg=" .. buf_size)
|
|
end
|
|
local ret_code, buf = libtdrlua.bufalloc(buf_size)
|
|
if ret_code ~= 0 then
|
|
error("libtdrlua.bufalloc() failed: errno=" .. ret_code .. ",msg=" .. buf)
|
|
end
|
|
local pk = create_msg_pk(meta, buf, buf_size)
|
|
rawset(obj, k, pk)
|
|
return pk
|
|
end
|
|
})
|
|
end
|
|
function m.from_file(file)
|
|
local ret_code, metalib = libtdrlua.load_metalib(file)
|
|
if ret_code ~= 0 then
|
|
error("libtdrlua.load_metalib() failed: " .. metalib)
|
|
end
|
|
return create_lib(metalib)
|
|
end
|
|
function m.from_memory(str)
|
|
local ret_code, metalib = libtdrlua.load_metalib_buf(str)
|
|
if ret_code ~= 0 then
|
|
error("libtdrlua.load_metalib_buf() failed: errno=" .. ret_code .. ",msg=" .. metalib)
|
|
end
|
|
return create_lib(metalib)
|
|
end
|
|
return m
|