github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/server/handler/example.go (about) 1 package handler 2 3 import ( 4 "log" 5 6 example "github.com/micro/go-micro/examples/server/proto/example" 7 "github.com/micro/go-micro/v2/metadata" 8 "github.com/micro/go-micro/v2/server" 9 10 "context" 11 ) 12 13 type Example struct{} 14 15 func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error { 16 md, _ := metadata.FromContext(ctx) 17 log.Printf("Received Example.Call request with metadata: %v", md) 18 rsp.Msg = server.DefaultOptions().Id + ": Hello " + req.Name 19 return nil 20 } 21 22 func (e *Example) Stream(ctx context.Context, stream server.Stream) error { 23 log.Print("Executing streaming handler") 24 req := &example.StreamingRequest{} 25 26 // We just want to receive 1 request and then process here 27 if err := stream.Recv(req); err != nil { 28 log.Printf("Error receiving streaming request: %v", err) 29 return err 30 } 31 32 log.Printf("Received Example.Stream request with count: %d", req.Count) 33 34 for i := 0; i < int(req.Count); i++ { 35 log.Printf("Responding: %d", i) 36 37 if err := stream.Send(&example.StreamingResponse{ 38 Count: int64(i), 39 }); err != nil { 40 return err 41 } 42 } 43 44 return nil 45 } 46 47 func (e *Example) PingPong(ctx context.Context, stream server.Stream) error { 48 for { 49 req := &example.Ping{} 50 if err := stream.Recv(req); err != nil { 51 return err 52 } 53 log.Printf("Got ping %v", req.Stroke) 54 if err := stream.Send(&example.Pong{Stroke: req.Stroke}); err != nil { 55 return err 56 } 57 } 58 }