in aws-android-sdk-appsync-runtime/src/main/java/com/apollographql/apollo/internal/RealAppSyncSubscriptionCall.java [60:118]
public synchronized void execute(@Nonnull final Callback<T> callback) {
if ( callback == null ) {
logger.w("Subscription Infrastructure: Callback passed into subscription [" + subscription +"] was null. Will not subscribe.");
return;
}
new Thread(new Runnable() {
@Override
public void run() {
userCallback = callback;
subscriptionManager.addListener(subscription, callback);
switch (state.get()) {
case IDLE: {
state.set(ACTIVE);
break;
}
case CANCELED:
callback.onFailure(new ApolloCanceledException("Call is cancelled."));
break;
case ACTIVE:
callback.onFailure(new ApolloException("Already Executed"));
break;
default:
callback.onFailure(new ApolloException("Unknown state"));
}
try {
if (subscriptionSemaphore.tryAcquire(MAX_WAIT_TIME, TimeUnit.SECONDS)) {
logger.d("Subscription Infrastructure: Acquired subscription Semaphore. Continuing");
} else {
logger.d("Subscription Infrastructure: Did not acquire subscription Semaphore after waiting for [" + MAX_WAIT_TIME + "] seconds. Will continue");
}
} catch (InterruptedException e) {
logger.e(e, "Subscription Infrastructure:Got exception while waiting to acquire subscription Semaphore. Will continue without waiting");
}
logger.d("Subscription Infrastructure: Making request to server to get Subscription Meta Data");
subscriptionMetadataRequest.enqueue(new GraphQLCall.Callback<T>() {
@Override
public void onResponse(@Nonnull Response<T> response) {
subscriptionSemaphore.release();
// Do nothing. Internal code has been kicked off.
}
@Override
public void onFailure(@Nonnull ApolloException e) {
subscriptionSemaphore.release();
reportFailureToSubscriptionManager();
callback.onFailure(e);
}
});
}
}).start();
}