Exemple #1
0
    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)
Exemple #2
0
    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
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
 def call(self, req):
     self.response = None
     self.sequence_number = _rclpy.rclpy_send_request(self.client_handle, req)
Exemple #6
0
 def call(self, req):
     self.response = None
     self.sequence_number = _rclpy.rclpy_send_request(self.client_handle, req)