OC-DSS2/OpenOS/client/usr/lib/inv.lua

43 lines
1.0 KiB
Lua

local serial = require "serialization"
local minitel = require "minitel"
local buffer = require "buffer"
local lz16 = require "liblz16"
local rpc = require "rpc"
local server
local port = 15
local f = io.open("/etc/invsrv","rb")
if not f then error("no server configured") end
server=f:read()
port=tonumber(f:read()) or port
f:close()
local inv = setmetatable({}, {__index=rpc.proxy(server, "inv_")})
function inv.matchAll(criteria, fuzzy)
local socket = minitel.open(server,port)
if not socket then return false end
local cstr = "compress=true\tfuzzy="..tostring(fuzzy)
for k,v in pairs(criteria) do
cstr=string.format("%s\t%s=%s", cstr, k, v)
end
socket:write(cstr.."\n")
socket.mode = {r=true}
local function cread()
if socket.state ~= "open" then
return nil
end
os.sleep(0.05)
return socket:read("*a")
end
local lsock = lz16.buffer(buffer.new("rb",{read = cread,close=function() end}))
local rt = {}
for line in lsock:lines() do
rt[#rt+1] = serial.unserialize(line)
end
lsock:close()
return rt
end
return inv