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"`
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
24
25func main() {
26	//initialize some vars
27	rand.Seed(time.Now().Unix())
28	running = true
29	var peer Peer
30
31	color.Blue("Starting Peer")
32	readConfig("config.json")
33
34	peer.ID = strconv.Itoa(randInt(1, 1000)) //0 is reserved for server
35	peer.IP = config.IP
36	peer.Port = config.Port
37	peer.Role = "client"
38
39	//read flags, to know if is runned as p2p server
40	if len(os.Args) > 1 {
41		if os.Args[1] == "server" {
42			color.Yellow("Running as p2p server")
43			peer.Role = "server"
44			peer.Port = config.ServerPort
45			peer.ID = "0"
46		}
47	}
48	thisPeerID = peer.ID
49	peersList.PeerID = peer.ID
50	fmt.Println(peer)
51	peersList.Peers = append(peersList.Peers, peer)
52	fmt.Println(peersList)
53	if peer.Role == "server" {
54		go acceptPeers(peer)
55	}
56	if peer.Role == "client" {
57		var newPeer Peer
58		newPeer.IP = config.ServerIP
59		newPeer.Port = config.ServerPort
60		newPeer.Role = "server"
61		connectToPeer(newPeer)
62	}
63
64	for running {
65		time.Sleep(1000 * time.Millisecond)
66	}
67}