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 color.Yellow(peer.ID)
34 }
35 i := peerIsInPeersList(peer, peersList.Peers)
36 if i == -1 {
37 peersList.Peers = append(peersList.Peers, peer)
38 } else {
39 fmt.Println(peersList.Peers[i])
40 peersList.Peers[i].ID = peer.ID
41 }
42 }
43}
44func searchPeerAndUpdate(p Peer) {
45 for _, peer := range peersList.Peers {
46 color.Red(p.IP + ":" + p.Port)
47 color.Yellow(peer.IP + ":" + peer.Port)
48 if p.IP+":"+p.Port == peer.IP+":"+peer.Port {
49 peer.ID = p.ID
50 }
51 }
52}
53
54//send the peersList to all the peers except the peer that has send the peersList
55func propagatePeersList(p Peer) {
56 for _, peer := range peersList.Peers {
57 if peer.Conn != nil {
58 if peer.ID != p.ID && p.ID != "" {
59 color.Yellow(peer.ID + " - " + p.ID)
60 var msg Msg
61 msg = msg.construct("PeersList", "here my peersList", peersList)
62 msgB := msg.toBytes()
63 _, err := peer.Conn.Write(msgB)
64 check(err)
65 } else {
66 //to the peer that has sent the peerList, we send our ID
67 /*
68 var msg Msg
69 var pl PeersList
70 msg = msg.construct("MyID", runningPeer.ID, pl)
71 msgB := msg.toBytes()
72 _, err := p.Conn.Write(msgB)
73 check(err)
74 */
75 var msg Msg
76 msg = msg.construct("PeersList_Response", "here my peersList", peersList)
77 msgB := msg.toBytes()
78 _, err := peer.Conn.Write(msgB)
79 check(err)
80 }
81 }
82 }
83}
84func printPeersList() {
85 fmt.Println("")
86 color.Green("PEERSLIST:")
87 color.Green("runningPeer.ID: " + runningPeer.ID)
88 for _, peer := range peersList.Peers {
89 fmt.Println(peer)
90 }
91 fmt.Println("")
92}