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 "MyID":
48 color.Blue("MyID")
49 fmt.Println(msg.Content)
50 color.Green(peer.Conn.RemoteAddr().String())
51 peer.ID = msg.Content
52 searchPeerAndUpdate(peer)
53
54 //time.Sleep(1000 * time.Millisecond)
55 /*
56 updatePeersList(peer.Conn, msg.PeersList)
57 propagatePeersList(peer)
58 */
59 printPeersList()
60 break
61 case "Block":
62 if !blockchain.blockExists(msg.Block) {
63 blockchain.addBlock(msg.Block)
64 propagateBlock(msg.Block)
65 }
66 break
67 default:
68 log.Println("Msg.Type not supported")
69 break
70 }
71
72}
73func (msg *Msg) construct(msgtype string, msgcontent string) {
74 msg.Type = msgtype
75 msg.Content = msgcontent
76 msg.Date = time.Now()
77}
78func (msg Msg) toBytes() []byte {
79 msgS, err := json.Marshal(msg)
80 check(err)
81 l := string(msgS) + "\n"
82 r := []byte(l)
83 return r
84}
85func (msg Msg) createFromBytes(bytes []byte) Msg {
86 err := json.Unmarshal(bytes, &msg)
87 check(err)
88 return msg
89}