topo.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package mnode
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "time"
  7. "trial/grpc-odbserver/grpc/api"
  8. "google.golang.org/grpc"
  9. "gopkg.in/yaml.v3"
  10. )
  11. type MeshServer struct {
  12. api.UnimplementedMeshServer
  13. }
  14. func (ts *MeshServer) Broadcast(tss api.Mesh_BroadcastServer) error {
  15. for {
  16. ti, e := tss.Recv()
  17. if e != nil {
  18. return e
  19. }
  20. bs, _ := yaml.Marshal(ti.GetNodeInfo())
  21. fmt.Println(string(bs))
  22. }
  23. }
  24. func (ts *MeshServer) Unicast(tss api.Mesh_UnicastServer) error {
  25. for {
  26. ti, e := tss.Recv()
  27. if e != nil {
  28. return e
  29. }
  30. bs, _ := yaml.Marshal(ti.GetNodeInfo())
  31. fmt.Println(string(bs))
  32. }
  33. }
  34. var listen_ready = make(chan struct{})
  35. func server() {
  36. svr := grpc.NewServer()
  37. api.RegisterMeshServer(svr, &MeshServer{})
  38. lis, _ := Listen(":11111")
  39. listen_ready <- struct{}{}
  40. log.Printf("listen: %v", lis.Addr())
  41. err := svr.Serve(lis)
  42. if err != nil {
  43. log.Printf("did not connect: %v", err)
  44. }
  45. }
  46. func client() {
  47. cc, err := grpc.Dial("127.0.0.1:11111", grpc.WithInsecure())
  48. if err != nil {
  49. log.Printf("did not connect: %v", err)
  50. }
  51. defer cc.Close()
  52. tc := api.NewMeshClient(cc)
  53. ctx, cancel := context.WithCancel(context.Background())
  54. defer cancel()
  55. tsc, _ := tc.Broadcast(ctx)
  56. n := 0
  57. for {
  58. n++
  59. tsc.Send(&api.MeshData{
  60. Message: &api.MeshData_NodeInfo{NodeInfo: &api.NodeInfo{
  61. NodeID: time.Now().UnixNano(),
  62. NodeName: fmt.Sprint("xxx", n),
  63. }},
  64. })
  65. log.Print("send", n)
  66. time.Sleep(5 * time.Second)
  67. }
  68. }
  69. func main() {
  70. go server()
  71. <-listen_ready
  72. client()
  73. }