41 lines
732 B
Go
41 lines
732 B
Go
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
|
|
}
|