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