void TryChoke(ChokeData data)
{
// Already choked
if (data.Peer.AmChoking)
return;
if (!data.Peer.IsInterested)
{
// Choke him if he's not interested
Choke(data.Peer);
}
else if (!advertisedPieces.Exists(delegate(SeededPiece p) { return p.Peer == data.Peer; }))
{
// If we have no free slots and peers are waiting, choke after 30 seconds.
// FIXME: Choke as soon as the next piece completes *or* a larger time limit *and*
// at least one piece has uploaded.
data.LastChoked = DateTime.Now;
Choke(data.Peer);
}
}