changeAPIv1/internal/app/grpc/app.go
netscrawler 5b11756af6 v0.1
2024-07-04 00:44:15 +03:00

64 lines
1.1 KiB
Go

package grpcapp
import (
convertgrpc "converter/internal/grpc/cnvrt"
"converter/internal/services/converter"
"fmt"
"google.golang.org/grpc"
"log/slog"
"net"
)
type App struct {
log *slog.Logger
gRPCServer *grpc.Server
port int
}
func New(
log *slog.Logger,
port int) *App {
gRPCServer := grpc.NewServer()
convert := converter.New(log)
convertgrpc.Register(gRPCServer, convert)
return &App{
log: log,
gRPCServer: gRPCServer,
port: port,
}
}
func (a *App) MustRun() {
if err := a.Run(); err != nil {
panic(err)
}
}
func (a *App) Run() error {
const op = "grpcapp.Run"
log := a.log.With(
slog.String("op", op),
slog.Int("port", a.port))
l, err := net.Listen("tcp", fmt.Sprintf(":%d", a.port))
if err != nil {
return fmt.Errorf("%s: %w", op, err)
}
log.Info("gRPC server is running", slog.String("addr", l.Addr().String()))
if err := a.gRPCServer.Serve(l); err != nil {
return fmt.Errorf("%s: %w", op, err)
}
return nil
}
func (a *App) Stop() {
const op = "grpcapp.Stop"
a.log.With(slog.String("op", op)).
Info("stopping gRPC server", slog.Int("port", a.port))
a.gRPCServer.GracefulStop()
}