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	//read the stored blockchain
36	err := blockchain.readFromDisk()
37	check(err)
38	blockchain.print()
39
40	//runningPeer.ID = strconv.Itoa(randInt(1, 1000)) //0 is reserved for server
41	runningPeer.IP = config.IP
42	runningPeer.Port = config.Port
43	runningPeer.RESTPort = config.RESTPort
44	runningPeer.ID = hashPeer(runningPeer)
45	runningPeer.Role = "client"
46
47	//TODO clean and reorder the following lines (43 to 62)
48	//read flags, to know if is runned as p2p server
49	if len(os.Args) > 1 {
50		if os.Args[1] == "server" {
51			color.Yellow("Running as p2p server")
52			runningPeer.Role = "server"
53			runningPeer.Port = config.ServerPort
54			runningPeer.ID = hashPeer(runningPeer)
55			//runningPeer.ID = "0"
56		}
57		if len(os.Args) > 3 {
58			config.Port = os.Args[2]
59			config.RESTPort = os.Args[3]
60			runningPeer.Port = os.Args[2]
61			runningPeer.RESTPort = os.Args[3]
62			if os.Args[1] == "server" {
63				runningPeer.Port = config.ServerPort
64			}
65			runningPeer.ID = hashPeer(runningPeer)
66		}
67	}
68
69	go runRestServer()
70	thisPeerID = runningPeer.ID
71	outcomingPeersList.PeerID = runningPeer.ID
72	fmt.Println(runningPeer)
73	//outcomingPeersList.Peers = append(outcomingPeersList.Peers, runningPeer)
74	outcomingPeersList = appendPeerIfNoExist(outcomingPeersList, runningPeer)
75	fmt.Println(outcomingPeersList)
76	if runningPeer.Role == "server" {
77		go acceptPeers(runningPeer)
78	}
79	if runningPeer.Role == "client" {
80		var serverPeer Peer
81		//serverPeer.ID = "0"
82		serverPeer.IP = config.ServerIP
83		serverPeer.Port = config.ServerPort
84		serverPeer.ID = hashPeer(serverPeer)
85		serverPeer.Role = "server"
86		go acceptPeers(runningPeer)
87		connectToPeer(serverPeer)
88		reconstructBlockchainFromBlock("http://"+config.IP+":"+config.ServerRESTPort, blockchain.GenesisBlock)
89	}
90
91	for running {
92		time.Sleep(1000 * time.Millisecond)
93	}
94}