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