arnaucube
arnaucube/blockchainIDsystemPublic Self-hosted repository
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		updateNetworkPeersList(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		updateNetworkPeersList(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}