arnaucube
arnaucube/bcPublic Self-hosted repository
bc/peer/p2plib/init.go
peer/p2plib/init.goRaw
 1package p2plib
 2
 3import (
 4	"fmt"
 5	"math/rand"
 6	"time"
 7
 8	"github.com/fatih/color"
 9)
10
11func InitializePeer(role, ip, port, restport, serverip, serverport string,
12	configuredMsgCases map[string]func(Peer, Msg)) ThisPeer {
13	//initialize some vars
14	rand.Seed(time.Now().Unix())
15
16	InitializeDefaultMsgCases(configuredMsgCases)
17
18	var tp ThisPeer
19	tp.Running = true
20	tp.RunningPeer.Role = role
21	tp.RunningPeer.Port = port
22	tp.RunningPeer.RESTPort = restport
23	tp.RunningPeer.ID = HashPeer(tp.RunningPeer)
24
25	tp.ID = tp.RunningPeer.ID
26	globalTP.PeersConnections.Outcoming.PeerID = tp.RunningPeer.ID
27	fmt.Println(tp.RunningPeer)
28	//outcomingPeersList.Peers = append(outcomingPeersList.Peers, peer.RunningPeer)
29	globalTP.PeersConnections.Outcoming = AppendPeerIfNoExist(globalTP.PeersConnections.Outcoming, tp.RunningPeer)
30	fmt.Println(globalTP.PeersConnections.Outcoming)
31
32	if tp.RunningPeer.Role == "server" {
33		go tp.AcceptPeers(tp.RunningPeer)
34	}
35	if tp.RunningPeer.Role == "client" {
36		var serverPeer Peer
37		serverPeer.IP = serverip
38		serverPeer.Port = serverport
39		serverPeer.Role = "server"
40		serverPeer.ID = HashPeer(serverPeer)
41		go tp.AcceptPeers(tp.RunningPeer)
42		ConnectToPeer(serverPeer)
43	}
44	globalTP = tp
45
46	return tp
47
48}
49
50func InitializeDefaultMsgCases(configuredMsgCases map[string]func(Peer, Msg)) {
51	//msgCases := make(map[string]func(Peer, Msg)) --> no, it's used the global
52	msgCases = make(map[string]func(Peer, Msg))
53
54	//get the user configured msgCases
55	for k, v := range configuredMsgCases {
56		msgCases[k] = v
57	}
58
59	msgCases["Hi"] = func(peer Peer, msg Msg) {
60		color.Yellow(msg.Type)
61		color.Green(msg.Content)
62	}
63
64	msgCases["PeersList"] = func(peer Peer, msg Msg) {
65		color.Blue("newPeerslist")
66		fmt.Println(msg.PeersList)
67		color.Red("PeersList")
68
69		UpdateNetworkPeersList(peer.Conn, msg.PeersList)
70		PropagatePeersList(peer)
71		PrintPeersList()
72	}
73
74	msgCases["Data"] = func(peer Peer, msg Msg) {
75		color.Yellow(msg.Type)
76		color.Green(msg.Content)
77		PropagateData(peer, "data")
78	}
79	fmt.Println(msgCases)
80}