Unit and chain banks

This commit is contained in:
2015-02-11 19:27:51 +07:00
parent c96bc7ad8f
commit 9e472cc9a3
7 changed files with 117 additions and 89 deletions
+40 -22
View File
@@ -10,31 +10,49 @@ import (
"github.com/localhots/yeast/unit"
)
var (
chains = map[string]*Chain{}
type (
Bank struct {
config string
chains map[string]*Chain
units *unit.Bank
}
)
func LoadChains(path string) {
f, err := os.Open(path)
if err != nil {
panic("Failed to open chains config: " + path)
}
b, err := ioutil.ReadAll(f)
if err != nil {
panic("Failed to read chains config: " + path)
}
var schema map[string]interface{}
if err := json.Unmarshal(b, &schema); err != nil {
panic("Failed to parse chains config: " + path)
}
for name, c := range schema {
chains[name] = Parse(interface{}(c))
func NewBank(config string, units *unit.Bank) *Bank {
return &Bank{
config: config,
chains: map[string]*Chain{},
units: units,
}
}
func Parse(conf interface{}) *Chain {
func (b *Bank) Chain(name string) *Chain {
c, _ := b.chains[name]
return c
}
func (b *Bank) Reload() {
f, err := os.Open(b.config)
if err != nil {
panic("Failed to open chains config: " + b.config)
}
bs, err := ioutil.ReadAll(f)
if err != nil {
panic("Failed to read chains config: " + b.config)
}
var schema map[string]interface{}
if err := json.Unmarshal(bs, &schema); err != nil {
panic("Failed to parse chains config: " + b.config)
}
b.chains = map[string]*Chain{}
for name, c := range schema {
b.chains[name] = b.parse(interface{}(c))
}
}
func (b *Bank) parse(conf interface{}) *Chain {
c := &Chain{
Links: []unit.Caller{},
}
@@ -51,13 +69,13 @@ func Parse(conf interface{}) *Chain {
switch val.Kind() {
case reflect.Map:
subchain := Parse(interface{}(link))
subchain := b.parse(interface{}(link))
if len(subchain.Links) > 0 {
c.Links = append(c.Links, unit.Caller(subchain))
}
case reflect.String:
name := link.(string)
if caller := unit.New(name); caller != nil {
if caller := b.units.Unit(name); caller != nil {
c.Links = append(c.Links, caller)
} else {
fmt.Println("Unknown unit:", name)
-5
View File
@@ -18,11 +18,6 @@ const (
LF = byte(10)
)
func New(name string) *Chain {
c, _ := chains[name]
return c
}
func (c *Chain) Call(data []byte) (resp []byte, err error) {
switch c.Flow {
case SequentialFlow: