in aws-android-sdk-appsync/src/main/java/com/amazonaws/mobileconnectors/appsync/subscription/RealSubscriptionManager.java [417:472]
void initiateReconnectSequence() {
synchronized(reconnectionLock) {
if (reconnectionInProgress) {
return;
}
reconnectionInProgress = true;
reconnectThread = new Thread(new Runnable() {
@Override
public void run() {
int retryCount = 1;
long waitMillis;
while (reconnectionInProgress) {
waitMillis = RetryInterceptor.calculateBackoff(retryCount);
try {
Log.v(TAG, "Subscription Infrastructure: Sleeping for [" + (waitMillis)+ "] ms");
Thread.sleep(waitMillis);
}
catch (InterruptedException ie) {
Log.v(TAG, "SubscriptionInfrastructure: Thread.sleep was interrupted in the exponential backoff for reconnects");
}
//Grab any non canceled subscription object to retry.
SubscriptionObject subscriptionToRetry = null;
AppSyncSubscriptionCall.Callback callback = null;
synchronized (subscriptionsByIdLock) {
for (SubscriptionObject subscriptionObject : subscriptionsById.values()) {
if (!subscriptionObject.isCancelled() && !subscriptionObject.getListeners().isEmpty()) {
subscriptionToRetry = subscriptionObject;
callback = (AppSyncSubscriptionCall.Callback) subscriptionToRetry.getListeners().iterator().next();
break;
}
}
}
//Initiate Retry if required
if (subscriptionToRetry != null && callback != null ) {
Log.v(TAG, "Subscription Infrastructure: Attempting to reconnect");
reconnectCountdownLatch = new CountDownLatch(1);
mApolloClient.subscribe(subscriptionToRetry.subscription).execute(callback);
try {
reconnectCountdownLatch.await(1, TimeUnit.MINUTES);
} catch (InterruptedException ioe) {
Log.v(TAG, "Subscription Infrastructure: Wait interrupted.");
}
}
else {
reconnectionInProgress = false;
}
retryCount++;
}
}
});
reconnectThread.start();
}
}