Move the implementation of connection.requestPiecePendingChunks out of Torrent
This commit is contained in:
parent
559afcd0a9
commit
1725133111
|
@ -18,6 +18,7 @@ import (
|
||||||
|
|
||||||
"github.com/anacrolix/missinggo"
|
"github.com/anacrolix/missinggo"
|
||||||
"github.com/anacrolix/missinggo/bitmap"
|
"github.com/anacrolix/missinggo/bitmap"
|
||||||
|
"github.com/anacrolix/missinggo/itertools"
|
||||||
"github.com/anacrolix/missinggo/prioritybitmap"
|
"github.com/anacrolix/missinggo/prioritybitmap"
|
||||||
"github.com/bradfitz/iter"
|
"github.com/bradfitz/iter"
|
||||||
|
|
||||||
|
@ -504,8 +505,15 @@ func (cn *connection) fillRequests() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *connection) requestPiecePendingChunks(piece int) (again bool) {
|
func (c *connection) requestPiecePendingChunks(piece int) (again bool) {
|
||||||
return cn.t.connRequestPiecePendingChunks(cn, piece)
|
if !c.PeerHasPiece(piece) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
chunkIndices := c.t.pieces[piece].undirtiedChunkIndices().ToSortedSlice()
|
||||||
|
return itertools.ForPerm(len(chunkIndices), func(i int) bool {
|
||||||
|
req := request{pp.Integer(piece), c.t.chunkIndexSpec(chunkIndices[i], piece)}
|
||||||
|
return c.Request(req)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cn *connection) stopRequestingPiece(piece int) {
|
func (cn *connection) stopRequestingPiece(piece int) {
|
||||||
|
|
12
torrent.go
12
torrent.go
|
@ -17,7 +17,6 @@ import (
|
||||||
|
|
||||||
"github.com/anacrolix/missinggo"
|
"github.com/anacrolix/missinggo"
|
||||||
"github.com/anacrolix/missinggo/bitmap"
|
"github.com/anacrolix/missinggo/bitmap"
|
||||||
"github.com/anacrolix/missinggo/itertools"
|
|
||||||
"github.com/anacrolix/missinggo/perf"
|
"github.com/anacrolix/missinggo/perf"
|
||||||
"github.com/anacrolix/missinggo/pubsub"
|
"github.com/anacrolix/missinggo/pubsub"
|
||||||
"github.com/anacrolix/missinggo/slices"
|
"github.com/anacrolix/missinggo/slices"
|
||||||
|
@ -966,17 +965,6 @@ func (t *Torrent) unpendPieceRange(begin, end int) {
|
||||||
t.unpendPieces(&bm)
|
t.unpendPieces(&bm)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Torrent) connRequestPiecePendingChunks(c *connection, piece int) (more bool) {
|
|
||||||
if !c.PeerHasPiece(piece) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
chunkIndices := t.pieces[piece].undirtiedChunkIndices().ToSortedSlice()
|
|
||||||
return itertools.ForPerm(len(chunkIndices), func(i int) bool {
|
|
||||||
req := request{pp.Integer(piece), t.chunkIndexSpec(chunkIndices[i], piece)}
|
|
||||||
return c.Request(req)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *Torrent) pendRequest(req request) {
|
func (t *Torrent) pendRequest(req request) {
|
||||||
ci := chunkIndex(req.chunkSpec, t.chunkSize)
|
ci := chunkIndex(req.chunkSpec, t.chunkSize)
|
||||||
t.pieces[req.Index].pendChunkIndex(ci)
|
t.pieces[req.Index].pendChunkIndex(ci)
|
||||||
|
|
Loading…
Reference in New Issue