yeast/core/app.go

63 lines
1.1 KiB
Go

package core
import (
"fmt"
"github.com/localhots/yeast/chain"
"github.com/localhots/yeast/unit"
)
type (
App struct {
config *Config
chains *chain.Bank
sv *Supervisor
}
)
func NewApp() *App {
conf := &Config{}
conf.Init()
ub := unit.NewBank(conf.C().UnitsConfig)
a := &App{
config: conf,
chains: chain.NewBank(conf.C().ChainsConfig, ub),
sv: &Supervisor{
Bin: conf.C().Python.BinPath,
Wrapper: conf.C().Python.WrapperPath,
},
}
a.chains.Reload()
return a
}
func (a *App) Conf() Config {
// This is terrible
return a.config.conf.Config().(Config)
}
func (a *App) Call(chainName string, data []byte) (resp []byte, err error) {
if c, ok := a.chains.Chain(chainName); ok {
return c.Call(data)
} else {
return nil, fmt.Errorf("Unknown chain: %s", chainName)
}
}
func (a *App) BootChain(name string) {
if c, ok := a.chains.Chain(name); ok {
a.sv.Start(c.Units()...)
return
}
panic(fmt.Errorf("Unknown chain: %s", name))
}
func (a *App) ChainUnits(name string) []string {
if c, ok := a.chains.Chain(name); ok {
return c.Units()
}
panic(fmt.Errorf("Unknown chain: %s", name))
}