def test_waitable_with_client(self): self.waitable = ClientWaitable(self.node) self.node.add_waitable(self.waitable) server = self.node.create_service(EmptySrv, 'test_client', lambda req, resp: resp) while not _rclpy.rclpy_service_server_is_available(self.node.handle, self.waitable.client): time.sleep(0.1) thr = self.start_spin_thread(self.waitable) _rclpy.rclpy_send_request(self.waitable.client, EmptySrv.Request()) thr.join() assert self.waitable.future.done() assert isinstance(self.waitable.future.result()['client'], EmptySrv.Response) self.node.destroy_service(server)
def call_async(self, request: SrvTypeRequest) -> Future: """ Make a service request and asyncronously get the result. :param request: The service request. :return: A future that completes when the request does. :raises: TypeError if the type of the passed request isn't an instance of the Request type of the provided service when the client was constructed. """ if not isinstance(request, self.srv_type.Request): raise TypeError() with self.handle as capsule: sequence_number = _rclpy.rclpy_send_request(capsule, request) if sequence_number in self._pending_requests: raise RuntimeError('Sequence (%r) conflicts with pending request' % sequence_number) future = Future() self._pending_requests[sequence_number] = future future.add_done_callback(self.remove_pending_request) return future
def call_async(self, req): """ Make a service request and asyncronously get the result. :return: a Future instance that completes when the request does :rtype: :class:`rclpy.task.Future` instance """ sequence_number = _rclpy.rclpy_send_request(self.client_handle, req) if sequence_number in self._pending_requests: raise RuntimeError('Sequence (%r) conflicts with pending request' % sequence_number) future = Future() self._pending_requests[sequence_number] = future future.add_done_callback(self.remove_pending_request) return future
def call_async(self, request: SrvTypeRequest) -> Future: """ Make a service request and asyncronously get the result. :param request: The service request. :return: A future that completes when the request does. """ sequence_number = _rclpy.rclpy_send_request(self.client_handle, request) if sequence_number in self._pending_requests: raise RuntimeError('Sequence (%r) conflicts with pending request' % sequence_number) future = Future() self._pending_requests[sequence_number] = future future.add_done_callback(self.remove_pending_request) return future
def call(self, req): self.response = None self.sequence_number = _rclpy.rclpy_send_request(self.client_handle, req)