github.com/micro/go-micro/examples@v0.0.0-20210105173217-bf4ab679e18b/stream/server/main.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io"
     7  	"log"
     8  
     9  	proto "github.com/micro/go-micro/examples/stream/server/proto"
    10  	"github.com/micro/go-micro/v2"
    11  )
    12  
    13  type Streamer struct{}
    14  
    15  // Server side stream
    16  func (e *Streamer) ServerStream(ctx context.Context, req *proto.Request, stream proto.Streamer_ServerStreamStream) error {
    17  	fmt.Printf("ServerStream Got msg %v\n", req.Count)
    18  	for i := 0; i < int(req.Count); i++ {
    19  		fmt.Println("sent", i)
    20  		if err := stream.Send(&proto.Response{Count: int64(i)}); err != nil {
    21  			return err
    22  		}
    23  	}
    24  	return nil
    25  }
    26  
    27  // Bidirectional stream
    28  func (e *Streamer) Stream(ctx context.Context, stream proto.Streamer_StreamStream) error {
    29  	fmt.Println("Stream")
    30  	for {
    31  		req, err := stream.Recv()
    32  		if err == io.EOF {
    33  			return nil
    34  		}
    35  		if err != nil {
    36  			return err
    37  		}
    38  		fmt.Printf("Got msg %v\n", req.Count)
    39  		if err := stream.Send(&proto.Response{Count: req.Count}); err != nil {
    40  			return err
    41  		}
    42  	}
    43  }
    44  
    45  func main() {
    46  	// new service
    47  	service := micro.NewService(
    48  		micro.Name("go.micro.srv.stream"),
    49  	)
    50  
    51  	// Init command line
    52  	service.Init()
    53  
    54  	// Register Handler
    55  	proto.RegisterStreamerHandler(service.Server(), new(Streamer))
    56  
    57  	// Run service
    58  	if err := service.Run(); err != nil {
    59  		log.Fatal(err)
    60  	}
    61  }