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); }
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); }