public void ReloadExistingSubscriptions()
{
var subscriptions = new List <SubscriptionInfo>();
using (var client = new AmazonSimpleNotificationServiceClient(this.AwsCredentials, this.AwsRegion)) {
var request = new ListTopicsRequest();
ListTopicsResponse response;
Task <ListTopicsResponse> ltt;
do
{
ltt = client.ListTopicsAsync(request);
ltt.Wait();
response = ltt.Result;
foreach (var topic in response.Topics)
{
var lsRequest = new ListSubscriptionsByTopicRequest()
{
TopicArn = topic.TopicArn
};
ListSubscriptionsByTopicResponse lsResponse;
Task <ListSubscriptionsByTopicResponse> lst;
do
{
lst = client.ListSubscriptionsByTopicAsync(lsRequest);
lst.Wait();
lsResponse = lst.Result;
//íterate all subscriptions which are bound to our SubscriptionCallbackUrl...
foreach (var subscription in lsResponse.Subscriptions.Where(s => string.Equals(s.Endpoint, this.SubscriptionCallbackUrl, StringComparison.InvariantCultureIgnoreCase)))
{
//skip pending subscriptions...
if (!subscription.SubscriptionArn.Equals(AwsMagicArnForPendingSubscription))
{
subscriptions.Add(new SubscriptionInfo(this, subscription.TopicArn, subscription.SubscriptionArn, false));
}
}
lsRequest.NextToken = lsResponse.NextToken;
} while (!string.IsNullOrEmpty(lsResponse.NextToken));
}
request.NextToken = response.NextToken;
} while (!string.IsNullOrEmpty(response.NextToken));
lock (_ConfirmedSubscriptions) {
_ConfirmedSubscriptions = subscriptions;
}
lock (_LocalPendingSubscriptions) {
foreach (var lps in _LocalPendingSubscriptions.ToArray())
{
if (subscriptions.Where(s => (s.TopicArn ?? "") == (lps.TopicArn ?? "")).Any())
{
_LocalPendingSubscriptions.Remove(lps);
}
}
}
}
}