topo.go 1.5 KB

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