Skip to content

Commit fb0b4cb

Browse files
Adam5Wumarvinroger
authored andcommitted
fix confusing disconnect event (#83)
* Fix confusing disconnect event * Do dispatch TCP connection failure event * Fix confusing code line due to bad cherry-pick
1 parent 778c86b commit fb0b4cb

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

src/AsyncMqttClient.cpp

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -340,22 +340,19 @@ void AsyncMqttClient::_onConnect(AsyncClient* client) {
340340

341341
void AsyncMqttClient::_onDisconnect(AsyncClient* client) {
342342
(void)client;
343-
AsyncMqttClientDisconnectReason reason;
343+
if (!_disconnectFlagged) {
344+
AsyncMqttClientDisconnectReason reason;
344345

345-
if (_connectPacketNotEnoughSpace) {
346-
reason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
347-
} else if (_tlsBadFingerprint) {
348-
reason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
349-
} else {
350-
reason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED;
346+
if (_connectPacketNotEnoughSpace) {
347+
reason = AsyncMqttClientDisconnectReason::ESP8266_NOT_ENOUGH_SPACE;
348+
} else if (_tlsBadFingerprint) {
349+
reason = AsyncMqttClientDisconnectReason::TLS_BAD_FINGERPRINT;
350+
} else {
351+
reason = AsyncMqttClientDisconnectReason::TCP_DISCONNECTED;
352+
}
353+
for (auto callback : _onDisconnectUserCallbacks) callback(reason);
351354
}
352-
353355
_clear();
354-
355-
for (auto callback : _onDisconnectUserCallbacks) callback(reason);
356-
357-
_connectPacketNotEnoughSpace = false;
358-
_tlsBadFingerprint = false;
359356
}
360357

361358
void AsyncMqttClient::_onError(AsyncClient* client, int8_t error) {
@@ -488,8 +485,8 @@ void AsyncMqttClient::_onConnAck(bool sessionPresent, uint8_t connectReturnCode)
488485
_connected = true;
489486
for (auto callback : _onConnectUserCallbacks) callback(sessionPresent);
490487
} else {
491-
_clear();
492488
for (auto callback : _onDisconnectUserCallbacks) callback(static_cast<AsyncMqttClientDisconnectReason>(connectReturnCode));
489+
_disconnectFlagged = true;
493490
}
494491
}
495492

@@ -657,6 +654,8 @@ void AsyncMqttClient::_sendAcks() {
657654
}
658655

659656
bool AsyncMqttClient::_sendDisconnect() {
657+
if (!_connected) return true;
658+
660659
const uint8_t neededSpace = 2;
661660

662661
SEMAPHORE_TAKE(false);

0 commit comments

Comments
 (0)