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  }