Add new disconnectGracefully method #724
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This PR adds a new
disconnectGracefullymethod to all interfaces for MQTT 3 & 5.Previously, if a connected client (with reconnect enabled) loses network (e.g. device sleep or interface down), calling
disconnectwould raiseMqttClientStateException: MQTT client is not connected.and reconnection would continue with no way to stop the reconnection attempts.Internally, this happens because the automatic reconnection only stops if the disconnect source is USER. When the network is turned off, the disconnect source is CLIENT (network error) and the client gets into an uncontrollable state.
Per #675, users need to be able to cleanly shut down their MQTT clients regardless of the current connection state.
To do this, we add a new client state
DISCONNECTING_GRACEFULLYand update the reconnection logic to respect this state.disconnectGracefully()is added to all MQTT 3 & 5 interfaces with tests to validate.Related Issue
#675
Type of Change
Checklist