/* * Copyright 2026 Oleg Borodin */ package starter import ( "os" "path/filepath" "mbase/app/config" "mbase/app/server" "github.com/spf13/cobra" ) type Starter struct { //runAsDaemon bool //port uint32 cmd *cobra.Command srv *server.Server conf *config.Config } func NewStarter() *Starter { execName := filepath.Base(os.Args[0]) sta := &Starter{} cmd := &cobra.Command{ Use: execName, Short: "\nService", SilenceUsage: true, RunE: sta.run, } cmd.CompletionOptions.DisableDefaultCmd = true cmd.Flags().BoolVarP(&sta.conf.AsDaemon, "asDaemon", "D", sta.conf.AsDaemon, "Run service as daemon") cmd.Flags().Uint32VarP(&sta.conf.Service.Portnum, "port", "P", sta.conf.Service.Portnum, "Service port") sta.cmd = cmd return sta } func (sta *Starter) GetCmd() *cobra.Command { return sta.cmd } func (sta *Starter) run(cmd *cobra.Command, args []string) error { var err error err = sta.configure() if err != nil { return err } srv, err := server.NewServer(sta.conf) if err != nil { return err } err = srv.Daemonize() if err != nil { return err } err = srv.Build() if err != nil { return err } err = srv.Run() if err != nil { return err } sta.srv = srv return err } func (sta *Starter) configure() error { var err error sta.conf = config.NewConfig() err = sta.conf.ReadFile() if err != nil { return err } err = sta.conf.ReadEnv() if err != nil { return err } err = sta.conf.ReadOpts() if err != nil { return err } return err } func (sta *Starter) Exec() error { return sta.cmd.Execute() }