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}