-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
/
Copy pathinterface.go
45 lines (33 loc) · 1.12 KB
/
interface.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package strategy
import (
bsmsg "github.com/jbenet/go-ipfs/exchange/bitswap/message"
peer "github.com/jbenet/go-ipfs/peer"
u "github.com/jbenet/go-ipfs/util"
)
type Strategy interface {
// Returns a slice of Peers that
Peers() []*peer.Peer
// WantList returns the WantList for the given Peer
BlockIsWantedByPeer(u.Key, *peer.Peer) bool
// ShouldSendTo(Peer) decides whether to send data to this Peer
ShouldSendBlockToPeer(u.Key, *peer.Peer) bool
// Seed initializes the decider to a deterministic state
Seed(int64)
// 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
}