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  }