github.com/grpc-ecosystem/grpc-gateway/v2@v2.19.1/examples/internal/server/main.go (about) 1 package server 2 3 import ( 4 "context" 5 "net" 6 "net/http" 7 8 examples "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/examplepb" 9 standalone "github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/proto/standalone" 10 "github.com/grpc-ecosystem/grpc-gateway/v2/runtime" 11 "google.golang.org/grpc" 12 "google.golang.org/grpc/grpclog" 13 ) 14 15 // Run starts the example gRPC service. 16 // "network" and "address" are passed to net.Listen. 17 func Run(ctx context.Context, network, address string) error { 18 l, err := net.Listen(network, address) 19 if err != nil { 20 return err 21 } 22 defer func() { 23 if err := l.Close(); err != nil { 24 grpclog.Errorf("Failed to close %s %s: %v", network, address, err) 25 } 26 }() 27 28 s := grpc.NewServer() 29 examples.RegisterEchoServiceServer(s, newEchoServer()) 30 examples.RegisterFlowCombinationServer(s, newFlowCombinationServer()) 31 examples.RegisterNonStandardServiceServer(s, newNonStandardServer()) 32 examples.RegisterUnannotatedEchoServiceServer(s, newUnannotatedEchoServer()) 33 34 abe := newABitOfEverythingServer() 35 examples.RegisterABitOfEverythingServiceServer(s, abe) 36 examples.RegisterStreamServiceServer(s, abe) 37 examples.RegisterResponseBodyServiceServer(s, newResponseBodyServer()) 38 39 go func() { 40 defer s.GracefulStop() 41 <-ctx.Done() 42 }() 43 return s.Serve(l) 44 } 45 46 // RunInProcessGateway starts the invoke in process http gateway. 47 func RunInProcessGateway(ctx context.Context, addr string, opts ...runtime.ServeMuxOption) error { 48 mux := runtime.NewServeMux(opts...) 49 50 examples.RegisterEchoServiceHandlerServer(ctx, mux, newEchoServer()) 51 examples.RegisterFlowCombinationHandlerServer(ctx, mux, newFlowCombinationServer()) 52 examples.RegisterNonStandardServiceHandlerServer(ctx, mux, newNonStandardServer()) 53 standalone.RegisterUnannotatedEchoServiceHandlerServer(ctx, mux, newUnannotatedEchoServer()) 54 55 abe := newABitOfEverythingServer() 56 examples.RegisterABitOfEverythingServiceHandlerServer(ctx, mux, abe) 57 examples.RegisterStreamServiceHandlerServer(ctx, mux, abe) 58 examples.RegisterResponseBodyServiceHandlerServer(ctx, mux, newResponseBodyServer()) 59 60 s := &http.Server{ 61 Addr: addr, 62 Handler: mux, 63 } 64 65 go func() { 66 <-ctx.Done() 67 grpclog.Infof("Shutting down the http gateway server") 68 if err := s.Shutdown(context.Background()); err != nil { 69 grpclog.Errorf("Failed to shutdown http gateway server: %v", err) 70 } 71 }() 72 73 if err := s.ListenAndServe(); err != http.ErrServerClosed { 74 grpclog.Errorf("Failed to listen and serve: %v", err) 75 return err 76 } 77 return nil 78 79 }