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	Role string   `json:"role"` //client or server
18	Conn net.Conn `json:"conn"`
19}
20
21var running bool
22var thisPeerID string
23var runningPeer Peer
24
25func main() {
26	//initialize some vars
27	rand.Seed(time.Now().Unix())
28	running = true
29
30	color.Blue("Starting Peer")
31	//read configuration file
32	readConfig("config.json")
33
34	//runningPeer.ID = strconv.Itoa(randInt(1, 1000)) //0 is reserved for server
35	runningPeer.IP = config.IP
36	runningPeer.Port = config.Port
37	runningPeer.ID = hashPeer(runningPeer)
38	runningPeer.Role = "client"
39
40	go runRestServer()
41
42	//read flags, to know if is runned as p2p server
43	if len(os.Args) > 1 {
44		if os.Args[1] == "server" {
45			color.Yellow("Running as p2p server")
46			runningPeer.Role = "server"
47			runningPeer.Port = config.ServerPort
48			runningPeer.ID = hashPeer(runningPeer)
49			//runningPeer.ID = "0"
50		}
51	}
52	thisPeerID = runningPeer.ID
53	outcomingPeersList.PeerID = runningPeer.ID
54	fmt.Println(runningPeer)
55	//outcomingPeersList.Peers = append(outcomingPeersList.Peers, runningPeer)
56	outcomingPeersList = appendPeerIfNoExist(outcomingPeersList, runningPeer)
57	fmt.Println(outcomingPeersList)
58	if runningPeer.Role == "server" {
59		go acceptPeers(runningPeer)
60	}
61	if runningPeer.Role == "client" {
62		var serverPeer Peer
63		//serverPeer.ID = "0"
64		serverPeer.IP = config.ServerIP
65		serverPeer.Port = config.ServerPort
66		serverPeer.ID = hashPeer(serverPeer)
67		serverPeer.Role = "server"
68		connectToPeer(serverPeer)
69		go acceptPeers(runningPeer)
70	}
71
72	for running {
73		time.Sleep(1000 * time.Millisecond)
74	}
75}