blob: af0b945a615be444818cee50f6cece0a457da352 [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
iomodo5e0dc112021-03-25 20:49:55 +04008 "github.com/giolekva/pcloud/core/kg/api/rpc"
iomodo3b0b9512021-03-15 00:13:06 +04009 "github.com/giolekva/pcloud/core/kg/common"
iomododb170e12021-02-21 23:06:20 +040010 "github.com/giolekva/pcloud/core/kg/log"
iomodob892d072021-02-22 00:23:16 +040011 "github.com/giolekva/pcloud/core/kg/model"
iomodo3e1576e2021-02-23 01:27:56 +040012 "github.com/giolekva/pcloud/core/kg/model/proto"
iomododb170e12021-02-21 23:06:20 +040013 "google.golang.org/grpc"
14)
15
iomododb170e12021-02-21 23:06:20 +040016// GRPCServerImpl grpc server implementation
17type GRPCServerImpl struct {
iomodo3b0b9512021-03-15 00:13:06 +040018 Log common.LoggerIface
iomodob892d072021-02-22 00:23:16 +040019 srv *grpc.Server
20 config *model.Config
iomodo3b0b9512021-03-15 00:13:06 +040021 app common.AppIface
iomododb170e12021-02-21 23:06:20 +040022}
23
24var _ Server = &GRPCServerImpl{}
25
26// NewGRPCServer creates new GRPC Server
iomodo3b0b9512021-03-15 00:13:06 +040027func NewGRPCServer(logger common.LoggerIface, config *model.Config, app common.AppIface) Server {
iomododb170e12021-02-21 23:06:20 +040028 a := &GRPCServerImpl{
iomodob892d072021-02-22 00:23:16 +040029 Log: logger,
30 config: config,
iomodo3e1576e2021-02-23 01:27:56 +040031 app: app,
iomododb170e12021-02-21 23:06:20 +040032 }
33
34 pwd, _ := os.Getwd()
35 a.Log.Info("GRPC server current working", log.String("directory", pwd))
36 return a
37}
38
iomodob892d072021-02-22 00:23:16 +040039// Start method starts a grpc server
iomododb170e12021-02-21 23:06:20 +040040func (a *GRPCServerImpl) Start() error {
41 a.Log.Info("Starting GRPC Server...")
42
iomodoc0479a62021-02-22 20:08:36 +040043 lis, err := net.Listen("tcp", fmt.Sprintf(":%d", a.config.GRPC.Port))
iomododb170e12021-02-21 23:06:20 +040044 if err != nil {
iomodoc0479a62021-02-22 20:08:36 +040045 a.Log.Error("Failed to listen: %v", log.Err(err))
iomododb170e12021-02-21 23:06:20 +040046 return err
47 }
48
49 a.srv = grpc.NewServer()
iomodo3e1576e2021-02-23 01:27:56 +040050 userService := rpc.NewService(a.app)
51 proto.RegisterUserServiceServer(a.srv, userService)
iomododb170e12021-02-21 23:06:20 +040052
iomodoc0479a62021-02-22 20:08:36 +040053 a.Log.Info("GRPC Server is listening on", log.Int("port", a.config.GRPC.Port))
iomododb170e12021-02-21 23:06:20 +040054 if err := a.srv.Serve(lis); err != nil {
iomodoc0479a62021-02-22 20:08:36 +040055 a.Log.Error("Failed to serve rpc: %v", log.Err(err))
iomododb170e12021-02-21 23:06:20 +040056 return err
57 }
58 return nil
59}
60
iomodob892d072021-02-22 00:23:16 +040061// Shutdown method shuts grpc server down
iomododb170e12021-02-21 23:06:20 +040062func (a *GRPCServerImpl) Shutdown() error {
63 a.Log.Info("Stopping GRPC Server...")
64 a.srv.GracefulStop()
iomodob892d072021-02-22 00:23:16 +040065 a.Log.Info("GRPC Server stopped")
iomododb170e12021-02-21 23:06:20 +040066 return nil
67}