Исходник Гайд Асинхронные HTTP запросы в MoonLoader

Статус
В этой теме нельзя размещать новые ответы.

ImPasha

Software Developer & System Administrator
Друг
1,788
2,142
Lua:
async_http_request('GET', 'https://www.google.com/robots.txt', nil,
  function(newVersions)
print("Доступно обновление скрипта.")

---------------    changelog
async_http_request('GET', 'https://www.google.com/robots.txt', nil,
  function(changelog)
    print(changelog.text)
 
--------------- downloading new version
async_http_request('GET', 'https://www.google.com/robots.txt', nil,
  function(response)
-- загружаем новую версию скрипта и перезагружаем его
 
  end,
  function(err)
    print("Ошибка при загрузке обновления:")
    print(err)
  end)
 
  end,
  function(err)
    print("Ошибка при загрузке обновления:")
    print(err)
  end) 
 
    end,
  function(err)
    print("Ошибка при загрузке инофрмации о последней версии:")
    print(err)
  end)

Сама функция выполняется, но проходит около минуты и скрипт падает с ошибкой "cannot resume non-suspended coroutine".
Как исправить не знаешь? Та же проблема.
 

FYP

Известный
Автор темы
Администратор
1,764
5,923
Удалось воспроизвести проблему, поместив функцию в скрипт clickwarp - скрипт падает при вызове курсора. В моем скрипте игра зависает при вызове менюшки imgui.
да, то же самое. почему это происходит выяснить мне не удалось, выдаваемые ошибки совсем бессмысленны. больше всего склоняюсь к какой-то несовместимости lanes с luajit 2.1, но может и другое. тут я, к сожалению, бессилен.
можно ковырять lanes и пытаться разобраться в нём или взять другую либу для многопоточности, либо для асинхронных запросов.
 

CatKnight

Известный
148
55
да, то же самое. почему это происходит выяснить мне не удалось, выдаваемые ошибки совсем бессмысленны. больше всего склоняюсь к какой-то несовместимости lanes с luajit 2.1, но может и другое. тут я, к сожалению, бессилен.
можно ковырять lanes и пытаться разобраться в нём или взять другую либу для многопоточности, либо для асинхронных запросов.
У тебя нет на примете какой-нибудь альтернативной библиотеки?
 
  • Нравится
Реакции: applethecandy

serhiyrubin

Известный
396
106
А можете сделать чтобы можно было отправлять файл на ftp без фриза?
 
  • Нравится
Реакции: Tr1XsT

Aniki

🐰
Администратор
1,229
1,564
Почему-то пример не работает, первый способ выдает ошибку, со вторым просто ничего не происходит
Код:
[ML] (error) VKSAMP: module 'cjson.safe' not found:
    no field package.preload['cjson.safe']
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\lib\cjson\safe.lua'
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\lib\cjson\safe\init.lua'
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\cjson\safe.lua'
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\cjson\safe\init.lua'
    no file '.\cjson\safe.lua'
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\lib\cjson\safe.luac'
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\lib\cjson\safe\init.luac'
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\cjson\safe.luac'
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\cjson\safe\init.luac'
    no file '.\cjson\safe.luac'
    no file 'D:\GTA San Andreas MultiPlayer\moonloader\lib\cjson\safe.dll'
    no module 'cjson.safe' in file 'D:\GTA San Andreas MultiPlayer\moonloader\lib\cjson.dll'
stack traceback:
    [C]: in function '__index'
    D:\GTA San Andreas MultiPlayer\moonloader\vk.lua:39: in function <D:\GTA San Andreas MultiPlayer\moonloader\vk.lua:30>
[ML] (error) VKSAMP: Script died due to an error. (1A92A204)

cjson в lib есть, может дело в том что у меня 026 мун?
 

madrasso

Потрачен
883
325
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Помоги, дичь какая-та..
Код:
[ML] (error) ImGui for Script: C++ exception
stack traceback:
    [C]: in function 'request_lane'
    D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:175: in function <D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:174>
stack traceback:
    [C]: in function 'create'
    D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:174: in function 'async_http_request'
    D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:146: in function 'getvksms'
    D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:130: in function 'OnDrawFrame'
    D:\GTA FOR SCRIPTS\moonloader\lib\imgui.lua:1377: in function <D:\GTA FOR SCRIPTS\moonloader\lib\imgui.lua:1366>
[ML] (error) ImGui for Script: Script died due to an error. (0930D15C)
 

Frapsy

Известный
Проверенный
393
227
Помоги, дичь какая-та..
Код:
[ML] (error) ImGui for Script: C++ exception
stack traceback:
    [C]: in function 'request_lane'
    D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:175: in function <D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:174>
stack traceback:
    [C]: in function 'create'
    D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:174: in function 'async_http_request'
    D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:146: in function 'getvksms'
    D:\GTA FOR SCRIPTS\moonloader\ImGui for Script.lua:130: in function 'OnDrawFrame'
    D:\GTA FOR SCRIPTS\moonloader\lib\imgui.lua:1377: in function <D:\GTA FOR SCRIPTS\moonloader\lib\imgui.lua:1366>
[ML] (error) ImGui for Script: Script died due to an error. (0930D15C)
мб отрывок кода с тех строк кинешь?
 

Шурик

Активный
216
43
Lua:
local lanes = require("lanes").configure()

function async_http_request(method, url, args, resolve, reject)
    if not _G["lanes.async_http"] then
        local linda = lanes.linda()
        local lane_gen = lanes.gen("*", {package = {path = package.path, cpath = package.cpath}}, function()
            local requests = require("requests")
            while true do
                local key, val = linda:receive(50 / 1000, "request")
                if key == "request" then
                    local ok, result = pcall(requests.request, val.method, val.url, val.args)
                    if ok then
                        result.json, result.xml = nil, nil
                        linda:send("response", result)
                    else linda:send("error", result) end
                end
            end
        end)
        _G["lanes.async_http"] = {lane = lane_gen(), linda = linda}
    end
    local lanes_http = _G["lanes.async_http"]
    lanes_http.linda:send("request", {method = method, url = url, args = args})
    lua_thread.create(function(linda)
        while true do
            local key, val = linda:receive(0, "response", "error")
            if key == "response" then return resolve(val)
            elseif key == "error" then return reject(val) end
            wait(0)
        end
    end, lanes_http.linda)
end

async_http_request("POST", "https://test.police-assistant.ru", {params = {name = "test"}}, function(response) print(response.text) end, function(err) print(err) end)

RESULT: error in POST request: host or service not provided, or not known
В чём проблема?

UPD: Решил
 
Последнее редактирование:

r4nx

Известный
Друг
201
265
Я вот заюзал вторую реализацию, заменил простые запросы на асинхронные и столкнулся с проблемой, что response.json(), который я ранее вызывал при обычном requests.get() является nil, видимо, из-за этой строчки:
Lua:
result.json, result.xml = nil, nil
Так и не разобрался что она делает. Можно ли её удалить? А то удобно было JSON-ответ разбирать одним методом
 

Frapsy

Известный
Проверенный
393
227
А для SQL-запросов такое можно?
Использовать SQL запросы в самом скрипте - самоубийство для БД. Ты асинхронным запросом можешь передать какие либо данные на PHP(или любой какой тебе удобен) серверный обработчик, где данные подвергнуться обработке, и если все как надо - то совершить нужный для тебя SQL запрос в базу и вывести(если необходимо) результат.
 

Oreshka23

Известный
341
165
Использовать SQL запросы в самом скрипте - самоубийство для БД. Ты асинхронным запросом можешь передать какие либо данные на PHP(или любой какой тебе удобен) серверный обработчик, где данные подвергнуться обработке, и если все как надо - то совершить нужный для тебя SQL запрос в базу и вывести(если необходимо) результат.
А можно поинтересоваться почему это самоубийство?
 
Статус
В этой теме нельзя размещать новые ответы.