Implement OnGet

Signed-off-by: Aanand Prasad <aanand.prasad@gmail.com>
This commit is contained in:
Aanand Prasad 2014-06-19 14:53:22 +01:00 committed by Aaron Feng
parent c1a78b28ec
commit 8e530ead6e
2 changed files with 17 additions and 9 deletions

View File

@ -134,7 +134,7 @@ func (b *dockerClientBackend) newContainer(id string) beam.Sender {
instance.OnVerb(beam.Attach, beam.Handler(c.attach)) instance.OnVerb(beam.Attach, beam.Handler(c.attach))
instance.OnStart(c.start) instance.OnStart(c.start)
instance.OnStop(c.stop) instance.OnStop(c.stop)
instance.OnVerb(beam.Get, beam.Handler(c.get)) instance.OnGet(c.get)
return instance return instance
} }
@ -191,23 +191,20 @@ func (c *container) stop() error {
return nil return nil
} }
func (c *container) get(ctx *beam.Message) error { func (c *container) get() (string, error) {
path := fmt.Sprintf("/containers/%s/json", c.id) path := fmt.Sprintf("/containers/%s/json", c.id)
resp, err := c.backend.client.call("GET", path, "") resp, err := c.backend.client.call("GET", path, "")
if err != nil { if err != nil {
return err return "", err
} }
respBody, err := ioutil.ReadAll(resp.Body) respBody, err := ioutil.ReadAll(resp.Body)
if err != nil { if err != nil {
return err return "", err
} }
if resp.StatusCode != 200 { if resp.StatusCode != 200 {
return fmt.Errorf("%s", respBody) return "", fmt.Errorf("%s", respBody)
} }
if _, err := ctx.Ret.Send(&beam.Message{Verb: beam.Set, Args: []string{string(respBody)}}); err != nil { return string(respBody), nil
return err
}
return nil
} }
type client struct { type client struct {

View File

@ -49,6 +49,17 @@ func (s *Server) OnSpawn(h func(cmd ...string) (Sender, error)) *Server {
})) }))
} }
func (s *Server) OnGet(h func() (string, error)) *Server {
return s.OnVerb(Get, Handler(func(msg *Message) error {
content, err := h()
if err != nil {
return err
}
_, err = msg.Ret.Send(&Message{Verb: Set, Args: []string{content}})
return err
}))
}
func (s *Server) OnStart(h func() error) *Server { func (s *Server) OnStart(h func() error) *Server {
return s.OnVerb(Start, Handler(func(msg *Message) error { return s.OnVerb(Start, Handler(func(msg *Message) error {
if err := h(); err != nil { if err := h(); err != nil {