github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/template/srv/handler/example.go (about) 1 package handler 2 3 import ( 4 "context" 5 6 "github.com/micro/go-micro/v2/util/log" 7 8 example "github.com/micro/go-micro/examples/template/srv/proto/example" 9 ) 10 11 type Example struct{} 12 13 // Call is a single request handler called via client.Call or the generated client code 14 func (e *Example) Call(ctx context.Context, req *example.Request, rsp *example.Response) error { 15 log.Log("Received Example.Call request") 16 rsp.Msg = "Hello " + req.Name 17 return nil 18 } 19 20 // Stream is a server side stream handler called via client.Stream or the generated client code 21 func (e *Example) Stream(ctx context.Context, req *example.StreamingRequest, stream example.Example_StreamStream) error { 22 log.Logf("Received Example.Stream request with count: %d", req.Count) 23 24 for i := 0; i < int(req.Count); i++ { 25 log.Logf("Responding: %d", i) 26 if err := stream.Send(&example.StreamingResponse{ 27 Count: int64(i), 28 }); err != nil { 29 return err 30 } 31 } 32 33 return nil 34 } 35 36 // PingPong is a bidirectional stream handler called via client.Stream or the generated client code 37 func (e *Example) PingPong(ctx context.Context, stream example.Example_PingPongStream) error { 38 for { 39 req, err := stream.Recv() 40 if err != nil { 41 return err 42 } 43 log.Logf("Got ping %v", req.Stroke) 44 if err := stream.Send(&example.Pong{Stroke: req.Stroke}); err != nil { 45 return err 46 } 47 } 48 }