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	"net"
 8	"time"
 9
10	"github.com/fatih/color"
11)
12
13type Msg struct {
14	Type      string    `json:"type"`
15	Date      time.Time `json:"date"`
16	Content   string    `json:"content"`
17	PeersList PeersList `json:"peerslist"`
18}
19
20func messageHandler(conn net.Conn, 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		updatePeersList(conn, msg.PeersList)
36		propagatePeersList()
37		printPeersList()
38	default:
39		log.Println("Msg.Type not supported")
40		break
41	}
42
43}
44func (msg Msg) construct(msgtype string, msgcontent string, peersList PeersList) Msg {
45	msg.Type = msgtype
46	msg.Content = msgcontent
47	msg.PeersList = peersList
48	msg.Date = time.Now()
49	return msg
50}
51func (msg Msg) toBytes() []byte {
52	msgS, err := json.Marshal(msg)
53	check(err)
54	l := string(msgS) + "\n"
55	r := []byte(l)
56	return r
57}
58func (msg Msg) createFromBytes(bytes []byte) Msg {
59	err := json.Unmarshal(bytes, &msg)
60	check(err)
61	return msg
62}