docs: def send_and_wait(self, path, message, timeout=0, responder=None):
          """
          Send a message and block until a response is received. Return response message
          """
  
          message.on("response", lambda x,event_origin,source:None, once=True)
  
          if timeout > 0:
              ts = time.time()
          else:
              ts = 0
          sent = False
  
          while not message.response_received:
              if not sent:
                  self.send(path, message)
                  sent = True
              if ts:
                  if time.time() - ts > timeout:
                      raise exceptions.TimeoutError("send_and_wait(%s)"%path, timeout)
  
          return message.response_message