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

  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "log"
  6. "time"
  7. "github.com/fatih/color"
  8. )
  9. type Msg struct {
  10. Type string `json:"type"`
  11. Date time.Time `json:"date"`
  12. Content string `json:"content"`
  13. PeersList PeersList `json:"peerslist"`
  14. }
  15. func messageHandler(peer Peer, msg Msg) {
  16. log.Println("[New msg]")
  17. log.Println(msg)
  18. switch msg.Type {
  19. case "Hi":
  20. color.Yellow(msg.Type)
  21. color.Green(msg.Content)
  22. break
  23. case "PeersList":
  24. color.Blue("newPeerslist")
  25. fmt.Println(msg.PeersList)
  26. //time.Sleep(1000 * time.Millisecond)
  27. updateNetworkPeersList(peer.Conn, msg.PeersList)
  28. propagatePeersList(peer)
  29. printPeersList()
  30. break
  31. case "PeersList_Response":
  32. color.Blue("newPeerslist")
  33. fmt.Println(msg.PeersList)
  34. //time.Sleep(1000 * time.Millisecond)
  35. updateNetworkPeersList(peer.Conn, msg.PeersList)
  36. printPeersList()
  37. break
  38. case "MyID":
  39. color.Blue("MyID")
  40. fmt.Println(msg.Content)
  41. color.Green(peer.Conn.RemoteAddr().String())
  42. peer.ID = msg.Content
  43. searchPeerAndUpdate(peer)
  44. //time.Sleep(1000 * time.Millisecond)
  45. /*
  46. updatePeersList(peer.Conn, msg.PeersList)
  47. propagatePeersList(peer)
  48. */
  49. printPeersList()
  50. break
  51. default:
  52. log.Println("Msg.Type not supported")
  53. break
  54. }
  55. }
  56. func (msg Msg) construct(msgtype string, msgcontent string, peersList PeersList) Msg {
  57. msg.Type = msgtype
  58. msg.Content = msgcontent
  59. msg.PeersList = peersList
  60. msg.Date = time.Now()
  61. return msg
  62. }
  63. func (msg Msg) toBytes() []byte {
  64. msgS, err := json.Marshal(msg)
  65. check(err)
  66. l := string(msgS) + "\n"
  67. r := []byte(l)
  68. return r
  69. }
  70. func (msg Msg) createFromBytes(bytes []byte) Msg {
  71. err := json.Unmarshal(bytes, &msg)
  72. check(err)
  73. return msg
  74. }