mirror of
https://github.com/kepler155c/opus
synced 2025-02-06 12:10:02 +00:00
proper fix for builtin broken http.get - try 2
This commit is contained in:
parent
f38afbbd36
commit
9297223640
@ -1,35 +0,0 @@
|
|||||||
--[[
|
|
||||||
FIX for http.get
|
|
||||||
currently, when 2 requests are generated at same time (diff coroutines) they both
|
|
||||||
will receive the same file handle. This change will ensure each request gets the
|
|
||||||
proper response.
|
|
||||||
--]]
|
|
||||||
|
|
||||||
local http = _G.http
|
|
||||||
|
|
||||||
local reqs = { }
|
|
||||||
|
|
||||||
local function wrapRequest(_url, ...)
|
|
||||||
local ok, err = http.request(...)
|
|
||||||
if ok then
|
|
||||||
while true do
|
|
||||||
local event, param1, param2, param3 = os.pullEvent()
|
|
||||||
|
|
||||||
if event == "http_success"
|
|
||||||
and param1 == _url
|
|
||||||
and not reqs[tostring(param2)] then
|
|
||||||
|
|
||||||
reqs[tostring(param2)] = true
|
|
||||||
return param2
|
|
||||||
|
|
||||||
elseif event == "http_failure" and param1 == _url then
|
|
||||||
return nil, param2, param3
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
return nil, err
|
|
||||||
end
|
|
||||||
|
|
||||||
http.safeGet = function(_url, _headers, _binary)
|
|
||||||
return wrapRequest(_url, _url, nil, _headers, _binary)
|
|
||||||
end
|
|
@ -13,6 +13,35 @@ local _unpack = table.unpack
|
|||||||
local _bor = bit32.bor
|
local _bor = bit32.bor
|
||||||
local _bxor = bit32.bxor
|
local _bxor = bit32.bxor
|
||||||
|
|
||||||
|
if not http.safeGet then -- really no good place to put this hack
|
||||||
|
local reqs = { }
|
||||||
|
|
||||||
|
local function wrapRequest(_url, ...)
|
||||||
|
local ok, err = http.request(...)
|
||||||
|
if ok then
|
||||||
|
while true do
|
||||||
|
local event, param1, param2, param3 = os.pullEvent()
|
||||||
|
|
||||||
|
if event == "http_success"
|
||||||
|
and param1 == _url
|
||||||
|
and not reqs[tostring(param2)] then
|
||||||
|
|
||||||
|
reqs[tostring(param2)] = true
|
||||||
|
return param2
|
||||||
|
|
||||||
|
elseif event == "http_failure" and param1 == _url then
|
||||||
|
return nil, param2, param3
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return nil, err
|
||||||
|
end
|
||||||
|
|
||||||
|
http.safeGet = function(_url, _headers, _binary)
|
||||||
|
return wrapRequest(_url, _url, nil, _headers, _binary)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local byteArrayMT
|
local byteArrayMT
|
||||||
byteArrayMT = {
|
byteArrayMT = {
|
||||||
__tostring = function(a) return string.char(_unpack(a)) end,
|
__tostring = function(a) return string.char(_unpack(a)) end,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user