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