void initiateReconnectSequence()

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