blob: bc3b05fb1ff1349fc6cf307c092a4b526286d7c6 [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
41 // settings := model.NewConfig().SqlSettings
42 // a.store = sqlstore.New(settings)
43
iomodob892d072021-02-22 00:23:16 +040044 lis, err := net.Listen("tcp", fmt.Sprintf(":%d", a.config.GRPCSettings.Port))
iomododb170e12021-02-21 23:06:20 +040045 if err != nil {
46 a.Log.Error("failed to listen: %v", log.Err(err))
47 return err
48 }
49
50 a.srv = grpc.NewServer()
51
iomodob892d072021-02-22 00:23:16 +040052 a.Log.Info("GRPC Server is listening on", log.Int("port", a.config.GRPCSettings.Port))
iomododb170e12021-02-21 23:06:20 +040053 if err := a.srv.Serve(lis); err != nil {
iomodob892d072021-02-22 00:23:16 +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}