コード例 #1
0
        public Task UpdateSubscriptionsAsync(IEnumerable <SubscriptionsForType> subscriptionsForTypes)
        {
            var subsForTypes          = subscriptionsForTypes.ToList();
            var subscriptionsToAdd    = subsForTypes.Where(sub => sub.BindingKeys != null && sub.BindingKeys.Any()).ToArray();
            var subscriptionsToRemove = subsForTypes.Where(sub => sub.BindingKeys == null || !sub.BindingKeys.Any()).ToList();

            if (subscriptionsToAdd.Any())
            {
                _peerRepository.AddDynamicSubscriptionsForTypes(_self.Id, subscriptionsToAdd);
            }

            if (subscriptionsToRemove.Any())
            {
                _peerRepository.RemoveDynamicSubscriptionsForTypes(_self.Id, subscriptionsToRemove.Select(sub => sub.MessageTypeId).ToArray());
            }

            _bus.Publish(new PeerSubscriptionsForTypesUpdated(_self.Id, DateTime.Now, subsForTypes.ToArray()));

            return(Task.CompletedTask);
        }
コード例 #2
0
        public void Handle(UpdatePeerSubscriptionsForTypesCommand message)
        {
            if (message.SubscriptionsForTypes == null || message.SubscriptionsForTypes.Length == 0)
            {
                return;
            }

            var stopwatch = Stopwatch.StartNew();

            var subscriptionsToAdd    = message.SubscriptionsForTypes.Where(sub => sub.BindingKeys != null && sub.BindingKeys.Any()).ToArray();
            var subscriptionsToRemove = message.SubscriptionsForTypes.Where(sub => sub.BindingKeys == null || !sub.BindingKeys.Any()).ToList();

            if (subscriptionsToAdd.Any())
            {
                _peerRepository.AddDynamicSubscriptionsForTypes(message.PeerId, DateTime.SpecifyKind(message.TimestampUtc, DateTimeKind.Utc), subscriptionsToAdd);
            }
            if (subscriptionsToRemove.Any())
            {
                _peerRepository.RemoveDynamicSubscriptionsForTypes(message.PeerId, DateTime.SpecifyKind(message.TimestampUtc, DateTimeKind.Utc), subscriptionsToRemove.Select(sub => sub.MessageTypeId).ToArray());
            }
            _bus.Publish(new PeerSubscriptionsForTypesUpdated(message.PeerId, message.TimestampUtc, message.SubscriptionsForTypes));

            _speedReporter.ReportSubscriptionUpdateForTypesDuration(stopwatch.Elapsed);
        }