pingRequired method

bool pingRequired()

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