blob: 966029e94873c0bf295e6b089cc655cd98648830 [file] [log] [blame]
iomododb170e12021-02-21 23:06:20 +04001package server
2
3import (
iomodob892d072021-02-22 00:23:16 +04004 "fmt"
iomododb170e12021-02-21 23:06:20 +04005 "net"
6 "os"
7
8 "github.com/giolekva/pcloud/core/kg/log"
iomodob892d072021-02-22 00:23:16 +04009 "github.com/giolekva/pcloud/core/kg/model"
iomodo3e1576e2021-02-23 01:27:56 +040010 "github.com/giolekva/pcloud/core/kg/model/proto"
11 "github.com/giolekva/pcloud/core/kg/rpc"
iomododb170e12021-02-21 23:06:20 +040012 "google.golang.org/grpc"
13)
14
iomododb170e12021-02-21 23:06:20 +040015// GRPCServerImpl grpc server implementation
16type GRPCServerImpl struct {
iomodocf795602021-03-07 23:14:15 +040017 Log loggerIface
iomodob892d072021-02-22 00:23:16 +040018 srv *grpc.Server
19 config *model.Config
iomodocf795602021-03-07 23:14:15 +040020 app appIface
iomododb170e12021-02-21 23:06:20 +040021}
22
23var _ Server = &GRPCServerImpl{}
24
25// NewGRPCServer creates new GRPC Server
iomodocf795602021-03-07 23:14:15 +040026func NewGRPCServer(logger loggerIface, config *model.Config, app appIface) Server {
iomododb170e12021-02-21 23:06:20 +040027 a := &GRPCServerImpl{
iomodob892d072021-02-22 00:23:16 +040028 Log: logger,
29 config: config,
iomodo3e1576e2021-02-23 01:27:56 +040030 app: app,
iomododb170e12021-02-21 23:06:20 +040031 }
32
33 pwd, _ := os.Getwd()
34 a.Log.Info("GRPC server current working", log.String("directory", pwd))
35 return a
36}
37
iomodob892d072021-02-22 00:23:16 +040038// Start method starts a grpc server
iomododb170e12021-02-21 23:06:20 +040039func (a *GRPCServerImpl) Start() error {
40 a.Log.Info("Starting GRPC Server...")
41
iomodoc0479a62021-02-22 20:08:36 +040042 lis, err := net.Listen("tcp", fmt.Sprintf(":%d", a.config.GRPC.Port))
iomododb170e12021-02-21 23:06:20 +040043 if err != nil {
iomodoc0479a62021-02-22 20:08:36 +040044 a.Log.Error("Failed to listen: %v", log.Err(err))
iomododb170e12021-02-21 23:06:20 +040045 return err
46 }
47
48 a.srv = grpc.NewServer()
iomodo3e1576e2021-02-23 01:27:56 +040049 userService := rpc.NewService(a.app)
50 proto.RegisterUserServiceServer(a.srv, userService)
iomododb170e12021-02-21 23:06:20 +040051
iomodoc0479a62021-02-22 20:08:36 +040052 a.Log.Info("GRPC Server is listening on", log.Int("port", a.config.GRPC.Port))
iomododb170e12021-02-21 23:06:20 +040053 if err := a.srv.Serve(lis); err != nil {
iomodoc0479a62021-02-22 20:08:36 +040054 a.Log.Error("Failed to serve rpc: %v", log.Err(err))
iomododb170e12021-02-21 23:06:20 +040055 return err
56 }
57 return nil
58}
59
iomodob892d072021-02-22 00:23:16 +040060// Shutdown method shuts grpc server down
iomododb170e12021-02-21 23:06:20 +040061func (a *GRPCServerImpl) Shutdown() error {
62 a.Log.Info("Stopping GRPC Server...")
63 a.srv.GracefulStop()
iomodob892d072021-02-22 00:23:16 +040064 a.Log.Info("GRPC Server stopped")
iomododb170e12021-02-21 23:06:20 +040065 return nil
66}