test.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package main
  2. import (
  3. "context"
  4. "fmt"
  5. "log"
  6. "net"
  7. "test/grpc-odbserver/grpc/api"
  8. "time"
  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("test", grpc.WithInsecure(), grpc.WithContextDialer(func(ctx context.Context, s string) (net.Conn, error) {
  49. return net.Dial("tcp", "127.0.0.1:11111")
  50. }))
  51. if err != nil {
  52. log.Printf("did not connect: %v", err)
  53. }
  54. defer cc.Close()
  55. tc := api.NewMeshClient(cc)
  56. ctx, cancel := context.WithCancel(context.Background())
  57. defer cancel()
  58. tsc, _ := tc.Broadcast(ctx)
  59. n := 0
  60. for {
  61. n++
  62. tsc.Send(&api.MeshData{
  63. Message: &api.MeshData_NodeInfo{NodeInfo: &api.NodeInfo{
  64. NodeID: time.Now().UnixNano(),
  65. NodeName: fmt.Sprint("xxx", n),
  66. }},
  67. })
  68. log.Print("send", n)
  69. time.Sleep(5 * time.Second)
  70. }
  71. }
  72. func main() {
  73. go server()
  74. <-listen_ready
  75. client()
  76. }