bc/peer/p2plib/messages.go
peer/p2plib/messages.goRaw
1package p2plib
2
3import (
4 "encoding/json"
5 "fmt"
6 "log"
7 "time"
8
9 "github.com/fatih/color"
10)
11
12type Msg struct {
13 Type string `json:"type"`
14 Date time.Time `json:"date"`
15 Content string `json:"content"`
16 PeersList PeersList `json:"peerslist"`
17 Data []byte `json:"data"`
18}
19
20func MessageHandler(peer Peer, msg Msg) {
21
22 log.Println("[New msg]")
23 log.Println(msg)
24
25 switch msg.Type {
26 case "Hi":
27 color.Yellow(msg.Type)
28 color.Green(msg.Content)
29 break
30 case "PeersList":
31 color.Blue("newPeerslist")
32 fmt.Println(msg.PeersList)
33 color.Red("PeersList")
34
35 UpdateNetworkPeersList(peer.Conn, msg.PeersList)
36 PropagatePeersList(peer)
37 PrintPeersList()
38 break
39 case "PeersList_Response":
40 //for the moment is not beeing used
41 color.Blue("newPeerslist, from PeersList_Response")
42 fmt.Println(msg.PeersList)
43 color.Red("PeersList_Response")
44
45 UpdateNetworkPeersList(peer.Conn, msg.PeersList)
46 PropagatePeersList(peer)
47 PrintPeersList()
48 break
49 case "Block":
50 /*//TODO check if the block is signed by an autorized emitter
51 if !blockchain.blockExists(msg.Block) {
52 blockchain.addBlock(msg.Block)
53 propagateBlock(msg.Block)
54 }*/
55 break
56 default:
57 log.Println("Msg.Type not supported")
58 break
59 }
60
61}
62func (msg *Msg) Construct(msgtype string, msgcontent string) {
63 msg.Type = msgtype
64 msg.Content = msgcontent
65 msg.Date = time.Now()
66}
67func (msg Msg) ToBytes() []byte {
68 msgS, err := json.Marshal(msg)
69 check(err)
70 l := string(msgS) + "\n"
71 r := []byte(l)
72 return r
73}
74func (msg Msg) CreateFromBytes(bytes []byte) Msg {
75 err := json.Unmarshal(bytes, &msg)
76 check(err)
77 return msg
78}