yeast/core/app.go

63 lines
1.1 KiB
Go
Raw Normal View History

2015-02-11 20:57:25 +07:00
package core
import (
2015-02-12 02:50:04 +07:00
"fmt"
2015-02-11 20:57:25 +07:00
"github.com/localhots/yeast/chain"
"github.com/localhots/yeast/unit"
)
type (
App struct {
config *Config
chains *chain.Bank
2015-02-12 02:50:04 +07:00
sv *Supervisor
2015-02-11 20:57:25 +07:00
}
)
func NewApp() *App {
2015-02-12 02:50:04 +07:00
conf := &Config{}
conf.Init()
ub := unit.NewBank(conf.C().UnitsConfig)
2015-02-11 20:57:25 +07:00
a := &App{
2015-02-12 02:50:04 +07:00
config: conf,
chains: chain.NewBank(conf.C().ChainsConfig, ub),
sv: &Supervisor{
Bin: conf.C().Python.BinPath,
Wrapper: conf.C().Python.WrapperPath,
},
2015-02-11 20:57:25 +07:00
}
a.chains.Reload()
return a
}
func (a *App) Conf() Config {
2015-02-12 02:50:04 +07:00
// This is terrible
2015-02-11 20:57:25 +07:00
return a.config.conf.Config().(Config)
}
2015-02-12 02:50:04 +07:00
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))
}