diff --git a/cmd/main.go b/cmd/main.go index 25a2a08..ff55d16 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -1,9 +1,13 @@ package main import ( + "context" "fmt" "log" "net" + "os" + "os/signal" + "syscall" "test3k/authDB/internal/config" server "test3k/authDB/internal/transport/grpc" api "test3k/authDB/pkg/api" @@ -12,11 +16,40 @@ import ( ) func main() { - s := grpc.NewServer() - srv := server.NewServer() config := config.NewConfig() + ctx, _ := context.WithCancel(context.Background()) + srv := server.NewServer() + s := grpc.NewServer() // + signalChannel := make(chan os.Signal, 1) + signal.Notify(signalChannel, syscall.SIGINT) + signal.Notify(signalChannel, syscall.SIGTERM) + defer stop(signalChannel) + + // Запуск сервера + go start(config, s, srv) + + // + for { + select { + case <-signalChannel: + return + case <-ctx.Done(): + return + } + } +} + +// Остановка сервера +func stop(signalChannel chan os.Signal) { + log.Println("authDBServer stopping ...") + + signal.Stop(signalChannel) +} + +// Запуск сервера +func start(config *config.Config, s *grpc.Server, srv *server.AuthDBServer) { api.RegisterAuthDBServer(s, srv) // @@ -27,7 +60,9 @@ func main() { } // - fmt.Printf("authDBServer up (%s)\n", connStr) + log.Printf("authDBServer starting (%s)\n", connStr) + + // eru := s.Serve(lis) if eru != nil { log.Fatal(eru) diff --git a/internal/transport/grpc/grpc.go b/internal/transport/grpc/grpc.go index 88846e6..94f0693 100644 --- a/internal/transport/grpc/grpc.go +++ b/internal/transport/grpc/grpc.go @@ -3,6 +3,7 @@ package grpc import ( "context" "errors" + "log" "strconv" "sync" api "test3k/authDB/pkg/api" @@ -19,22 +20,22 @@ type user struct { Confirmed bool } -type authDBServer struct { +type AuthDBServer struct { mu sync.Mutex users map[string]user api.UnimplementedAuthDBServer id int32 } -func NewServer() *authDBServer { - return &authDBServer{ +func NewServer() *AuthDBServer { + return &AuthDBServer{ mu: sync.Mutex{}, users: make(map[string]user), id: 0, } } -func (s *authDBServer) Login(ctx context.Context, req *api.LoginRequest) (*api.LoginResponse, error) { +func (s *AuthDBServer) Login(ctx context.Context, req *api.LoginRequest) (*api.LoginResponse, error) { s.mu.Lock() defer s.mu.Unlock() @@ -65,12 +66,14 @@ func (s *authDBServer) Login(ctx context.Context, req *api.LoginRequest) (*api.L }, nil } -func (s *authDBServer) Registration(ctx context.Context, req *api.RegistrationRequest) (*api.RegistrationResponse, error) { +func (s *AuthDBServer) Registration(ctx context.Context, req *api.RegistrationRequest) (*api.RegistrationResponse, error) { s.mu.Lock() defer s.mu.Unlock() // if val, ok := s.users[req.GetLogin()]; ok { + log.Printf("login %s already registered", val.Login) + return &api.RegistrationResponse{ Code: val.Code, Email: val.Email, @@ -86,9 +89,9 @@ func (s *authDBServer) Registration(ctx context.Context, req *api.RegistrationRe s.users[req.Login] = user{ ID: s.id, Code: code, - Login: req.Login, + Login: req.GetLogin(), Password: strconv.Itoa(unique), - Email: req.Email, + Email: req.GetEmail(), Confirmed: false, } @@ -117,11 +120,11 @@ func (s *authDBServer) Registration(ctx context.Context, req *api.RegistrationRe return &api.RegistrationResponse{ Code: code, - Email: req.Email, + Email: req.GetEmail(), }, nil } -func (s *authDBServer) Confirmation(ctx context.Context, req *api.ConfirmationRequest) (*api.ConfirmationResponse, error) { +func (s *AuthDBServer) Confirmation(ctx context.Context, req *api.ConfirmationRequest) (*api.ConfirmationResponse, error) { s.mu.Lock() defer s.mu.Unlock()