package p2plib
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"time"
|
|
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
func InitializePeer(role, ip, port, restport, serverip, serverport string,
|
|
configuredMsgCases map[string]func(Peer, Msg)) ThisPeer {
|
|
//initialize some vars
|
|
rand.Seed(time.Now().Unix())
|
|
|
|
InitializeDefaultMsgCases(configuredMsgCases)
|
|
|
|
var tp ThisPeer
|
|
tp.Running = true
|
|
tp.RunningPeer.Role = role
|
|
tp.RunningPeer.Port = port
|
|
tp.RunningPeer.RESTPort = restport
|
|
tp.RunningPeer.ID = HashPeer(tp.RunningPeer)
|
|
|
|
tp.ID = tp.RunningPeer.ID
|
|
globalTP.PeersConnections.Outcoming.PeerID = tp.RunningPeer.ID
|
|
fmt.Println(tp.RunningPeer)
|
|
//outcomingPeersList.Peers = append(outcomingPeersList.Peers, peer.RunningPeer)
|
|
globalTP.PeersConnections.Outcoming = AppendPeerIfNoExist(globalTP.PeersConnections.Outcoming, tp.RunningPeer)
|
|
fmt.Println(globalTP.PeersConnections.Outcoming)
|
|
|
|
if tp.RunningPeer.Role == "server" {
|
|
go tp.AcceptPeers(tp.RunningPeer)
|
|
}
|
|
if tp.RunningPeer.Role == "client" {
|
|
var serverPeer Peer
|
|
serverPeer.IP = serverip
|
|
serverPeer.Port = serverport
|
|
serverPeer.Role = "server"
|
|
serverPeer.ID = HashPeer(serverPeer)
|
|
go tp.AcceptPeers(tp.RunningPeer)
|
|
ConnectToPeer(serverPeer)
|
|
}
|
|
globalTP = tp
|
|
|
|
return tp
|
|
|
|
}
|
|
|
|
func InitializeDefaultMsgCases(configuredMsgCases map[string]func(Peer, Msg)) {
|
|
//msgCases := make(map[string]func(Peer, Msg)) --> no, it's used the global
|
|
msgCases = make(map[string]func(Peer, Msg))
|
|
|
|
//get the user configured msgCases
|
|
for k, v := range configuredMsgCases {
|
|
msgCases[k] = v
|
|
}
|
|
|
|
msgCases["Hi"] = func(peer Peer, msg Msg) {
|
|
color.Yellow(msg.Type)
|
|
color.Green(msg.Content)
|
|
}
|
|
|
|
msgCases["PeersList"] = func(peer Peer, msg Msg) {
|
|
color.Blue("newPeerslist")
|
|
fmt.Println(msg.PeersList)
|
|
color.Red("PeersList")
|
|
|
|
UpdateNetworkPeersList(peer.Conn, msg.PeersList)
|
|
PropagatePeersList(peer)
|
|
PrintPeersList()
|
|
}
|
|
|
|
msgCases["Data"] = func(peer Peer, msg Msg) {
|
|
color.Yellow(msg.Type)
|
|
color.Green(msg.Content)
|
|
PropagateData(peer, "data")
|
|
}
|
|
fmt.Println(msgCases)
|
|
}
|