public override PieceRequest ContinueExistingRequest(IPieceRequester peer) { return(null); }
public override IList <PieceRequest> PickPiece(IPieceRequester peer, BitField available, IReadOnlyList <IPieceRequester> otherPeers, int count, int startIndex, int endIndex) { // Only request 2 pieces at a time in endgame mode // to prevent a *massive* overshoot if (peer.IsChoking || peer.AmRequestingPiecesCount > 2) { return(null); } LoadPieces(available); // 1) See if there are any blocks which have not been requested at all. Request the block if the peer has it foreach (Piece p in pieces) { if (!available[p.Index] || p.AllBlocksRequested) { continue; } for (int i = 0; i < p.BlockCount; i++) { if (p.Blocks[i].Requested) { continue; } PieceRequest requestMessage = p.Blocks[i].CreateRequest(peer); Requests.Add(new Request(peer, p.Blocks[i])); return(new[] { requestMessage }); } } // 2) For each block with an existing request, add another request. We do a search from the start // of the list to the end. So when we add a duplicate request, move both requests to the end of the list foreach (Piece p in pieces) { if (!available[p.Index]) { continue; } for (int i = 0; i < p.BlockCount; i++) { if (p.Blocks[i].Received || AlreadyRequested(p.Blocks[i], peer)) { continue; } int c = Requests.Count; for (int j = 0; j < Requests.Count - 1 && (c-- > 0); j++) { if (Requests[j].Block.PieceIndex == p.Index && Requests[j].Block.StartOffset == p.Blocks[i].StartOffset) { Request r = Requests[j]; Requests.RemoveAt(j); Requests.Add(r); j--; } } PieceRequest requestMessage = p.Blocks[i].CreateRequest(peer); Requests.Add(new Request(peer, p.Blocks[i])); return(new[] { requestMessage }); } } return(null); }
public virtual void CancelRequest(IPieceRequester peer, int piece, int startOffset, int length) { CheckOverriden(); BasePicker.CancelRequest(peer, piece, startOffset, length); }
public override IList <PieceRequest> PickPiece(IPieceRequester peer, BitField available, IReadOnlyList <IPieceRequester> otherPeers, int count, int startIndex, int endIndex) { return(ActivePicker.PickPiece(peer, available, otherPeers, count, startIndex, endIndex)); }
public PieceRequest PickPiece(IPieceRequester peer, BitField available, IReadOnlyList <IPieceRequester> otherPeers) { IList <PieceRequest> bundle = PickPiece(peer, available, otherPeers, 1); return(bundle?.Single()); }
public virtual IList <PieceRequest> PickPiece(IPieceRequester peer, BitField available, IReadOnlyList <IPieceRequester> otherPeers, int count, int startIndex, int endIndex) { CheckOverriden(); return(BasePicker.PickPiece(peer, available, otherPeers, count, startIndex, endIndex)); }
public override void CancelRequests(IPieceRequester peer) { CancelWhere(b => peer == b.RequestedOff); }
public override PieceRequest ContinueExistingRequest(IPieceRequester peer, int startIndex, int endIndex) { return(null); }
public override IList <PieceRequest> PickPiece(IPieceRequester peer, BitField available, IReadOnlyList <IPieceRequester> otherPeers, int count, int startIndex, int endIndex) { return(null); }
public override bool ValidatePiece(IPieceRequester peer, int pieceIndex, int startOffset, int length, out Piece piece) { piece = null; return(false); }
public override void CancelRequests(IPieceRequester peer) { }
public override void CancelRequest(IPieceRequester peer, int piece, int startOffset, int length) { }
public override PieceRequest ContinueExistingRequest(IPieceRequester peer, int startIndex, int endIndex) { return(ActivePicker.ContinueExistingRequest(peer, startIndex, endIndex)); }
public override void CancelRequests(IPieceRequester peer) { CancelWhere(r => r.Peer == peer, false); }
public override bool ValidatePiece(IPieceRequester peer, int pieceIndex, int startOffset, int length, out Piece piece) { return(ActivePicker.ValidatePiece(peer, pieceIndex, startOffset, length, out piece)); }
public Request(IPieceRequester peer, Block block) { Peer = peer; Block = block; }
public override void CancelRequest(IPieceRequester peer, int piece, int startOffset, int length) { ActivePicker.CancelRequest(peer, piece, startOffset, length); }
public virtual PieceRequest ContinueExistingRequest(IPieceRequester peer) { CheckOverriden(); return(BasePicker.ContinueExistingRequest(peer)); }
public override void CancelRequests(IPieceRequester peer) { ActivePicker.CancelRequests(peer); }
public IList <PieceRequest> PickPiece(IPieceRequester peer, BitField available, IReadOnlyList <IPieceRequester> otherPeers, int count) { return(PickPiece(peer, available, otherPeers, count, 0, available.Length)); }
public override PieceRequest ContinueExistingRequest(IPieceRequester peer) { return(ActivePicker.ContinueExistingRequest(peer)); }
public virtual bool ValidatePiece(IPieceRequester peer, int pieceIndex, int startOffset, int length, out Piece piece) { CheckOverriden(); return(BasePicker.ValidatePiece(peer, pieceIndex, startOffset, length, out piece)); }
public override void CancelRequests(IPieceRequester peer) { CancelWhere(delegate(Request r) { return(r.Peer == peer); }, false); }
public virtual void CancelRequests(IPieceRequester peer) { CheckOverriden(); BasePicker.CancelRequests(peer); }
public override void CancelRequests(IPieceRequester peer) { CancelWhere(delegate(Block b) { return(peer == b.RequestedOff); }); }