github.com/gofunct/common@v0.0.0-20190131174352-fd058c7fbf22/pkg/transport/engine/grpc.go (about) 1 package engine 2 3 import ( 4 "github.com/gofunct/common/pkg/transport/config" 5 "net" 6 7 "github.com/gofunct/common/pkg/transport/api" 8 "github.com/pkg/errors" 9 "google.golang.org/grpc" 10 "google.golang.org/grpc/grpclog" 11 "google.golang.org/grpc/reflection" 12 ) 13 14 // GrpcServer wraps grpc.Server setup process. 15 type GrpcServer struct { 16 server *grpc.Server 17 *config.Config 18 } 19 20 // NewGrpcServer creates GrpcServer instance. 21 func NewGrpcServer(c *config.Config) api.Interface { 22 s := grpc.NewServer(c.ServerOptions()...) 23 reflection.Register(s) 24 for _, svr := range c.Servers { 25 svr.RegisterWithServer(s) 26 } 27 return &GrpcServer{ 28 server: s, 29 Config: c, 30 } 31 } 32 33 // Serve implements Server.Shutdown 34 func (s *GrpcServer) Serve(l net.Listener) error { 35 grpclog.Infof("gRPC server is starting %s", l.Addr()) 36 37 err := s.server.Serve(l) 38 39 grpclog.Infof("gRPC server stopped: %v", err) 40 41 return errors.Wrap(err, "failed to serve gRPC server") 42 } 43 44 // Shutdown implements Server.Shutdown 45 func (s *GrpcServer) Shutdown() { 46 s.server.GracefulStop() 47 }