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