Commit 3fef3f8397fd59317cdc753109cfcdfa87123692
1 parent
6f2da92f
Active Resubscribe only after a correct state-change
Showing
1 changed file
with
19 additions
and
18 deletions
src/mqttclient.cpp
... | ... | @@ -431,29 +431,30 @@ void MqttClient::connectionStatusChanged(const std::string& id, ConnectionStatus |
431 | 431 | } |
432 | 432 | |
433 | 433 | auto newState = determineState(connectionStates); |
434 | - // bool resubscribe = (StateEnum::ConnectionFailure == m_serverState.state() && StateEnum::Good == newState); | |
435 | - bool resubscribe = ( StateEnum::Good == newState ); | |
436 | - if (resubscribe) | |
434 | + LogDebug( "[MqttClient::connectionStatusChanged]", std::string("Old state : " + std::to_string(static_cast<int>(m_serverState.state()))); | |
435 | + LogDebug( "[MqttClient::connectionStatusChanged]", std::string("New state : " + std::to_string(static_cast<int>(newState))); | |
436 | + bool resubscribe = (StateEnum::ConnectionFailure == m_serverState.state() && StateEnum::Good == newState); | |
437 | + // First activate pending subscriptions | |
437 | 438 | { |
438 | - // First activate pending subscriptions | |
439 | + OSDEV_COMPONENTS_LOCKGUARD(m_subscriptionMutex); | |
440 | + LogDebug( "[MqttClient::connectionsStatusChanged]", std::string( m_clientId + " - Number of pending subscriptions : " + std::to_string(m_deferredSubscriptions.size() ) ) ); | |
441 | + while( m_deferredSubscriptions.size() > 0 ) | |
439 | 442 | { |
440 | - OSDEV_COMPONENTS_LOCKGUARD(m_subscriptionMutex); | |
441 | - LogDebug( "[MqttClient::connectionsStatusChanged]", std::string( m_clientId + " - Number of pending subscriptions : " + std::to_string(m_deferredSubscriptions.size() ) ) ); | |
442 | - while( m_deferredSubscriptions.size() > 0 ) | |
443 | - { | |
444 | - auto subscription = m_deferredSubscriptions.at( 0 ); | |
445 | - this->subscribe( subscription.getTopic(), subscription.getQoS(), subscription.getCallBack() ); | |
446 | - m_deferredSubscriptions.erase( m_deferredSubscriptions.begin() ); | |
447 | - } | |
443 | + auto subscription = m_deferredSubscriptions.at( 0 ); | |
444 | + this->subscribe( subscription.getTopic(), subscription.getQoS(), subscription.getCallBack() ); | |
445 | + m_deferredSubscriptions.erase( m_deferredSubscriptions.begin() ); | |
448 | 446 | } |
447 | + } | |
449 | 448 | |
450 | - LogDebug( "[MqttClient::connectionStatusChanged]", | |
451 | - std::string( m_clientId + " - Resubscribing..." ) ); | |
452 | - { | |
453 | - OSDEV_COMPONENTS_LOCKGUARD(m_internalMutex); | |
454 | - m_activeTokens.clear(); | |
455 | - } | |
449 | + LogDebug( "[MqttClient::connectionStatusChanged]", | |
450 | + std::string( m_clientId + " - Resubscribing..." ) ); | |
451 | + { | |
452 | + OSDEV_COMPONENTS_LOCKGUARD(m_internalMutex); | |
453 | + m_activeTokens.clear(); | |
454 | + } | |
456 | 455 | |
456 | + if (resubscribe) | |
457 | + { | |
457 | 458 | for (auto* cl : clients) |
458 | 459 | { |
459 | 460 | try | ... | ... |