...
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
16
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
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