- 23
- 0
- Версия MoonLoader
- .027.0-preview
Ознакомился с этим гайдом, на его основе получился следующий скрипт:
Однако, возникла следующая проблема - при первом выполнении команды /auth игру фризист, а при последующих нет. Запросы при этом выполняются асинхронно, как и ожидалось. Что не так и как это можно исправить? В примере для каллбека команды auth создается отдельный поток, но даже с ним все равно проявляется этот единичный фриз.
MoonLoader v.027.0-preview3
Код:
copas = require('copas')
http = require('copas.http')
function main()
if not isSampfuncsLoaded() or not isSampLoaded() then
return
end
while not isSampAvailable() do
wait(0)
end
sampRegisterChatCommand("auth", rauthCallBack)
wait(-1)
end
function rauthCallBack(params)
lua_thread.create(function()
local list = {
"http://www.google.com",
"http://www.microsoft.com",
"http://www.apple.com",
"https://www.facebook.com",
"https://www.yahoo.com",
}
-- параллельные запросы, обработаются одновременно
print('parallel')
for i, url in ipairs(list) do
print('request', url)
httpRequest(url, nil, function(response, code, headers, status)
if response then
print(url, 'OK', status)
else
print(url, 'Error', code)
end
end)
end
end)
end
function httpRequest(request, body, handler) -- copas.http
-- start polling task
if not copas.running then
copas.running = true
lua_thread.create(function()
wait(0)
while not copas.finished() do
local ok, err = copas.step(0)
if ok == nil then error(err) end
wait(0)
end
copas.running = false
end)
end
-- do request
if handler then
return copas.addthread(function(r, b, h)
copas.setErrorHandler(function(err) h(nil, err) end)
h(http.request(r, b))
end, request, body, handler)
else
local results
local thread = copas.addthread(function(r, b)
copas.setErrorHandler(function(err) results = {nil, err} end)
results = table.pack(http.request(r, b))
end, request, body)
while coroutine.status(thread) ~= 'dead' do wait(0) end
return table.unpack(results)
end
end
Однако, возникла следующая проблема - при первом выполнении команды /auth игру фризист, а при последующих нет. Запросы при этом выполняются асинхронно, как и ожидалось. Что не так и как это можно исправить? В примере для каллбека команды auth создается отдельный поток, но даже с ним все равно проявляется этот единичный фриз.
MoonLoader v.027.0-preview3