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	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		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}