Зациклить асинхронный запрос

IT clown

Участник
Автор темы
45
2
Версия MoonLoader
.026-beta
Мне нужно заполнить таблицу делая запросы в цикле, но запрос приходит не сразу и часто бывает timeout можно ли как то сделать проверку на получение ответа от запроса и сделать повторный запрос если получил timeout


Lua:
if imgui.Button(u8'Обновить список') then
    numbers = {}
    maxs = sampGetMaxPlayerId()
    for i=0, maxs do
        if sampIsPlayerConnected(i) then
            nickname = sampGetPlayerNickname(i)
            asyncHttpRequest('POST', 'http://url/script.php', { data = string.format('method=passport&nickname=%s&server=%s', nickname, ServH),
            headers = {
            ["content-type"] = "application/x-www-form-urlencoded"}},
            function(response)
                pass = decodeJson(response.text)
                if pass.id ~= nil and pass.phone ~= nil and pass.phone ~= '0' then
                    phones = pass.phone
                    numbers[i] = phones
                    print(numbers[i])
                else
                    sampAddChatMessage('Номера нету в базе', -1)
                end
            end,
            function(err)
                print(err)
            end)

        end
    end                  
end

function asyncHttpRequest(method, url, args, resolve, reject)
   local request_thread = effil.thread(function (method, url, args)
      local requests = require 'requests'
      local result, response = pcall(requests.request, method, url, args)
      if result then
         response.json, response.xml = nil, nil
         return true, response
      else
         return false, response
      end
   end)(method, url, args)
 
   if not resolve then resolve = function() end end
   if not reject then reject = function() end end
 
   lua_thread.create(function()
      local runner = request_thread
      while true do
         local status, err = runner:status()
         if not err then
            if status == 'completed' then
               local result, response = runner:get()
               if result then
                  resolve(response)
               else
                  reject(response)
               end
               return
            elseif status == 'canceled' then
               return reject(status)
            end
         else
            return reject(err)
         end
         wait(0)
      end
   end)
end
 
Последнее редактирование:

IT clown

Участник
Автор темы
45
2
Можно суть скрипт? Будет проще помочь тебе.
Суть скрипта?
Перебор игроков на сервере, получение их ников, после циклом делая запрос получения значений

получая несколько значений из запроса, дальше идут таймауты
[ML] (script) zapros.lua: 411
[ML] (script) zapros.lua: 77
[ML] (script) zapros.lua: 330
[ML] (script) zapros.lua: 877776
[ML] (script) zapros.lua: 671111
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
[ML] (script) zapros.lua: 886
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
[ML] (script) zapros.lua: D:\GTA by Фэлдан\moonloader\lib\requests.lua:106: error in POST request: timeout
 

Rice.

Известный
Модератор
1,753
1,661
Суть скрипта?
Перебор игроков на сервере, получение их ников, после циклом делая запрос получения значений

получая несколько значений из запроса, дальше идут таймауты
Получи один массив со всеми никами и отправь один запрос на сервер, в чем проблема?

Lua:
if imgui.Button('test') then
    local players = {}
    for i = 0, 999 do
        if sampIsPlayerConnected(i) then
            table.insert(players, sampGetPlayerNickname(i))
        end
    end
  -- дальше отправляешь на сервер данные
end
 
Последнее редактирование:

IT clown

Участник
Автор темы
45
2
Получи один массив со всеми никами и отправь один запрос на сервер, в чем проблема?

Lua:
if imgui.Button('test') then
    local players = {}
    for i = 0, 999 do
        if sampIsPlayerConnected(i) then
            table.insert(players, sampGetPlayerNickname(i))
        end
    end
  -- дальше отправляешь на сервер данные
end
bad argument #1 to 'len' (string expected, got table)
stack traceback
Походу нельзя отправлять массив в пост запросе
 

The Spark

frontend
Проверенный
722
739
bad argument #1 to 'len' (string expected, got table)
stack traceback
Походу нельзя отправлять массив в пост запросе
Преобразуй таблицу в json, а на сервере преобразуйте обратно.
 

IT clown

Участник
Автор темы
45
2
Преобразуй таблицу в json, а на сервере преобразуйте обратно.
Сервер принимает запрос ввиде method=passport&nickname=Nick&server=Server
При попытке отправить несколько запросов, сервер отвечает только на последний, доступа к серверу нету

1652455033576.png