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 }