Do a weighted choice among the highest prioritized items based on weight instead of a weighted choice based on priorities.

This commit is contained in:
Kim Alvefur 2011-06-29 09:20:48 +08:00 committed by Lance Stout
parent ccc6ab1281
commit 45412fd404

View file

@ -168,18 +168,23 @@ class ClientXMPP(BaseXMPP):
addresses = {}
intmax = 0
topprio = 65535
for answer in answers:
intmax += answer.priority
addresses[intmax] = (answer.target.to_text()[:-1],
topprio = min(topprio, answer.priority)
for answer in answers:
if answer.priority == topprio:
intmax += answer.weight
addresses[intmax] = (answer.target.to_text()[:-1],
answer.port)
#python3 returns a generator for dictionary keys
priorities = [x for x in addresses.keys()]
priorities.sort()
items = [x for x in addresses.keys()]
items.sort()
picked = random.randint(0, intmax)
for priority in priorities:
for item in items:
if picked <= priority:
address = addresses[priority]
address = addresses[item]
break
if not address: