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,29 +431,30 @@ void MqttClient::connectionStatusChanged(const std::string& id, ConnectionStatus | ||
431 | } | 431 | } |
432 | 432 | ||
433 | auto newState = determineState(connectionStates); | 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 | for (auto* cl : clients) | 458 | for (auto* cl : clients) |
458 | { | 459 | { |
459 | try | 460 | try |