blockchainIDsystem/peer/peersList.go
peer/peersList.goRaw
1package main
2
3import (
4 "fmt"
5 "net"
6 "time"
7
8 "github.com/fatih/color"
9)
10
11type PeersList struct {
12 PeerID string
13 Peers []Peer `json:"peerslist"`
14 Date time.Time `json:"date"`
15}
16
17//var peersList []Peer
18var peersList PeersList
19
20func peerIsInPeersList(p Peer, pl []Peer) int {
21 r := -1
22 for i, peer := range pl {
23 if peer.IP+":"+peer.Port == p.IP+":"+p.Port {
24 r = i
25 }
26 }
27 return r
28}
29func updatePeersList(conn net.Conn, newPeersList PeersList) {
30 for _, peer := range newPeersList.Peers {
31 if getIPPortFromConn(conn) == peer.IP+":"+peer.Port {
32 peer.ID = newPeersList.PeerID
33 }
34 i := peerIsInPeersList(peer, peersList.Peers)
35 if i == -1 {
36 peersList.Peers = append(peersList.Peers, peer)
37 } else {
38 fmt.Println(peersList.Peers[i])
39 peersList.Peers[i].ID = peer.ID
40 }
41 }
42}
43
44//send the peersList to all the peers except the peer that has send the peersList
45func propagatePeersList() {
46 for _, peer := range peersList.Peers {
47 if peer.Conn != nil {
48 var msg Msg
49 msg = msg.construct("PeersList", "here my peersList", peersList)
50 msgB := msg.toBytes()
51 _, err := peer.Conn.Write(msgB)
52 check(err)
53 }
54 }
55}
56func printPeersList() {
57 fmt.Println("")
58 color.Green("PEERSLIST:")
59 color.Green("thisPeerId: " + thisPeerID)
60 for _, peer := range peersList.Peers {
61 fmt.Println(peer)
62 }
63 fmt.Println("")
64}