コード例 #1
0
        public ServiceEndPoint Peer(string serviceName)
        {
            var entries = _serviceDiscovery.FindServiceEndpoint(serviceName).ToList();

            if (entries.Count == 0)
            {
                return(null);
            }

            if (entries.Count == 1)
            {
                return(entries[0]);
            }

            int             total = 0;
            ServiceEndPoint best  = null;

            foreach (var entry in entries)
            {
                entry.CurrentWeight += entry.EffectiveWeight;
                total += entry.EffectiveWeight;

                if (entry.EffectiveWeight < entry.Weight)
                {
                    entry.EffectiveWeight++;
                }

                if (best == null || entry.CurrentWeight > best.CurrentWeight)
                {
                    best = entry;
                }
            }

            if (best == null)
            {
                return(null);
            }

            best.CurrentWeight -= total;
            return(best);
        }