1package beanstalk 2 3import ( 4 "time" 5) 6 7// TubeSet represents a set of tubes on the server connected to by Conn. 8// Name names the tubes represented. 9type TubeSet struct { 10 Conn *Conn 11 Name map[string]bool 12} 13 14// NewTubeSet returns a new TubeSet representing the given names. 15func NewTubeSet(c *Conn, name ...string) *TubeSet { 16 ts := &TubeSet{c, make(map[string]bool)} 17 for _, s := range name { 18 ts.Name[s] = true 19 } 20 return ts 21} 22 23// Reserve reserves and returns a job from one of the tubes in t. If no 24// job is available before time timeout has passed, Reserve returns a 25// ConnError recording ErrTimeout. 26// 27// Typically, a client will reserve a job, perform some work, then delete 28// the job with Conn.Delete. 29func (t *TubeSet) Reserve(timeout time.Duration) (id uint64, body []byte, err error) { 30 r, err := t.Conn.cmd(nil, t, nil, "reserve-with-timeout", dur(timeout)) 31 if err != nil { 32 return 0, nil, err 33 } 34 body, err = t.Conn.readResp(r, true, "RESERVED %d", &id) 35 if err != nil { 36 return 0, nil, err 37 } 38 return id, body, nil 39} 40