autoReconnect method
Auto reconnect
Implementation
@protected
void autoReconnect(MqttAutoReconnect reconnectEvent) async {
MqttLogger.log('MqttConnectionHandlerBase::autoReconnect entered');
// If already in progress exit and we were not connected return
if (autoReconnectInProgress! && !reconnectEvent.wasConnected) {
return;
}
autoReconnectInProgress = true;
// If the auto reconnect callback is set call it
if (onAutoReconnect != null) {
onAutoReconnect!();
}
// If we are connected disconnect from the broker.
if (reconnectEvent.wasConnected) {
MqttLogger.log(
'MqttConnectionHandlerBase::autoReconnect - was connected, sending disconnect');
sendMessage(MqttDisconnectMessage()
.withReasonCode(MqttDisconnectReasonCode.normalDisconnection));
connectionStatus.state = MqttConnectionState.disconnecting;
}
connection.disconnect(auto: true);
connection.onDisconnected = null;
MqttLogger.log(
'MqttConnectionHandlerBase::autoReconnect - attempting reconnection');
connectionStatus = await connect(server, port, connectionMessage);
autoReconnectInProgress = false;
if (connectionStatus.state == MqttConnectionState.connected) {
connection.onDisconnected = onDisconnected;
// Fire the re subscribe event.
clientEventBus!.fire(MqttResubscribe(fromAutoReconnect: true));
MqttLogger.log(
'MqttConnectionHandlerBase::autoReconnect - auto reconnect complete');
// If the auto reconnect callback is set call it
if (onAutoReconnected != null) {
onAutoReconnected!();
}
} else {
MqttLogger.log(
'MqttConnectionHandlerBase::autoReconnect - auto reconnect failed - re trying');
clientEventBus?.fire(MqttAutoReconnect());
}
}