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.
 
 
 
 
 

73 lines
1.6 KiB

package main
import (
"fmt"
"math/rand"
"net"
"os"
"strconv"
"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"`
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")
runningPeer.ID = strconv.Itoa(randInt(1, 1000)) //0 is reserved for server
runningPeer.IP = config.IP
runningPeer.Port = config.Port
runningPeer.Role = "client"
go runRestServer()
//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 = "0"
}
}
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 newPeer Peer
newPeer.ID = "0"
newPeer.IP = config.ServerIP
newPeer.Port = config.ServerPort
newPeer.Role = "server"
connectToPeer(newPeer)
go acceptPeers(runningPeer)
}
for running {
time.Sleep(1000 * time.Millisecond)
}
}