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	"strconv"
 9	"time"
10
11	"github.com/fatih/color"
12)
13
14type Peer struct {
15	ID   string   `json:"id"` //in the future, this will be the peer hash
16	IP   string   `json:"ip"`
17	Port string   `json:"port"`
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.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 = "0"
49		}
50	}
51	thisPeerID = runningPeer.ID
52	peersList.PeerID = runningPeer.ID
53	fmt.Println(runningPeer)
54	peersList.Peers = append(peersList.Peers, runningPeer)
55	fmt.Println(peersList)
56	if runningPeer.Role == "server" {
57		go acceptPeers(runningPeer)
58	}
59	if runningPeer.Role == "client" {
60		var newPeer Peer
61		newPeer.IP = config.ServerIP
62		newPeer.Port = config.ServerPort
63		newPeer.Role = "server"
64		connectToPeer(newPeer)
65	}
66
67	for running {
68		time.Sleep(1000 * time.Millisecond)
69	}
70}