arnaucube
arnaucube/blockchainIDsystemPublic Self-hosted repository
blockchainIDsystem/peer/main.go
peer/main.goRaw
 1package main
 2
 3import (
 4	"fmt"
 5	"math/rand"
 6	"net"
 7	"os"
 8	"time"
 9
10	"github.com/fatih/color"
11)
12
13type Peer struct {
14	ID       string   `json:"id"` //in the future, this will be the peer hash
15	IP       string   `json:"ip"`
16	Port     string   `json:"port"`
17	RESTPort string   `json:"restport"`
18	Role     string   `json:"role"` //client or server
19	Conn     net.Conn `json:"conn"`
20}
21
22var running bool
23var thisPeerID string
24var runningPeer Peer
25
26func main() {
27	//initialize some vars
28	rand.Seed(time.Now().Unix())
29	running = true
30
31	color.Blue("Starting Peer")
32	//read configuration file
33	readConfig("config.json")
34
35	//runningPeer.ID = strconv.Itoa(randInt(1, 1000)) //0 is reserved for server
36	runningPeer.IP = config.IP
37	runningPeer.Port = config.Port
38	runningPeer.RESTPort = config.RESTPort
39	runningPeer.ID = hashPeer(runningPeer)
40	runningPeer.Role = "client"
41
42	go runRestServer()
43
44	//read flags, to know if is runned as p2p server
45	if len(os.Args) > 1 {
46		if os.Args[1] == "server" {
47			color.Yellow("Running as p2p server")
48			runningPeer.Role = "server"
49			runningPeer.Port = config.ServerPort
50			runningPeer.ID = hashPeer(runningPeer)
51			//runningPeer.ID = "0"
52		}
53	}
54	thisPeerID = runningPeer.ID
55	outcomingPeersList.PeerID = runningPeer.ID
56	fmt.Println(runningPeer)
57	//outcomingPeersList.Peers = append(outcomingPeersList.Peers, runningPeer)
58	outcomingPeersList = appendPeerIfNoExist(outcomingPeersList, runningPeer)
59	fmt.Println(outcomingPeersList)
60	if runningPeer.Role == "server" {
61		go acceptPeers(runningPeer)
62	}
63	if runningPeer.Role == "client" {
64		var serverPeer Peer
65		//serverPeer.ID = "0"
66		serverPeer.IP = config.ServerIP
67		serverPeer.Port = config.ServerPort
68		serverPeer.ID = hashPeer(serverPeer)
69		serverPeer.Role = "server"
70		connectToPeer(serverPeer)
71		reconstructBlockchainFromBlock("http://"+config.IP+":"+config.ServerRESTPort, blockchain.GenesisBlock)
72		go acceptPeers(runningPeer)
73	}
74
75	for running {
76		time.Sleep(1000 * time.Millisecond)
77	}
78}