Exemplo n.º 1
0
        public async Task <IActionResult> Aggregator(Int64 id)
        {
            Console.WriteLine($"/pollinator/atom/aggregator/{id}{Request.QueryString}");

            var aggregator = await _aggregatorManager.FindByIdAsync(id);

            // make sure the aggregator exists
            if (aggregator == null)
            {
                return(NotFound());
            }

            var subscriberCount = await _aggregatorSubscriptionManager.GetSubscriberCountAsync(aggregator);

            return(AtomFeedBuilder.CreateFromTemplate(
                       new AggregatorTemplate(aggregator, subscriberCount)
                       ).ToContentResult());
        }
Exemplo n.º 2
0
        public async Task <IActionResult> HandShake()
        {
            var user = await _userManager.GetUserAsync(User);

            var asset = await _assetManager.FindByIdAsync(user.NextAssetId);

            var aggregators = await _aggregatorManager.FindByAuthorAsync(user);

            var userSubscriptions = await _userSubscriptionManager.FindAllByAuthorAsync(user);

            var aggregatorSubscriptions = await _aggregatorSubscriptionManager.FindAllByAuthorAsync(user);

            var aggregatorSubscriptionCounts = new List <Int32>();

            // retrieve subscription count for each aggregator
            foreach (var aggregator in aggregators)
            {
                var aggregatorSubscriptionCount = await _aggregatorSubscriptionManager.GetSubscriberCountAsync(aggregator);

                aggregatorSubscriptionCounts.Add(aggregatorSubscriptionCount);
            }

            // reserve new asset when
            //      * user has no reserved asset
            //      * user has a used asset
            if (user.NextAssetId == 0 ||
                (asset != null && asset.Used))
            {
                // when reserving a new asset fails, error out
                if (!await _assetManager.ReserveAsync(user))
                {
                    return(StatusCode(500));
                }
            }

            return(AtomFeedBuilder.CreateFromTemplate(
                       new HandshakeTemplate(user, aggregators, aggregatorSubscriptionCounts.ToArray(), userSubscriptions, aggregatorSubscriptions)
                       ).ToContentResult());
        }
Exemplo n.º 3
0
 public async Task <Int32> GetSubscriberCountAsync(SporeServerAggregator aggregator)
 {
     return(await _aggregatorSubscriptionManager.GetSubscriberCountAsync(aggregator));
 }