Esempio n. 1
0
 public override PieceRequest ContinueExistingRequest(IPieceRequester peer)
 {
     return(null);
 }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 public virtual void CancelRequest(IPieceRequester peer, int piece, int startOffset, int length)
 {
     CheckOverriden();
     BasePicker.CancelRequest(peer, piece, startOffset, length);
 }
Esempio n. 4
0
 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));
 }
Esempio n. 5
0
        public PieceRequest PickPiece(IPieceRequester peer, BitField available, IReadOnlyList <IPieceRequester> otherPeers)
        {
            IList <PieceRequest> bundle = PickPiece(peer, available, otherPeers, 1);

            return(bundle?.Single());
        }
Esempio n. 6
0
 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));
 }
Esempio n. 7
0
 public override void CancelRequests(IPieceRequester peer)
 {
     CancelWhere(b => peer == b.RequestedOff);
 }
Esempio n. 8
0
 public override PieceRequest ContinueExistingRequest(IPieceRequester peer, int startIndex, int endIndex)
 {
     return(null);
 }
Esempio n. 9
0
 public override IList <PieceRequest> PickPiece(IPieceRequester peer, BitField available, IReadOnlyList <IPieceRequester> otherPeers, int count, int startIndex, int endIndex)
 {
     return(null);
 }
Esempio n. 10
0
 public override bool ValidatePiece(IPieceRequester peer, int pieceIndex, int startOffset, int length, out Piece piece)
 {
     piece = null;
     return(false);
 }
Esempio n. 11
0
 public override void CancelRequests(IPieceRequester peer)
 {
 }
Esempio n. 12
0
 public override void CancelRequest(IPieceRequester peer, int piece, int startOffset, int length)
 {
 }
Esempio n. 13
0
 public override PieceRequest ContinueExistingRequest(IPieceRequester peer, int startIndex, int endIndex)
 {
     return(ActivePicker.ContinueExistingRequest(peer, startIndex, endIndex));
 }
Esempio n. 14
0
 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));
 }
Esempio n. 16
0
 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);
 }
Esempio n. 18
0
 public virtual PieceRequest ContinueExistingRequest(IPieceRequester peer)
 {
     CheckOverriden();
     return(BasePicker.ContinueExistingRequest(peer));
 }
 public override void CancelRequests(IPieceRequester peer)
 {
     ActivePicker.CancelRequests(peer);
 }
Esempio n. 20
0
 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));
 }
Esempio n. 22
0
 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));
 }
Esempio n. 23
0
 public override void CancelRequests(IPieceRequester peer)
 {
     CancelWhere(delegate(Request r) { return(r.Peer == peer); }, false);
 }
Esempio n. 24
0
 public virtual void CancelRequests(IPieceRequester peer)
 {
     CheckOverriden();
     BasePicker.CancelRequests(peer);
 }
Esempio n. 25
0
 public override void CancelRequests(IPieceRequester peer)
 {
     CancelWhere(delegate(Block b) { return(peer == b.RequestedOff); });
 }