diff --git a/backends/dockerclient.go b/backends/dockerclient.go index a25350e7c4..f99dad27d0 100644 --- a/backends/dockerclient.go +++ b/backends/dockerclient.go @@ -45,7 +45,7 @@ func DockerClientWithConfig(config *DockerClientConfig) beam.Sender { Server: beam.NewServer(), } b.Server.OnVerb(beam.Attach, beam.Handler(b.attach)) - b.Server.OnVerb(beam.Start, beam.Handler(b.start)) + b.Server.OnStart(b.start) b.Server.OnLs(b.ls) b.Server.OnSpawn(b.spawn) return b.Server, nil @@ -81,8 +81,7 @@ func (b *dockerClientBackend) attach(ctx *beam.Message) error { return nil } -func (b *dockerClientBackend) start(ctx *beam.Message) error { - ctx.Ret.Send(&beam.Message{Verb: beam.Ack}) +func (b *dockerClientBackend) start() error { return nil } @@ -133,8 +132,8 @@ func (b *dockerClientBackend) newContainer(id string) beam.Sender { c := &container{backend: b, id: id} instance := beam.NewServer() instance.OnVerb(beam.Attach, beam.Handler(c.attach)) - instance.OnVerb(beam.Start, beam.Handler(c.start)) - instance.OnVerb(beam.Stop, beam.Handler(c.stop)) + instance.OnStart(c.start) + instance.OnStop(c.stop) instance.OnVerb(beam.Get, beam.Handler(c.get)) return instance } @@ -160,7 +159,7 @@ func (c *container) attach(ctx *beam.Message) error { return nil } -func (c *container) start(ctx *beam.Message) error { +func (c *container) start() error { path := fmt.Sprintf("/containers/%s/start", c.id) resp, err := c.backend.client.call("POST", path, "{}") if err != nil { @@ -173,13 +172,10 @@ func (c *container) start(ctx *beam.Message) error { if resp.StatusCode != 204 { return fmt.Errorf("expected status code 204, got %d:\n%s", resp.StatusCode, respBody) } - if _, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack}); err != nil { - return err - } return nil } -func (c *container) stop(ctx *beam.Message) error { +func (c *container) stop() error { path := fmt.Sprintf("/containers/%s/stop", c.id) resp, err := c.backend.client.call("POST", path, "") if err != nil { @@ -192,9 +188,6 @@ func (c *container) stop(ctx *beam.Message) error { if resp.StatusCode != 204 { return fmt.Errorf("expected status code 204, got %d:\n%s", resp.StatusCode, respBody) } - if _, err := ctx.Ret.Send(&beam.Message{Verb: beam.Ack}); err != nil { - return err - } return nil } diff --git a/beam/server.go b/beam/server.go index ecd4ebdaa6..b241edf6fe 100644 --- a/beam/server.go +++ b/beam/server.go @@ -49,6 +49,26 @@ func (s *Server) OnSpawn(h func(cmd ...string) (Sender, error)) *Server { })) } +func (s *Server) OnStart(h func() error) *Server { + return s.OnVerb(Start, Handler(func(msg *Message) error { + if err := h(); err != nil { + return err + } + _, err := msg.Ret.Send(&Message{Verb: Ack}) + return err + })) +} + +func (s *Server) OnStop(h func() error) *Server { + return s.OnVerb(Stop, Handler(func(msg *Message) error { + if err := h(); err != nil { + return err + } + _, err := msg.Ret.Send(&Message{Verb: Ack}) + return err + })) +} + func (s *Server) Send(msg *Message) (Receiver, error) { if h, exists := s.handlers[msg.Verb]; exists { return h.Send(msg)