You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

94 lines
2.3 KiB

package main
import (
"fmt"
"math/rand"
"net"
"os"
"time"
"github.com/fatih/color"
)
type Peer struct {
ID string `json:"id"` //in the future, this will be the peer hash
IP string `json:"ip"`
Port string `json:"port"`
RESTPort string `json:"restport"`
Role string `json:"role"` //client or server
Conn net.Conn `json:"conn"`
}
var running bool
var thisPeerID string
var runningPeer Peer
func main() {
//initialize some vars
rand.Seed(time.Now().Unix())
running = true
color.Blue("Starting Peer")
//read configuration file
readConfig("config.json")
//read the stored blockchain
err := blockchain.readFromDisk()
check(err)
blockchain.print()
//runningPeer.ID = strconv.Itoa(randInt(1, 1000)) //0 is reserved for server
runningPeer.IP = config.IP
runningPeer.Port = config.Port
runningPeer.RESTPort = config.RESTPort
runningPeer.ID = hashPeer(runningPeer)
runningPeer.Role = "client"
//TODO clean and reorder the following lines (43 to 62)
//read flags, to know if is runned as p2p server
if len(os.Args) > 1 {
if os.Args[1] == "server" {
color.Yellow("Running as p2p server")
runningPeer.Role = "server"
runningPeer.Port = config.ServerPort
runningPeer.ID = hashPeer(runningPeer)
//runningPeer.ID = "0"
}
if len(os.Args) > 3 {
config.Port = os.Args[2]
config.RESTPort = os.Args[3]
runningPeer.Port = os.Args[2]
runningPeer.RESTPort = os.Args[3]
if os.Args[1] == "server" {
runningPeer.Port = config.ServerPort
}
runningPeer.ID = hashPeer(runningPeer)
}
}
go runRestServer()
thisPeerID = runningPeer.ID
outcomingPeersList.PeerID = runningPeer.ID
fmt.Println(runningPeer)
//outcomingPeersList.Peers = append(outcomingPeersList.Peers, runningPeer)
outcomingPeersList = appendPeerIfNoExist(outcomingPeersList, runningPeer)
fmt.Println(outcomingPeersList)
if runningPeer.Role == "server" {
go acceptPeers(runningPeer)
}
if runningPeer.Role == "client" {
var serverPeer Peer
//serverPeer.ID = "0"
serverPeer.IP = config.ServerIP
serverPeer.Port = config.ServerPort
serverPeer.ID = hashPeer(serverPeer)
serverPeer.Role = "server"
go acceptPeers(runningPeer)
connectToPeer(serverPeer)
reconstructBlockchainFromBlock("http://"+config.IP+":"+config.ServerRESTPort, blockchain.GenesisBlock)
}
for running {
time.Sleep(1000 * time.Millisecond)
}
}