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());
}
}