kyototycoon lua 複数取得を少し変えてみた。
フラグデータを値データを分けて保管するためにluaを利用していたのですが
getの時
function get_player( inmap, outmap )
local key = inmap.key
local dbid = tonumber(inmap.db)
local playerdb = kt.dbs[dbid];
local item = playerdb:get(key)
if item then
local ix = kt.mapload(item)
for k,v in pairs(ix) do
outmap[k]=v
end
end
return kt.RVSUCCESS
end
local key = inmap.key
local dbid = tonumber(inmap.db)
local playerdb = kt.dbs[dbid];
local item = playerdb:get(key)
if item then
local ix = kt.mapload(item)
for k,v in pairs(ix) do
outmap[k]=v
end
end
return kt.RVSUCCESS
end
これで
ktremotemgr script -port 30132 get_player key test db 1
すると以下のデータを取得出来るのですが
flag 1
value testv
value testv
これだと複数取得のときと挙動が変わるので複数取得に併せようかなと
function get_player_bulk( inmap, outmap )
local dbid = tonumber(inmap.db)
local playerdb = kt.dbs[dbid];
local keys ={}
for ik,iv in pairs(inmap) do
table.insert(keys,ik)
end
local res = playerdb:get_bulk(keys)
if not res then
return kt.RVEINTERNAL
end
for key, value in pairs(res) do
local ix = kt.mapload(value)
local v = ”
for ik,iv in pairs(ix) do
if string.len(v) > 0 then
v = v .. “\t”
end
v = v .. ik .. “\t” .. iv
end
outmap[key] = v
end
return kt.RVSUCCESS
end
local dbid = tonumber(inmap.db)
local playerdb = kt.dbs[dbid];
local keys ={}
for ik,iv in pairs(inmap) do
table.insert(keys,ik)
end
local res = playerdb:get_bulk(keys)
if not res then
return kt.RVEINTERNAL
end
for key, value in pairs(res) do
local ix = kt.mapload(value)
local v = ”
for ik,iv in pairs(ix) do
if string.len(v) > 0 then
v = v .. “\t”
end
v = v .. ik .. “\t” .. iv
end
outmap[key] = v
end
return kt.RVSUCCESS
end
ただタブ区切りで全てのデータをつなげてるだけですが
ktremotemgr script -port 30132 get_player_bulk test k test2 k db 1
test flag 1 value testv
test2 flag 1 value test2v
まぁまぁ使いやすくなりました。
結局アプリケーションで処理するのでflagとvalueを分けなくても良いのですが
今回の利用の場合、キャッシュ用フラグみたいなただのカウンターなので、valueとは関係なく分けた方が良いかなとこんな感じにしてみました。