Files
StellaSora_DataLua/lua/tdr/tdr.lua
T
SL1900 5e0d58cfad Initial version - 1.2.0.60
EN: 1.2.0.60
CN: 1.2.0.61
JP: 1.2.0.63
KR: 1.2.0.67
2025-12-03 01:00:00 +09:00

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