Отписаться от темы не работает при использовании постоянного сеанса MqttC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Отписаться от темы не работает при использовании постоянного сеанса Mqtt

Сообщение Anonymous »

У меня есть приложение Qt, которое использует модуль qtmqtt для реализации простой настройки MQTT.
Я запускаю два экземпляра — один в качестве подписчика и один в качестве издателя.
В приложении пользователи могут щелкнуть правой кнопкой мыши по любой подписанной теме, чтобы отказаться от нее.
Я использую cleanSession = false для постоянных сеансов.
Сначала все работает нормально — когда я нажимаю правой кнопкой мыши на тему и отписываюсь, я перестаю получать новые сообщения по этой теме.
Однако после того, как я нажимаю кнопку «Отключиться», затем повторно подключаюсь и отписываюсь от темы, я все равно получаю сообщения, опубликованные по этой теме — даже если я от нее отписался.
В журнале показано:

Код: Выделить всё

qDebug() hostLineEdit->setText(");
ui->portLineEdit->setText("8883");
ui->userLineEdit->setText("XXX");
ui->passLineEdit->setText("XXX");

//Extra
clientId = QUuid::createUuid().toString(QUuid::Id128);
client->setClientId(clientId);
client->setCleanSession(false);

// Connect signals
connect(client, &QMqttClient::connected, this, &MainWindow::onConnected);
connect(client, &QMqttClient::messageReceived, this, &MainWindow::onMessageReceived);
connect(client, &QMqttClient::stateChanged, this, &MainWindow::onStateChanged);
connect(client, &QMqttClient::errorChanged, this, &MainWindow::onErrorChanged);

ui->listWidget->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->listWidget, &QListWidget::customContextMenuRequested,
this, &MainWindow::onSubscribedTopicsContextMenu);

}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::onConnected()
{
qDebug() append(msg);

// Optional: also print to console
qDebug() text().trimmed();
QString pass = ui->passLineEdit->text();

if (!user.isEmpty()) {
client->setUsername(user);
}

if (!pass.isEmpty()) {
client->setPassword(pass);
}

QSslConfiguration sslConfig = QSslConfiguration::defaultConfiguration();
sslConfig.setPeerVerifyMode(QSslSocket::VerifyPeer);

client->connectToHostEncrypted(sslConfig);

}

void MainWindow::on_disconnectBrokerBtn_clicked()
{
if (client->state() == QMqttClient::Connected) {
client->disconnectFromHost();

qDebug() state() == QMqttClient::Connecting) {
qDebug() disconnectFromHost();
}
else {
qDebug() topicLineEdit->text().trimmed();

if (topic.isEmpty()) {
qDebug() qos2Radio);

// Subscribe to new topic
auto sub = client->subscribe(topic, qos);
if (!sub) {
qDebug() mapToGlobal(pos));
if (selected == unsubscribeAction) {
QString topic = item->text();
client->unsubscribe(topic);
qDebug() takeItem(ui->listWidget->row(item));
}
}

void MainWindow::on_publishBtn_clicked()
{
QString topic = ui->pubTopicLineEdit->text().trimmed();  // same lineEdit as subscribe
QString message = ui->messageLineEdit->text();

if (topic.isEmpty()) {
qDebug() qos1RadioPub, ui->qos2RadioPub);

client->publish(topic, message.toUtf8(), pubQos, false);
qDebug() 

Подробнее здесь: [url]https://stackoverflow.com/questions/79798491/unsubscribe-from-topic-not-working-when-using-persistent-session-mqtt[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»