protected void GetLeaveEarly(AsDhtGetState adgs) {
int left = adgs.queueMapping.Count;
// Maybe we can leave early
bool got_all_values = true;
foreach (DictionaryEntry de in adgs.results) {
int val = ((Hashtable) de.Value).Count;
if(val < MAJORITY && ((val + left) >= MAJORITY)) {
got_all_values = false;
break;
}
}
// If we got to leave early, we must clean up
if(got_all_values) {
if(Dht.DhtLog.Enabled) {
ProtocolLog.Write(Dht.DhtLog, String.Format(
"GetLeaveEarly found:left:total = {0}:{1}:{2}",
adgs.results.Count, left, DEGREE));
}
adgs.returns.Close();
adgs.GotToLeaveEarly = true;
}
}