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) }