Ребята, помогите с архитектурой. У меня есть кассовый аппарат, управляется

через веб сервер в виде json сообщений. Я использую поток и QNAM. Мне нужны были синхронные отправки сообщений, т.к. отправляется серия команд. Т.е. для одной операции команда - ответ, команда - ответ и т.д. В конце операции отправляю сигнал об успешном завершении в главный поток. Синхронность реализовал с помощью QNetworkReply, QEventLoop и таймера(таймаут).

Тут сложность появилась когда мне надо выполнять одну операцию(тоже серия команд) по таймеру раз в минуту. Т.е. проблема когда выполняются простая операция и когда срабатывает таймер раз в минуту, то из-за эвент лупа синхроности выполняется еще операция по таймеру. Как можно такое переделать и сохранить синхронность qnam ?

6 ответов

40 просмотров

Можешь пояснить кто кому что отправляет?) И есть ли возможность сделать все асинхронно?( Например пронумеровать каждый запрос и в ответе отправлять номер запроса)

Mr.Mait- Автор вопроса
Саша
Можешь пояснить кто кому что отправляет?) И есть л...

Программа на Qt отправляет на веб сервер кассового аппарата по локалхосту команды. На каждый запрос получаю ответ и в зависимости от ответа делают то или иное действие. Вот пример одной операции распечатки чека: 1) Открыть сессию. В ответе получаю сессионный ключ 2) Открыть чек. в ответ еще-что получаю 3) Добавить товар 4) Закрыть чек 5) Закрыть сессию Все хорошо когда пользователь в гуи сам работает с кассовым аппаратом и допустим кликает "распечатать чек", в гуи появляется защита, чтоб пока все команды не отработали, пользователь больше никаких операций не может делать. Мне понадобилось раз в минуту получать статус кассового аппарата: 1) Открыть сессию 2) Запросить статус 3) Закрыть сессию Это выполняется пару секунд. И вот думаю как это все разрулить, что пока выполняется операция статуса, пользователь может тоже начать что-то делать. На каждую команду выполнятся функция типа такой: QJsonObject send(const QJsonObject &json) { QNetworkReply *reply = mNam->post(request, QJsonDocument(json).toJson()); connect(reply, &QNetworkReply::finished, mLoop, &QEventLoop::quit); mTimeoutRequest->start(); mLoop->exec(); ... return retJson; } Просто если все делать ассинхронно, то будет очень много сигналов и слотов

Mr.Mait- Автор вопроса
Саша
Мб создать вторую сессию?

Сессия нужна как раз типа мьютекса для пользователя. Пока открыта сессия, новую нельзя открыть, будет ошибка. Это все придумали в самом кассовом аппарате

Mr.Mait
Сессия нужна как раз типа мьютекса для пользовател...

Если так, то я бы предложил: 1 отделить gui от сетевой части. 2 gui отправляет задачи в очередь 3 серверная часть смотрит в очередь и выполняет. Если сессия открыта и можно впихнуть ещё задачу- делает это.

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
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
Карта сайта