| package main |
| |
| import ( |
| "context" |
| "errors" |
| "fmt" |
| "io" |
| "strings" |
| ) |
| |
| import ( |
| "github.com/dubbogo/gost/log/logger" |
| ) |
| |
| import ( |
| _ "dubbo.apache.org/dubbo-go/v3/imports" |
| greet "dubbo.apache.org/dubbo-go/v3/protocol/triple/internal/proto" |
| "dubbo.apache.org/dubbo-go/v3/protocol/triple/internal/proto/greettriple" |
| "dubbo.apache.org/dubbo-go/v3/provider" |
| ) |
| |
| type GreetConnectServer struct { |
| } |
| |
| func (srv *GreetConnectServer) Greet(ctx context.Context, req *greet.GreetRequest) (*greet.GreetResponse, error) { |
| resp := &greet.GreetResponse{Greeting: "hello " + req.Name} |
| return resp, nil |
| } |
| |
| func (srv *GreetConnectServer) GreetStream(ctx context.Context, stream greettriple.GreetService_GreetStreamServer) error { |
| for { |
| req, err := stream.Recv() |
| if err != nil { |
| return fmt.Errorf("connect recv error: %s", err) |
| } |
| if err := stream.Send(&greet.GreetStreamResponse{Greeting: "hello " + req.Name}); err != nil { |
| return fmt.Errorf("connect send error: %s", err) |
| } |
| } |
| } |
| |
| func (srv *GreetConnectServer) GreetClientStream(ctx context.Context, stream greettriple.GreetService_GreetClientStreamServer) (*greet.GreetClientStreamResponse, error) { |
| var reqs []string |
| for stream.Recv() { |
| reqs = append(reqs, stream.Msg().Name) |
| } |
| if stream.Err() != nil && !errors.Is(stream.Err(), io.EOF) { |
| logger.Errorf("ClientStream unexpected err: %s", stream.Err()) |
| } |
| resp := &greet.GreetClientStreamResponse{ |
| Greeting: "Hello" + strings.Join(reqs, ","), |
| } |
| |
| return resp, nil |
| } |
| |
| func (srv *GreetConnectServer) GreetServerStream(ctx context.Context, req *greet.GreetServerStreamRequest, stream greettriple.GreetService_GreetServerStreamServer) error { |
| for i := 0; i < 5; i++ { |
| if err := stream.Send(&greet.GreetServerStreamResponse{Greeting: "Hello" + req.Name}); err != nil { |
| logger.Errorf("ServerStream unexpected err: %s", err) |
| } |
| } |
| return nil |
| } |
| |
| func main() { |
| pro, err := provider.NewProvider() |
| if err != nil { |
| panic(err) |
| } |
| if err := greettriple.ProvideGreetServiceHandler(pro, &GreetConnectServer{}); err != nil { |
| panic(err) |
| } |
| select {} |
| } |