46 lines
806 B
Go
46 lines
806 B
Go
|
package api
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"net"
|
||
|
|
||
|
"esway/internal/opt"
|
||
|
"esway/internal/tool"
|
||
|
|
||
|
"github.com/loveuer/nf/nft/log"
|
||
|
)
|
||
|
|
||
|
func Start(ctx context.Context) error {
|
||
|
app := initApp(ctx)
|
||
|
ready := make(chan bool)
|
||
|
|
||
|
ln, err := net.Listen("tcp", opt.Cfg.Listen.Dashboard)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("api.MustStart: net listen tcp address=%v err=%v", opt.Cfg.Listen.Dashboard, err)
|
||
|
}
|
||
|
|
||
|
go func() {
|
||
|
ready <- true
|
||
|
|
||
|
fmt.Printf("esway: dashboard listen at %s\n", opt.Cfg.Listen.Dashboard)
|
||
|
if err = app.RunListener(ln); err != nil {
|
||
|
log.Panic("api.MustStart: app run err=%v", err)
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
<-ready
|
||
|
|
||
|
go func() {
|
||
|
ready <- true
|
||
|
<-ctx.Done()
|
||
|
if err = app.Shutdown(tool.Timeout(2)); err != nil {
|
||
|
log.Error("api.MustStart: app shutdown err=%v", err)
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
<-ready
|
||
|
|
||
|
return nil
|
||
|
}
|