go-scopes/scopes.go

61 lines
1.2 KiB
Go

package scopes
import (
"fmt"
"os"
"os/signal"
"syscall"
"git.sr.ht/~cco/go-scopes/common"
"git.sr.ht/~cco/go-scopes/config"
)
type Cfg struct {
*config.Base
AppType string
Home string
}
func Start(ctx common.Context) {
for _, cfg := range ctx.Config().Children() {
cctx := ctx.ChildContext(cfg)
cfg.Starter()(cctx)
fmt.Println(cfg.Name(), " started")
}
fmt.Println("running ", ctx.WaitGroup())
defer func() {
close(ctx.Done())
ctx.WaitGroup().Wait()
fmt.Println("finishing ", ctx.WaitGroup())
//ctx.LogDebug("Dispatcher exited", m.Map{})
}()
sig := make(chan os.Signal, 1)
signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM)
for step(ctx, sig) {
}
}
func step(ctx common.Context, sig <-chan os.Signal) bool {
select {
case <-sig:
fmt.Println("interrupted")
//ctx.LogInfo("Dispatcher interrupted", m.Map{})
return false
case msg := <-ctx.Mailbox():
fmt.Println("message", msg)
//ctx.LogDebug("dispatcherStep", m.Map{"msg": msg})
if msg == "quit" {
//ctx.LogInfo("Dispatcher stopped", m.Map{})
return false
}
//ctx.HandleMsg(&msg)
}
return true
}
// definitions
func RunApp(cfg common.Config) {
ctx := common.AppContext(cfg)
cfg.Starter()(ctx)
}