pingRequired method
Pings the message broker if there has been no activity for the specified amount of idle time.
Implementation
bool pingRequired() {
MqttLogger.log('MqttConnectionKeepAlive::pingRequired');
if (_shutdownPadlock) {
return false;
} else {
_shutdownPadlock = true;
}
var pinged = false;
final pingMsg = MqttPingRequestMessage();
if (_connectionHandler.connectionStatus.state ==
MqttConnectionState.connected) {
MqttLogger.log(
'MqttConnectionKeepAlive::pingRequired - sending ping request');
try {
_connectionHandler.sendMessage(pingMsg);
pinged = true;
} catch (e) {
MqttLogger.log(
'MqttConnectionKeepAlive::pingRequired - exception occurred');
}
} else {
MqttLogger.log(
'MqttConnectionKeepAlive::pingRequired - NOT sending ping - not connected');
}
MqttLogger.log(
'MqttConnectionKeepAlive::pingRequired - restarting ping timer');
pingTimer = Timer(Duration(milliseconds: keepAlivePeriod), pingRequired);
if (disconnectOnNoResponsePeriod != 0) {
if (disconnectTimer == null) {
MqttLogger.log(
'MqttConnectionKeepAlive::pingRequired - starting disconnect timer');
if (pinged) {
disconnectTimer = Timer(
Duration(milliseconds: disconnectOnNoResponsePeriod),
noPingResponseReceived);
} else {
noMessageSent();
}
} else {
if (disconnectTimer != null && !disconnectTimer!.isActive) {
if (pinged) {
MqttLogger.log(
'MqttConnectionKeepAlive::pingRequired - restarting disconnect timer');
disconnectTimer = Timer(
Duration(milliseconds: disconnectOnNoResponsePeriod),
noPingResponseReceived);
} else {
noMessageSent();
}
} else {
MqttLogger.log(
'MqttConnectionKeepAlive::pingRequired - disconnect timer is active, not restarting');
}
}
}
_shutdownPadlock = false;
return pinged;
}