nfflow/internal/api/start.go

41 lines
732 B
Go
Raw Permalink Normal View History

2024-03-31 20:09:20 +08:00
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
}