arnaucube
arnaucube/blockchainIDsystemPublic Self-hosted repository
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}