|
|
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"` }
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)
//time.Sleep(1000 * time.Millisecond)
updatePeersList(peer.Conn, msg.PeersList) propagatePeersList(peer) printPeersList() break case "PeersList_Response": color.Blue("newPeerslist") fmt.Println(msg.PeersList)
//time.Sleep(1000 * time.Millisecond)
updatePeersList(peer.Conn, msg.PeersList) printPeersList() break case "MyID": color.Blue("MyID") fmt.Println(msg.Content) color.Green(peer.Conn.RemoteAddr().String()) peer.ID = msg.Content searchPeerAndUpdate(peer)
//time.Sleep(1000 * time.Millisecond)
/* updatePeersList(peer.Conn, msg.PeersList) propagatePeersList(peer) */ printPeersList() break default: log.Println("Msg.Type not supported") break }
} func (msg Msg) construct(msgtype string, msgcontent string, peersList PeersList) Msg { msg.Type = msgtype msg.Content = msgcontent msg.PeersList = peersList msg.Date = time.Now() return msg } 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 }
|