From 40ee98b40ed638859b898c508f579556f7976c43 Mon Sep 17 00:00:00 2001 From: JTrancender <582865471@qq.com> Date: Tue, 15 Feb 2022 21:01:54 +0800 Subject: [PATCH] feat: add sharetable queryall (#1536) Co-authored-by: Jason --- lualib/skynet/sharetable.lua | 25 +++++++++++++++++++++++++ test/testsharetable.lua | 13 +++++++++++++ 2 files changed, 38 insertions(+) diff --git a/lualib/skynet/sharetable.lua b/lualib/skynet/sharetable.lua index 8f0666bb..0c1329a9 100644 --- a/lualib/skynet/sharetable.lua +++ b/lualib/skynet/sharetable.lua @@ -92,6 +92,16 @@ local function sharetable_service() skynet.ret(skynet.pack(ptr)) end + function sharetable.queryall(source, filenamelist) + local ptrList = {} + for _, filename in ipairs(filenamelist) do + if files[filename] then + ptrList[filename] = query_file(source, filename) + end + end + skynet.ret(skynet.pack(ptrList)) + end + function sharetable.close(source) local list = clients[source] if list then @@ -208,6 +218,21 @@ function sharetable.query(filename) end end +function sharetable.queryall(filenamelist) + local list, t, map = {} + local ptrList = skynet.call(sharetable.address, "lua", "queryall", filenamelist) + for filename, ptr in pairs(ptrList) do + t = core.clone(ptr) + map = RECORD[filename] + if not map then + map = {} + RECORD[filename] = map + end + map[t] = true + list[filename] = t + end + return list +end local pairs = pairs local type = type diff --git a/test/testsharetable.lua b/test/testsharetable.lua index 016a286b..64fe83ea 100644 --- a/test/testsharetable.lua +++ b/test/testsharetable.lua @@ -1,6 +1,17 @@ local skynet = require "skynet" local sharetable = require "skynet.sharetable" +local function queryall_test() + sharetable.loadtable("test_one", {["message"] = "hello one", x = 1, 1}) + sharetable.loadtable("test_two", {["message"] = "hello two", x = 2, 2}) + local list = sharetable.queryall({"test_one", "test_two"}) + for filename, tbl in pairs(list) do + for k, v in pairs(tbl) do + print(filename, k, v) + end + end +end + skynet.start(function() -- You can also use sharetable.loadfile / sharetable.loadstring sharetable.loadtable ("test", { x=1,y={ 'hello world' },['hello world'] = true }) @@ -13,4 +24,6 @@ skynet.start(function() for k,v in pairs(t) do print(k,v) end + + queryall_test() end)