public static void StreamTorrent(Core.TorrentHandle handle, int fileIndex) { var ti = handle.torrent_file(); var files = ti.files(); if(fileIndex < 0 || fileIndex > files.num_files()) { throw new ArgumentOutOfRangeException(); } var fileEntry = files.at(fileIndex); var peer_req = ti.map_file(fileIndex, 0, 1048576); var startPiece = peer_req.piece; var piece_length = ti.piece_length(); var num_pieces = (int)Math.Ceiling((double)(fileEntry.size / piece_length)); var end_piece = Math.Min(startPiece + num_pieces, ti.num_pieces() - 1); for (int i = startPiece; i < end_piece; i++) handle.piece_priority(i,0); //set first piece with higher priority handle.piece_priority(startPiece, 7); var lastPiece = startPiece; start_window = startPiece; end_window = Math.Min(end_window, lastPiece); for (int i = start_window; i <= end_window; i++) handle.piece_priority(i, 1); while (start_window <= end_window) { if (handle.have_piece(start_window)) { handle.piece_priority(++start_window, 7); continue; } Thread.Sleep(200); } }