Files
opus-apps/swshop/apis/r.lua
2020-05-06 02:54:15 -04:00

69 lines
1.3 KiB
Lua

local jua = nil
local idPatt = "#R%d+"
callbackRegistry = {}
local function gfind(str, patt)
local t = {}
for found in str:gmatch(patt) do
table.insert(t, found)
end
if #t > 0 then
return t
else
return nil
end
end
local function findID(url)
local found = gfind(url, idPatt)
if not found then return nil end
return tonumber(found[#found]:sub(found[#found]:find("%d+")))
end
local function newID()
for i = 1, math.huge do
if not callbackRegistry[i] then
return i
end
end
end
local function trimID(url)
local found = gfind(url, idPatt)
local s, e = url:find(found[#found])
return url:sub(1, s-1)
end
function request(callback, url, headers, postData)
local id = newID()
local newUrl = url .. "#R" .. id
callbackRegistry[id] = callback
http.request(newUrl, postData, headers)
end
function init(jua)
jua = jua
jua.on("http_success", function(event, url, handle)
local id = findID(url)
if id and callbackRegistry[id] then
callbackRegistry[id](true, trimID(url), handle)
callbackRegistry[id] = nil
end
end)
jua.on("http_failure", function(event, url, handle)
local id = findID(url)
if id and callbackRegistry[id] then
callbackRegistry[id](false, trimID(url), handle)
callbackRegistry[id] = nil
end
end)
end
return {
request = request,
init = init
}