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.

78 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. Block Block `json:"block"`
  15. }
  16. func messageHandler(peer Peer, msg Msg) {
  17. log.Println("[New msg]")
  18. log.Println(msg)
  19. switch msg.Type {
  20. case "Hi":
  21. color.Yellow(msg.Type)
  22. color.Green(msg.Content)
  23. break
  24. case "PeersList":
  25. color.Blue("newPeerslist")
  26. fmt.Println(msg.PeersList)
  27. color.Red("PeersList")
  28. updateNetworkPeersList(peer.Conn, msg.PeersList)
  29. propagatePeersList(peer)
  30. printPeersList()
  31. break
  32. case "PeersList_Response":
  33. //for the moment is not beeing used
  34. color.Blue("newPeerslist, from PeersList_Response")
  35. fmt.Println(msg.PeersList)
  36. color.Red("PeersList_Response")
  37. updateNetworkPeersList(peer.Conn, msg.PeersList)
  38. propagatePeersList(peer)
  39. printPeersList()
  40. break
  41. case "Block":
  42. //TODO check if the block is signed by an autorized emitter
  43. if !blockchain.blockExists(msg.Block) {
  44. blockchain.addBlock(msg.Block)
  45. propagateBlock(msg.Block)
  46. }
  47. break
  48. default:
  49. log.Println("Msg.Type not supported")
  50. break
  51. }
  52. }
  53. func (msg *Msg) construct(msgtype string, msgcontent string) {
  54. msg.Type = msgtype
  55. msg.Content = msgcontent
  56. msg.Date = time.Now()
  57. }
  58. func (msg Msg) toBytes() []byte {
  59. msgS, err := json.Marshal(msg)
  60. check(err)
  61. l := string(msgS) + "\n"
  62. r := []byte(l)
  63. return r
  64. }
  65. func (msg Msg) createFromBytes(bytes []byte) Msg {
  66. err := json.Unmarshal(bytes, &msg)
  67. check(err)
  68. return msg
  69. }