/
messagerequest.go
64 lines (51 loc) · 1.38 KB
/
messagerequest.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
package p2p
import (
"github.com/theQRL/zond/protos"
"sync"
)
type MessageRequest struct {
lock sync.Mutex
peers map[*Peer]bool
mrData *protos.MRData
requested bool // True if Request for full message has already been done from the peer
}
func (messageRequest *MessageRequest) addPeer(peer *Peer) {
messageRequest.lock.Lock()
defer messageRequest.lock.Unlock()
messageRequest.peers[peer] = false
}
func (messageRequest *MessageRequest) SetPeer(peer *Peer, value bool) {
messageRequest.lock.Lock()
defer messageRequest.lock.Unlock()
messageRequest.peers[peer] = value
}
func (messageRequest *MessageRequest) SetRequested(value bool) {
messageRequest.lock.Lock()
defer messageRequest.lock.Unlock()
messageRequest.requested = value
}
func (messageRequest *MessageRequest) GetRequested() bool {
messageRequest.lock.Lock()
defer messageRequest.lock.Unlock()
return messageRequest.requested
}
func (messageRequest *MessageRequest) GetPeer() *Peer {
messageRequest.lock.Lock()
defer messageRequest.lock.Unlock()
for peer, requested := range messageRequest.peers {
if requested {
continue
}
return peer
}
return nil
}
func CreateMessageRequest(mrData *protos.MRData, peer *Peer) (messageRequest *MessageRequest) {
messageRequest = &MessageRequest {
peers: make(map[*Peer]bool),
mrData: mrData,
requested: false,
}
messageRequest.peers[peer] = false
return
}