blockchainIDsystem/peer/messages.go
peer/messages.goRaw
1package main
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 Block Block `json:"block"`
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
34 //time.Sleep(1000 * time.Millisecond)
35 updateNetworkPeersList(peer.Conn, msg.PeersList)
36 propagatePeersList(peer)
37 printPeersList()
38 break
39 case "PeersList_Response":
40 color.Blue("newPeerslist")
41 fmt.Println(msg.PeersList)
42
43 //time.Sleep(1000 * time.Millisecond)
44 updateNetworkPeersList(peer.Conn, msg.PeersList)
45 printPeersList()
46 break
47 case "Block":
48 if !blockchain.blockExists(msg.Block) {
49 blockchain.addBlock(msg.Block)
50 propagateBlock(msg.Block)
51 }
52 break
53 default:
54 log.Println("Msg.Type not supported")
55 break
56 }
57
58}
59func (msg *Msg) construct(msgtype string, msgcontent string) {
60 msg.Type = msgtype
61 msg.Content = msgcontent
62 msg.Date = time.Now()
63}
64func (msg Msg) toBytes() []byte {
65 msgS, err := json.Marshal(msg)
66 check(err)
67 l := string(msgS) + "\n"
68 r := []byte(l)
69 return r
70}
71func (msg Msg) createFromBytes(bytes []byte) Msg {
72 err := json.Unmarshal(bytes, &msg)
73 check(err)
74 return msg
75}