blob: 565ce77773e22c6264a7179b9ef8c95fbbb5aab0 [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"
iomododb170e12021-02-21 23:06:20 +040010 "github.com/giolekva/pcloud/core/kg/store"
11 "google.golang.org/grpc"
12)
13
iomododb170e12021-02-21 23:06:20 +040014// GRPCServerImpl grpc server implementation
15type GRPCServerImpl struct {
iomodob892d072021-02-22 00:23:16 +040016 Log *log.Logger
17 srv *grpc.Server
18 config *model.Config
19 store store.Store
iomododb170e12021-02-21 23:06:20 +040020}
21
22var _ Server = &GRPCServerImpl{}
23
24// NewGRPCServer creates new GRPC Server
iomodob892d072021-02-22 00:23:16 +040025func NewGRPCServer(logger *log.Logger, config *model.Config, store store.Store) Server {
iomododb170e12021-02-21 23:06:20 +040026 a := &GRPCServerImpl{
iomodob892d072021-02-22 00:23:16 +040027 Log: logger,
28 config: config,
29 store: store,
iomododb170e12021-02-21 23:06:20 +040030 }
31
32 pwd, _ := os.Getwd()
33 a.Log.Info("GRPC server current working", log.String("directory", pwd))
34 return a
35}
36
iomodob892d072021-02-22 00:23:16 +040037// Start method starts a grpc server
iomododb170e12021-02-21 23:06:20 +040038func (a *GRPCServerImpl) Start() error {
39 a.Log.Info("Starting GRPC Server...")
40
iomodoc0479a62021-02-22 20:08:36 +040041 lis, err := net.Listen("tcp", fmt.Sprintf(":%d", a.config.GRPC.Port))
iomododb170e12021-02-21 23:06:20 +040042 if err != nil {
iomodoc0479a62021-02-22 20:08:36 +040043 a.Log.Error("Failed to listen: %v", log.Err(err))
iomododb170e12021-02-21 23:06:20 +040044 return err
45 }
46
47 a.srv = grpc.NewServer()
48
iomodoc0479a62021-02-22 20:08:36 +040049 a.Log.Info("GRPC Server is listening on", log.Int("port", a.config.GRPC.Port))
iomododb170e12021-02-21 23:06:20 +040050 if err := a.srv.Serve(lis); err != nil {
iomodoc0479a62021-02-22 20:08:36 +040051 a.Log.Error("Failed to serve rpc: %v", log.Err(err))
iomododb170e12021-02-21 23:06:20 +040052 return err
53 }
54 return nil
55}
56
iomodob892d072021-02-22 00:23:16 +040057// Shutdown method shuts grpc server down
iomododb170e12021-02-21 23:06:20 +040058func (a *GRPCServerImpl) Shutdown() error {
59 a.Log.Info("Stopping GRPC Server...")
60 a.srv.GracefulStop()
iomodob892d072021-02-22 00:23:16 +040061 a.Log.Info("GRPC Server stopped")
iomododb170e12021-02-21 23:06:20 +040062 return nil
63}