import (
"time"
- "unsafe"
)
type PeerNextRequestState struct {
Requests map[Request]struct{}
}
-type PeerPointer = unsafe.Pointer
+type PeerId interface {
+ Uintptr() uintptr
+}
type Peer struct {
- HasPiece func(pieceIndex) bool
- MaxRequests func() int
- HasExistingRequest func(Request) bool
+ HasPiece func(i pieceIndex) bool
+ MaxRequests int
+ HasExistingRequest func(r Request) bool
Choking bool
PieceAllowedFast func(pieceIndex) bool
DownloadRate float64
Age time.Duration
- Id PeerPointer
+ // This is passed back out at the end, so must support equality. Could be a type-param later.
+ Id PeerId
+}
+
+func (p *Peer) pieceAllowedFastOrDefault(i pieceIndex) bool {
+ if f := p.PieceAllowedFast; f != nil {
+ return f(i)
+ }
+ return false
}
// TODO: This might be used in more places I think.
func (p *Peer) canRequestPiece(i pieceIndex) bool {
- return p.HasPiece(i) && (!p.Choking || p.PieceAllowedFast(i))
+ return p.HasPiece(i) && (!p.Choking || (p.PieceAllowedFast != nil && p.PieceAllowedFast(i)))
}