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	outcomingPeersList.PeerID = runningPeer.ID
53	fmt.Println(runningPeer)
54	//outcomingPeersList.Peers = append(outcomingPeersList.Peers, runningPeer)
55	outcomingPeersList = appendPeerIfNoExist(outcomingPeersList, runningPeer)
56	fmt.Println(outcomingPeersList)
57	if runningPeer.Role == "server" {
58		go acceptPeers(runningPeer)
59	}
60	if runningPeer.Role == "client" {
61		var newPeer Peer
62		newPeer.ID = "0"
63		newPeer.IP = config.ServerIP
64		newPeer.Port = config.ServerPort
65		newPeer.Role = "server"
66		connectToPeer(newPeer)
67		go acceptPeers(runningPeer)
68	}
69
70	for running {
71		time.Sleep(1000 * time.Millisecond)
72	}
73}