Вопрос по обработке исключений в Qlua

Страницы: 1
RSS
Вопрос по обработке исключений в Qlua, Вопрос по обработке исключений в Qlua
 
Добрый день!
Столкнулся с тавой проблемой в Qlua :

Есть следующий код, который успешно работает при отсутствии ошибки.

require"QL"
require 'luanet'
require 'socket'
--вывод в телеграм
luanet.load_assembly "System"
WebClient = luanet.import_type("System.Net.WebClient")
wc = WebClient()
a="Start%20program%20at%20*" .. os.date("%H:%M:%S") .. "*"
PrintDbgStr(a)
wc:DownloadString("https://api.telegram.org/botХХХХХХХХХХХ/sendMessage?chat_id=ХХХХХ..." .. a .. "&parse_mode=Markdown") --значения поменял вывод сообщений в телеграм

Суть кода выводить сообщения в телеграм. До недавного времени все работало успешно, теперь когда РКН блокирует сообщения. QUIK ПОЛНОСТЬЮ ВЫЛЕТАЕТ.
Так как отсутствие коннекта к телеграму предсказать невозможно, то не возможно предсказать, когда вылетит терминал Quik. Нужно искать выход - обработать исключение!

Попробовал использовать

local status, err = pcall(function () www=wc:DownloadString(b .."https://api.telegram.org/botХХХХХХХХХХХХ/sendMessage?chat_id=ХХХХХ...) end)

if err==nil then err="" end -- до этого места доходит пока нет ошибок и в дебагер выдает нормальную информацию
PrintDbgStr(tostring(status) .. " --- " .. err .. " --- " .. www) -- если ошибка в ссылке или тайаут, то квик вылетает и информации в дебагере нет!!!

Вопрос КАК заставить QLUA обработать исключение.
Виды исключений : неправильная ссылка, не верный адрес, хост не доступен???

Проверял послюднюю часть кода в ZeroBrane Studio для Lua - успенно отрабатывает возвращает код ошибки и я могу его обработать.
Помогите разобоаться
 
Цитата
Артем написал:
Виды исключений : неправильная ссылка, не верный адрес, хост не доступен???

Боюсь что кроме как предварительно установить проверку других идей нет.
Проверку можно выполнить через тот же Ping
У нас эта тема обсуждалась тут и тут
 
Цитата
Артем написал:
QUIK ПОЛНОСТЬЮ ВЫЛЕТАЕТ.
Вопрос КАК заставить QLUA обработать исключение.
Если нужен дополнительный сетевой функционал, то можно попробовать поместить ваш код в небольшую отдельную DLL, которую уже вызывать из Lua.
А если нужно просто выполнить http запрос к сайту, то проще наверно просто запустить IE с ним, в одну строчку:
Код
os.execute("\""..os.getenv("ProgramFiles").."\\Internet Explorer\\iexplore.exe\" https://ru.wikipedia.org/wiki/Lua")
Кода в 20 раз меньше, а толку больше...

Цитата
Sergey Gorokhov написал:
Боюсь что кроме как предварительно установить проверку других идей нет.
Проверку можно выполнить через тот же  Ping
Это не будет работать по многим причинам. Во-первых, в момент проверки соединение может ещё быть, а уже при повторном запросе нет, поэтому предварительная проверка ничего не гарантирует. Во-вторых, IP-адреса возвращаемые через DNS постоянно меняются сетью CDN, и тот который вернулся при вызове ping может не совпадать с тем, который вернулся при последующем соединении. И т.д...

Да и сам подход неправильный. Не должен Quik падать из-за необработанного исключения в подгружаемом модуле. Если это имеет место быть, то это серьёзный глюк, и его лучше исправить...
 
C пиногом разобрался путем

function send_telegram() --если true, то слать телеграм
local handler = io.popen("chcp 861 && ping -n 1 api.telegram.org")
local response = handler:read("*a")
start_pos, end_pos = string.find(response, "Lost = 0" )
if start_pos==nil then telegram=false
  else telegram=true
end
return telegram
end

Все бы ничего, при вызове  io.popen каждый раз кратковременно командное окошко всплывает и перехватывает фокус ввода, то есть Quik на 1 -2 сек становится не главным окном, что очень не хорошо. Как это можно победить запихать вызов пингов в фоновое окно? Может кто уже побеждал?  
Страницы: 1
Читают тему
Наверх