Creating a custom PiecePicker
Example 1 Creating a picker to prioritise the first piece in a file¶
Example 1¶
1 public class MyPicker : PiecePicker {
2 public MyPicker (PiecePicker basePicker)
3 : base (basePicker)
4 {
5
6 }
7
8 public override MessageBundle PickPiece(PeerId id, BitField peerBitfield, List<PeerId> otherPeers, int count, int startIndex, int endIndex)
9 {
10 // If we do not have the first piece and the other peer does have it
11 if (!HaveFirstPieceAlready && peerBitfield[0] == true) {
12 BitField bf = new BitField (peerBitfield.Length);
13 bf [0] = true;
14 MessageBundle msg = base.PickPiece (id, bf, otherPeers, count, startIndex, endIndex);
15 if (msg != null)
16 return msg;
17 }
18 return base.PickPiece (id, peerBitfield, otherPeers, count, startIndex, endIndex);
19 }
20 }
21
22 // This picker can then be added to the default picking pipeline by doing:
23 torrentManager.ChangePicker (new MyPicker (torrentManager.CreateDefaultPicker ()));