...

Source file src/github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server/main.go

Documentation: github.com/grpc-ecosystem/grpc-gateway/v2/examples/internal/server

     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  }
    80  

View as plain text