package srv import ( "context" "github.com/loveuer/nfflow/internal/opt" "github.com/loveuer/nfflow/internal/util" "github.com/sirupsen/logrus" "net" ) func Run(ctx context.Context) error { app := initApp() ln, err := net.Listen("tcp", opt.Cfg.Address) if err != nil { logrus.Errorf("srv.Run: err=%v", err) return err } ready := make(chan bool) go func() { ready <- true <-ctx.Done() if err = app.Shutdown(util.Timeout(2)); err != nil { logrus.Infof("srv.Run: nf app shutdown err=%v", err) } }() <-ready if err = app.RunListener(ln); err != nil { logrus.Errorf("srv.Run: nf app run err=%v", err) return err } return nil }