mirror of
https://github.com/ipfs/kubo.git
synced 2026-02-27 21:37:57 +08:00
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package strategy
|
|
|
|
import (
|
|
bsmsg "github.com/jbenet/go-ipfs/bitswap/message"
|
|
peer "github.com/jbenet/go-ipfs/peer"
|
|
u "github.com/jbenet/go-ipfs/util"
|
|
)
|
|
|
|
type Strategist interface {
|
|
Accountant
|
|
|
|
// Returns a slice of Peers that
|
|
Peers() []*peer.Peer
|
|
|
|
// WantList returns the WantList for the given Peer
|
|
IsWantedByPeer(u.Key, *peer.Peer) bool
|
|
|
|
// ShouldSendTo(Peer) decides whether to send data to this Peer
|
|
ShouldSendToPeer(u.Key, *peer.Peer) bool
|
|
|
|
// Seed initializes the decider to a deterministic state
|
|
Seed(int64)
|
|
}
|
|
|
|
type Accountant interface {
|
|
// MessageReceived records receipt of message for accounting purposes
|
|
MessageReceived(*peer.Peer, bsmsg.BitSwapMessage) error
|
|
|
|
// MessageSent records sending of message for accounting purposes
|
|
MessageSent(*peer.Peer, bsmsg.BitSwapMessage) error
|
|
}
|
|
|
|
type WantList interface {
|
|
// Peer returns the owner of the WantList
|
|
Peer() *peer.Peer
|
|
|
|
// Intersection returns the keys common to both WantLists
|
|
Intersection(WantList) WantList
|
|
|
|
KeySet
|
|
}
|
|
|
|
// TODO(brian): potentially move this somewhere more generic. For now, it's
|
|
// useful in BitSwap operations.
|
|
|
|
type KeySet interface {
|
|
Contains(u.Key) bool
|
|
Keys() []u.Key
|
|
}
|