Merge pull request #32 from bfirsh/multiple-backends-pipe

This commit is contained in:
Solomon Hykes 2014-06-05 14:48:30 -07:00
commit 3634a1c9ee
3 changed files with 78 additions and 31 deletions

View File

@ -24,12 +24,21 @@ func New() *beam.Object {
func Debug() beam.Sender {
backend := beam.NewServer()
backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error {
instance := beam.NewServer()
instance.Catchall(beam.Handler(func(msg *beam.Message) error {
instance := beam.Task(func(in beam.Receiver, out beam.Sender) {
fmt.Printf("debug backend!")
for {
msg, err := in.Receive(beam.Ret)
if err != nil {
fmt.Printf("debug receive: %v", err)
return
}
fmt.Printf("[DEBUG] %s %s\n", msg.Verb, strings.Join(msg.Args, " "))
ctx.Ret.Send(msg)
return nil
}))
if _, err := out.Send(msg); err != nil {
fmt.Printf("debug send: %v", err)
return
}
}
})
_, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: instance})
return err
}))

View File

@ -17,3 +17,35 @@ const (
Stop
Watch
)
func (v Verb) String() string {
switch v {
case Ack:
return "Ack"
case Attach:
return "Attach"
case Connect:
return "Connect"
case Error:
return "Error"
case File:
return "File"
case Get:
return "Get"
case Log:
return "Log"
case Ls:
return "Ls"
case Set:
return "Set"
case Spawn:
return "Spawn"
case Start:
return "Start"
case Stop:
return "Stop"
case Watch:
return "Watch"
}
return ""
}

View File

@ -18,8 +18,7 @@ func main() {
app.Name = "swarmd"
app.Usage = "Compose distributed systems from lightweight services"
app.Version = "0.0.1"
app.Flags = []cli.Flag{
}
app.Flags = []cli.Flag{}
app.Action = cmdDaemon
app.Run(os.Args)
}
@ -43,7 +42,9 @@ func cmdDaemon(c *cli.Context) {
fmt.Println(strings.Join(names, "\n"))
return
}
bName, bArgs, err := parseCmd(c.Args()[0])
var previousInstanceIn beam.Receiver
for _, backendArg := range c.Args() {
bName, bArgs, err := parseCmd(backendArg)
if err != nil {
Fatalf("parse: %v", err)
}
@ -58,7 +59,7 @@ func cmdDaemon(c *cli.Context) {
Fatalf("spawn %s: %v\n", bName, err)
}
fmt.Printf("---> Attaching\n")
instanceIn, _, err := instance.Attach("")
instanceIn, instanceOut, err := instance.Attach("")
if err != nil {
Fatalf("attach: %v", err)
}
@ -66,7 +67,12 @@ func cmdDaemon(c *cli.Context) {
if err := instance.Start(); err != nil {
Fatalf("start: %v", err)
}
_, err = beam.Copy(app, instanceIn)
if previousInstanceIn != nil {
go beam.Copy(instanceOut, previousInstanceIn)
}
previousInstanceIn = instanceIn
}
_, err := beam.Copy(app, previousInstanceIn)
if err != nil {
Fatalf("copy: %v", err)
}