in AppSyncRealTimeClient/Connection/AppSyncConnection/AppSyncSubscriptionConnection+ErrorHandler.swift [12:44]
func handleError(error: Error) {
guard let subscriptionItem = subscriptionItem else {
AppSyncLogger.warn("[AppSyncSubscriptionConnection] \(#function): missing subscription item")
return
}
// If the error identifier is not for the this connection
// we return immediately without handling the error.
if case let ConnectionProviderError.subscription(identifier, _) = error,
identifier != subscriptionItem.identifier {
return
}
AppSyncSubscriptionConnection.logExtendedErrorInfo(for: error)
subscriptionState = .notSubscribed
guard let retryHandler = retryHandler,
let connectionError = error as? ConnectionProviderError
else {
subscriptionItem.subscriptionEventHandler(.failed(error), subscriptionItem)
return
}
let retryAdvice = retryHandler.shouldRetryRequest(for: connectionError)
if retryAdvice.shouldRetry, let retryInterval = retryAdvice.retryInterval {
AppSyncLogger.debug("[AppSyncSubscriptionConnection] Retrying subscription \(subscriptionItem.identifier) after \(retryInterval)")
DispatchQueue.global().asyncAfter(deadline: .now() + retryInterval) {
self.connectionProvider?.connect()
}
} else {
subscriptionItem.subscriptionEventHandler(.failed(error), subscriptionItem)
}
}