generated from dalmarcogd/bpl-go
/
grpcserver.go
80 lines (69 loc) · 1.75 KB
/
grpcserver.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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package grpcserver
import (
"context"
"github.com/dalmarcogd/gbpl-go/internal/services"
"github.com/dalmarcogd/gbpl-go/pkg/grpcs"
"github.com/grpc-ecosystem/go-grpc-middleware/tags"
"google.golang.org/grpc"
"google.golang.org/grpc/health"
"google.golang.org/grpc/health/grpc_health_v1"
"google.golang.org/grpc/reflection"
"net"
)
type (
ServiceImpl struct {
serviceManager services.ServiceManager
ctx context.Context
grpcServer *grpc.Server
address string
}
)
func New() *ServiceImpl {
return &ServiceImpl{}
}
func (s *ServiceImpl) WithAddress(address string) *ServiceImpl {
s.address = address
return s
}
func (s *ServiceImpl) Address() string {
return s.address
}
func (s *ServiceImpl) Init(ctx context.Context) error {
s.ctx = ctx
s.grpcServer = grpc.NewServer(
grpc.ChainUnaryInterceptor(
grpc_ctxtags.UnaryServerInterceptor(),
LogUnaryServerInterceptor(s.ServiceManager())))
s.RegisterServices()
return nil
}
func (s *ServiceImpl) Close() error {
s.grpcServer.GracefulStop()
return nil
}
func (s *ServiceImpl) WithServiceManager(c services.ServiceManager) services.GrpcServer {
s.serviceManager = c
return s
}
func (s *ServiceImpl) ServiceManager() services.ServiceManager {
return s.serviceManager
}
func (s *ServiceImpl) RegisterServices() *ServiceImpl {
grpcs.RegisterUsersService(s.grpcServer, &grpcs.UsersService{
Create: s.CreateUser,
Update: s.UpdateUser,
GetById: s.GetUserById,
Get: s.GetUsers,
Delete: s.DeleteUser,
})
grpc_health_v1.RegisterHealthServer(s.grpcServer, health.NewServer())
return s
}
func (s *ServiceImpl) Run() error {
reflection.Register(s.grpcServer)
listen, err := net.Listen("tcp", s.address)
if err != nil {
return err
}
return s.grpcServer.Serve(listen)
}