handleConnectionError method
Handle a relay connection error with recovery attempt.
Implementation
Future<bool> handleConnectionError({
required String relayUrl,
required dynamic error,
required int attemptNumber,
required Future<bool> Function() retryFn,
}) async {
_recordError(
relayUrl: relayUrl,
errorType: ErrorType.connectionError,
error: error,
attemptNumber: attemptNumber,
);
logger.log(
'Connection error on relay $relayUrl (attempt $attemptNumber): $error',
);
if (attemptNumber > _strategy.maxRetries) {
logger.log(
'Max retries exceeded for relay $relayUrl, giving up',
);
return false;
}
final delay = _strategy.getDelayForAttempt(attemptNumber);
logger.log(
'Retrying relay $relayUrl in ${delay.inMilliseconds}ms (attempt ${attemptNumber + 1})',
);
await Future<void>.delayed(delay);
try {
return await retryFn();
} catch (e) {
return handleConnectionError(
relayUrl: relayUrl,
error: e,
attemptNumber: attemptNumber + 1,
retryFn: retryFn,
);
}
}