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 }