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}
18
19func messageHandler(peer Peer, msg Msg) {
20
21 log.Println("[New msg]")
22 log.Println(msg)
23
24 switch msg.Type {
25 case "Hi":
26 color.Yellow(msg.Type)
27 color.Green(msg.Content)
28 break
29 case "PeersList":
30 color.Blue("newPeerslist")
31 fmt.Println(msg.PeersList)
32
33 //time.Sleep(1000 * time.Millisecond)
34 updatePeersList(peer.Conn, msg.PeersList)
35 propagatePeersList(peer)
36 printPeersList()
37 break
38 case "PeersList_Response":
39 color.Blue("newPeerslist")
40 fmt.Println(msg.PeersList)
41
42 //time.Sleep(1000 * time.Millisecond)
43 updatePeersList(peer.Conn, msg.PeersList)
44 printPeersList()
45 break
46 case "MyID":
47 color.Blue("MyID")
48 fmt.Println(msg.Content)
49 color.Green(peer.Conn.RemoteAddr().String())
50 peer.ID = msg.Content
51 searchPeerAndUpdate(peer)
52
53 //time.Sleep(1000 * time.Millisecond)
54 /*
55 updatePeersList(peer.Conn, msg.PeersList)
56 propagatePeersList(peer)
57 */
58 printPeersList()
59 break
60 default:
61 log.Println("Msg.Type not supported")
62 break
63 }
64
65}
66func (msg Msg) construct(msgtype string, msgcontent string, peersList PeersList) Msg {
67 msg.Type = msgtype
68 msg.Content = msgcontent
69 msg.PeersList = peersList
70 msg.Date = time.Now()
71 return msg
72}
73func (msg Msg) toBytes() []byte {
74 msgS, err := json.Marshal(msg)
75 check(err)
76 l := string(msgS) + "\n"
77 r := []byte(l)
78 return r
79}
80func (msg Msg) createFromBytes(bytes []byte) Msg {
81 err := json.Unmarshal(bytes, &msg)
82 check(err)
83 return msg
84}