// Request sends a message on a connection and waits for a response. // Returns error network.Timeout if no response in 10 seconds. func (c *Conn) Request(m *protocol.Message) (*protocol.Message, error) { m.Id = uint64(rand.Int63()) m.ResponseRequired = true if err := c.Send(m); err != nil { return nil, err } timeout := make(chan bool, 1) go func() { time.Sleep(10 * time.Second) timeout <- true }() resp := make(chan *protocol.Message, 1) c.expectedMessages[m.Id] = resp var msg *protocol.Message var err error select { case msg = <-resp: case <-timeout: err = Timeout } delete(c.expectedMessages, m.Id) return msg, err }