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 { func Debug() beam.Sender {
backend := beam.NewServer() backend := beam.NewServer()
backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error { backend.OnSpawn(beam.Handler(func(ctx *beam.Message) error {
instance := beam.NewServer() instance := beam.Task(func(in beam.Receiver, out beam.Sender) {
instance.Catchall(beam.Handler(func(msg *beam.Message) error { 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, " ")) fmt.Printf("[DEBUG] %s %s\n", msg.Verb, strings.Join(msg.Args, " "))
ctx.Ret.Send(msg) if _, err := out.Send(msg); err != nil {
return nil fmt.Printf("debug send: %v", err)
})) return
}
}
})
_, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: instance}) _, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack, Ret: instance})
return err return err
})) }))

View File

@ -17,3 +17,35 @@ const (
Stop Stop
Watch 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.Name = "swarmd"
app.Usage = "Compose distributed systems from lightweight services" app.Usage = "Compose distributed systems from lightweight services"
app.Version = "0.0.1" app.Version = "0.0.1"
app.Flags = []cli.Flag{ app.Flags = []cli.Flag{}
}
app.Action = cmdDaemon app.Action = cmdDaemon
app.Run(os.Args) app.Run(os.Args)
} }
@ -43,7 +42,9 @@ func cmdDaemon(c *cli.Context) {
fmt.Println(strings.Join(names, "\n")) fmt.Println(strings.Join(names, "\n"))
return 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 { if err != nil {
Fatalf("parse: %v", err) Fatalf("parse: %v", err)
} }
@ -58,7 +59,7 @@ func cmdDaemon(c *cli.Context) {
Fatalf("spawn %s: %v\n", bName, err) Fatalf("spawn %s: %v\n", bName, err)
} }
fmt.Printf("---> Attaching\n") fmt.Printf("---> Attaching\n")
instanceIn, _, err := instance.Attach("") instanceIn, instanceOut, err := instance.Attach("")
if err != nil { if err != nil {
Fatalf("attach: %v", err) Fatalf("attach: %v", err)
} }
@ -66,7 +67,12 @@ func cmdDaemon(c *cli.Context) {
if err := instance.Start(); err != nil { if err := instance.Start(); err != nil {
Fatalf("start: %v", err) 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 { if err != nil {
Fatalf("copy: %v", err) Fatalf("copy: %v", err)
} }