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			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}