You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

84 lines
1.6 KiB

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
}