-
Notifications
You must be signed in to change notification settings - Fork 199
/
interface.go
106 lines (87 loc) · 3.85 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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package p2p
import (
"encoding/hex"
"time"
"github.com/multiversx/mx-chain-core-go/core"
p2p "github.com/multiversx/mx-chain-p2p-go"
)
// MessageProcessor is the interface used to describe what a receive message processor should do
// All implementations that will be called from Messenger implementation will need to satisfy this interface
// If the function returns a non nil value, the received message will not be propagated to its connected peers
type MessageProcessor = p2p.MessageProcessor
// SendableData represents the struct used in data throttler implementation
type SendableData struct {
Buff []byte
Topic string
}
// Messenger is the main struct used for communication with other peers
type Messenger = p2p.Messenger
// MessageP2P defines what a p2p message can do (should return)
type MessageP2P = p2p.MessageP2P
// ChannelLoadBalancer defines what a load balancer that uses chans should do
type ChannelLoadBalancer interface {
AddChannel(channel string) error
RemoveChannel(channel string) error
GetChannelOrDefault(channel string) chan *SendableData
CollectOneElementFromChannels() *SendableData
Close() error
IsInterfaceNil() bool
}
// MessageOriginatorPid will output the message peer id in a pretty format
// If it can, it will display the last displayLastPidChars (12) characters from the pid
func MessageOriginatorPid(msg MessageP2P) string {
return PeerIdToShortString(msg.Peer())
}
// PeerIdToShortString trims the first displayLastPidChars characters of the provided peer ID after
// converting the peer ID to string using the Pretty functionality
func PeerIdToShortString(pid core.PeerID) string {
return p2p.PeerIdToShortString(pid)
}
// MessageOriginatorSeq will output the sequence number as hex
func MessageOriginatorSeq(msg MessageP2P) string {
return hex.EncodeToString(msg.SeqNo())
}
// PeerShardResolver is able to resolve the link between the provided PeerID and the shardID
type PeerShardResolver = p2p.PeerShardResolver
// ConnectedPeersInfo represents the DTO structure used to output the metrics for connected peers
type ConnectedPeersInfo = p2p.ConnectedPeersInfo
// NetworkShardingCollector defines the updating methods used by the network sharding component
// The interface assures that the collected data will be used by the p2p network sharding components
type NetworkShardingCollector interface {
UpdatePeerIDInfo(pid core.PeerID, pk []byte, shardID uint32)
IsInterfaceNil() bool
}
// PreferredPeersHolderHandler defines the behavior of a component able to handle preferred peers operations
type PreferredPeersHolderHandler interface {
PutConnectionAddress(peerID core.PeerID, address string)
PutShardID(peerID core.PeerID, shardID uint32)
Get() map[uint32][]core.PeerID
Contains(peerID core.PeerID) bool
Remove(peerID core.PeerID)
Clear()
IsInterfaceNil() bool
}
// PeerDenialEvaluator defines the behavior of a component that is able to decide if a peer ID is black listed or not
// TODO merge this interface with the PeerShardResolver => P2PProtocolHandler ?
// TODO move antiflooding inside network messenger
type PeerDenialEvaluator = p2p.PeerDenialEvaluator
// SyncTimer represent an entity able to tell the current time
type SyncTimer interface {
CurrentTime() time.Time
IsInterfaceNil() bool
}
// PeersRatingHandler represent an entity able to handle peers ratings
type PeersRatingHandler interface {
AddPeer(pid core.PeerID)
IncreaseRating(pid core.PeerID)
DecreaseRating(pid core.PeerID)
GetTopRatedPeersFromList(peers []core.PeerID, minNumOfPeersExpected int) []core.PeerID
IsInterfaceNil() bool
}
// PeerTopicNotifier represent an entity able to handle new notifications on a new peer on a topic
type PeerTopicNotifier = p2p.PeerTopicNotifier
// IdentityGenerator represent an entity able to create a random p2p identity
type IdentityGenerator interface {
CreateRandomP2PIdentity() ([]byte, core.PeerID, error)
IsInterfaceNil() bool
}