in aws-android-sdk-appsync/src/main/java/com/amazonaws/mobileconnectors/appsync/subscription/RealSubscriptionManager.java [344:398]
public synchronized void unsubscribe(@Nonnull Subscription<?, ?, ?> subscription) {
//Get matching subscription object from the subscriptionsById map
SubscriptionObject subscriptionObject = getSubscriptionObjectFromIdMap(subscription);
if (subscriptionObject == null ) {
return;
}
if (subscriptionObject.isCancelled()) {
return;
}
// Mark subscriptionObject as cancelled.
subscriptionObject.setCancelled();
//Remove subscriptionObject from all associated topics
for (Object topic : subscriptionObject.getTopics()) {
synchronized (subscriptionsByTopicLock) {
Set<SubscriptionObject> subscriptionObjectsSet = getSubscriptionObjectSetFromTopicMap(topic.toString());
if (subscriptionObjectsSet != null ) {
subscriptionObjectsSet.remove(subscriptionObject);
}
}
}
//Remove Subscription Object from subscriptionsById map
removeSubscriptionObjectFromIdMap(subscriptionObject);
//Sweep through all the topics. Unsubscribe all topics that have 0 subscriptions.
synchronized (subscriptionsByTopicLock) {
for (String topic: subscriptionsByTopic.keySet() ) {
Set<SubscriptionObject> subscriptionObjectsSet = getSubscriptionObjectSetFromTopicMap(topic);
if ( subscriptionObjectsSet != null && subscriptionObjectsSet.size() > 0 ) {
Log.v(TAG, "Subscription Infrastructure: SubscriptionObjects still exist for topic [" + topic + "]. Will not unsubscribe at the MQTT level");
continue;
}
Log.v(TAG, "Subscription Infrastructure: Number of SubscriptionObjects for topic [" + topic + "] is 0. Unsubscribing at the MQTT Level...");
//Get connection from the topic to Connection map.
MqttSubscriptionClient client = topicConnectionMap.get(topic);
if (client == null ) {
continue;
}
//Call unsubscribe at the MQTT level
client.unsubscribe(topic);
subscriptionsByTopic.remove(topic);
//Check if the client has any topics left. If not, close it.
if (client.getTopics() == null || client.getTopics().size() == 0) {
Log.v(TAG, "Subscription Infrastructure: MQTT Client has no active topics. Disconnecting...");
client.close();
}
}
}
}