NServiceBus.UnicastPublishRouter.SelectDestinationsForEachEndpoint C# (CSharp) Method

SelectDestinationsForEachEndpoint() private method

private SelectDestinationsForEachEndpoint ( IDistributionPolicy distributionPolicy, IEnumerable subscribers ) : HashSet
distributionPolicy IDistributionPolicy
subscribers IEnumerable
return HashSet
        HashSet<string> SelectDestinationsForEachEndpoint(IDistributionPolicy distributionPolicy, IEnumerable<Subscriber> subscribers)
        {
            //Make sure we are sending only one to each transport destination. Might happen when there are multiple routing information sources.
            var addresses = new HashSet<string>();
            var destinationsByEndpoint = subscribers
                .GroupBy(d => d.Endpoint, d => d);

            foreach (var group in destinationsByEndpoint)
            {
                if (group.Key == null) //Routing targets that do not specify endpoint name
                {
                    //Send a message to each target as we have no idea which endpoint they represent
                    foreach (var subscriber in group)
                    {
                        addresses.Add(subscriber.TransportAddress);
                    }
                }
                else
                {
                    var subscriber = distributionPolicy.GetDistributionStrategy(group.First().Endpoint, DistributionStrategyScope.Publish).SelectReceiver(group.Select(s => s.TransportAddress).ToArray());
                    addresses.Add(subscriber);
                }
            }

            return addresses;
        }