buildr/internal/cmd/app_server.go

48 lines
1 KiB
Go
Raw Normal View History

package cmd
import (
"context"
"log/slog"
"code.icb4dc0.de/buildr/buildr/internal/rpc"
"code.icb4dc0.de/buildr/buildr/internal/services"
)
var _ ServerCommander = (*ServerApp)(nil)
func NewServerApp(initializer LevelInitializer, accessor services.TypeRegistryAccessor) *ServerApp {
return &ServerApp{
initializer: initializer,
accessor: accessor,
}
}
type ServerApp struct {
initializer LevelInitializer
accessor services.TypeRegistryAccessor
}
func (s *ServerApp) ServeAPI(ctx context.Context, cfg *rpc.GrpcConfig) error {
2023-06-22 16:06:56 +00:00
if err := s.initializer.InitAt(ctx, InitLevelBasic); err != nil {
return err
}
logger := slog.Default()
logger.Info("Starting gRPC server", slog.Group("grpc", slog.String("addr", cfg.Host.Address)))
grpcServer := rpc.NewServer(logger, s.accessor)
go func() {
if err := grpcServer.Start(ctx, cfg.Host.Address); err != nil {
slog.Error("Error occurred while serving gRPC API", slog.String("err", err.Error()))
}
}()
<-ctx.Done()
grpcServer.Close()
return nil
}