package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/fatih/color"
|
|
)
|
|
|
|
type Msg struct {
|
|
Type string `json:"type"`
|
|
Date time.Time `json:"date"`
|
|
Content string `json:"content"`
|
|
PeersList PeersList `json:"peerslist"`
|
|
Block Block `json:"block"`
|
|
}
|
|
|
|
func messageHandler(peer Peer, msg Msg) {
|
|
|
|
log.Println("[New msg]")
|
|
log.Println(msg)
|
|
|
|
switch msg.Type {
|
|
case "Hi":
|
|
color.Yellow(msg.Type)
|
|
color.Green(msg.Content)
|
|
break
|
|
case "PeersList":
|
|
color.Blue("newPeerslist")
|
|
fmt.Println(msg.PeersList)
|
|
color.Red("PeersList")
|
|
|
|
updateNetworkPeersList(peer.Conn, msg.PeersList)
|
|
propagatePeersList(peer)
|
|
printPeersList()
|
|
break
|
|
case "PeersList_Response":
|
|
//for the moment is not beeing used
|
|
color.Blue("newPeerslist, from PeersList_Response")
|
|
fmt.Println(msg.PeersList)
|
|
color.Red("PeersList_Response")
|
|
|
|
updateNetworkPeersList(peer.Conn, msg.PeersList)
|
|
propagatePeersList(peer)
|
|
printPeersList()
|
|
break
|
|
case "Block":
|
|
//TODO check if the block is signed by an autorized emitter
|
|
if !blockchain.blockExists(msg.Block) {
|
|
blockchain.addBlock(msg.Block)
|
|
propagateBlock(msg.Block)
|
|
}
|
|
break
|
|
default:
|
|
log.Println("Msg.Type not supported")
|
|
break
|
|
}
|
|
|
|
}
|
|
func (msg *Msg) construct(msgtype string, msgcontent string) {
|
|
msg.Type = msgtype
|
|
msg.Content = msgcontent
|
|
msg.Date = time.Now()
|
|
}
|
|
func (msg Msg) toBytes() []byte {
|
|
msgS, err := json.Marshal(msg)
|
|
check(err)
|
|
l := string(msgS) + "\n"
|
|
r := []byte(l)
|
|
return r
|
|
}
|
|
func (msg Msg) createFromBytes(bytes []byte) Msg {
|
|
err := json.Unmarshal(bytes, &msg)
|
|
check(err)
|
|
return msg
|
|
}
|