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