Добрый день, есть вопрос касательно QNetworkAccessManager. Имеется либа работающая с Telegram

API, в хедере обьявлен QNetworkAccessManager.
После создания обьекта класса вызывается метод startMessagePulling, запрос данных от сервера телеграмма методом лонг пола.
Соответственно, вызывается метод делающий запрос к серверу, по получению ответа делается эмит сигнала о новом апдейте.
Но есть один нюанс, если моргает интернет, то никаких запросов не происходит еще около 2х часов после чего в qWarning я получаю сообщение похожего содержания: Warning: stream 557 finished with error: "Connection closed" и все оживает до следующей потери коннекта. Есть ли вариант как-то хендлить такие заскоки? Гуглить пробовал, но чет ничего похожего не нашел...
Спасибо.

1 ответов

13 просмотров
TheDoctor- Автор вопроса

В общем, по итогу там какая-то дичь происходит. Был переписан код ожиданием через ивентлуп и синглшот таймер который разрывает подключение и выяснил один очень интересный нюанс. Подключение зависало и не выходило за пределы программы, Charles пакеты не видел вообще. Как итог, после принудительного разрыва подключения я попробовал очистить кэши QNAM, и внезапно, все работает. 3 часа, полет нормальный, За это время только три раза коннект обрывался по таймеру, после очистки кэшей шел новый коннект к серверу и все работало штатно. Окончательный вариант вышел такой: void TelegramBot::pull(){ // if we pull is disabled, exit if(this->pullParams.isEmpty()) return; // cleanup if(this->replyPull) this->replyPull->deleteLater(); // call api this->replyPull = this->callApi("getUpdates", this->pullParams, false); QEventLoop loop; QTimer::singleShot(30*1000, &loop, &QEventLoop::quit); QObject::connect(this->replyPull, &QNetworkReply::finished, &loop, &QEventLoop::quit); loop.exec(); if(!this->replyPull->isRunning()) QTimer::singleShot(10, this, &TelegramBot::handlePullResponse); else{ replyPull->abort(); aManager.clearAccessCache(); aManager.clearConnectionCache(); QTimer::singleShot(10, this, &TelegramBot::pull); } }

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта