|
| 1 | + |
| 2 | +# Client |
| 3 | + |
| 4 | +<!-- Auto-generated — do not edit. Regenerate with: doxygen Doxyfile && python3 generate_api_reference.py --> |
| 5 | + |
| 6 | + |
| 7 | +### `agnocast::Client<ServiceT>` |
| 8 | + |
| 9 | +Service client for zero-copy Agnocast service communication. The service/client API is experimental and may change in future versions. |
| 10 | + |
| 11 | +**Example:** |
| 12 | + |
| 13 | +```cpp |
| 14 | +using SrvT = example_interfaces::srv::AddTwoInts; |
| 15 | + |
| 16 | +auto client = agnocast::create_client<SrvT>(this, "add_two_ints"); |
| 17 | +client->wait_for_service(); |
| 18 | + |
| 19 | +// Send a request with a callback |
| 20 | +auto req = client->borrow_loaned_request(); |
| 21 | +req->a = 1; |
| 22 | +req->b = 2; |
| 23 | +client->async_send_request(std::move(req), |
| 24 | + [this](agnocast::Client<SrvT>::SharedFuture future) { |
| 25 | + RCLCPP_INFO(get_logger(), "Result: %ld", future.get()->sum); |
| 26 | + }); |
| 27 | + |
| 28 | +// Or send a request and get a future |
| 29 | +auto req2 = client->borrow_loaned_request(); |
| 30 | +req2->a = 3; |
| 31 | +req2->b = 4; |
| 32 | +auto future = client->async_send_request(std::move(req2)); |
| 33 | +RCLCPP_INFO(get_logger(), "Result: %ld", future.get()->sum); |
| 34 | +``` |
| 35 | +
|
| 36 | +
|
| 37 | +--- |
| 38 | +
|
| 39 | +#### `FutureAndRequestId` |
| 40 | +
|
| 41 | +```cpp |
| 42 | +struct FutureAndRequestId |
| 43 | +``` |
| 44 | + |
| 45 | +Return type of async_send_request() (no-callback overload). Contains a Future and the request ID. Access the future via the future member and the request ID via request_id. |
| 46 | + |
| 47 | + |
| 48 | +--- |
| 49 | + |
| 50 | +#### `RequestT` |
| 51 | + |
| 52 | +```cpp |
| 53 | +struct RequestT |
| 54 | +``` |
| 55 | +
|
| 56 | +Request type extending ServiceT::Request with internal metadata. Use this in borrow_loaned_request() return types. |
| 57 | +
|
| 58 | +| Template Parameter | Description | |
| 59 | +|-----------|-------------| |
| 60 | +| `RequestT` | Request message type (derived from `ServiceT::Request`). | |
| 61 | +
|
| 62 | +
|
| 63 | +--- |
| 64 | +
|
| 65 | +#### `ResponseT` |
| 66 | +
|
| 67 | +```cpp |
| 68 | +struct ResponseT |
| 69 | +``` |
| 70 | + |
| 71 | +Response type extending ServiceT::Response with internal metadata. Received via Future or SharedFuture. |
| 72 | + |
| 73 | +| Template Parameter | Description | |
| 74 | +|-----------|-------------| |
| 75 | +| `ResponseT` | Response message type (derived from `ServiceT::Response`). | |
| 76 | + |
| 77 | + |
| 78 | +--- |
| 79 | + |
| 80 | +#### `SharedFutureAndRequestId` |
| 81 | + |
| 82 | +```cpp |
| 83 | +struct SharedFutureAndRequestId |
| 84 | +``` |
| 85 | +
|
| 86 | +Return type of async_send_request() (callback overload). Contains a SharedFuture and the request ID. Access the shared future via the future member and the request ID via request_id. |
| 87 | +
|
| 88 | +
|
| 89 | +--- |
| 90 | +
|
| 91 | +#### `Future` |
| 92 | +
|
| 93 | +```cpp |
| 94 | +Future |
| 95 | +``` |
| 96 | + |
| 97 | +Future that resolves to the service response. Returned by async_send_request() (no-callback overload). |
| 98 | + |
| 99 | + |
| 100 | +--- |
| 101 | + |
| 102 | +#### `SharedFuture` |
| 103 | + |
| 104 | +```cpp |
| 105 | +SharedFuture |
| 106 | +``` |
| 107 | + |
| 108 | +Shared future that resolves to the service response. Passed to the callback in async_send_request(). |
| 109 | + |
| 110 | + |
| 111 | +--- |
| 112 | + |
| 113 | +#### `borrow_loaned_request()` |
| 114 | + |
| 115 | +```cpp |
| 116 | +agnocast::ipc_shared_ptr<RequestT> Client::borrow_loaned_request() |
| 117 | +``` |
| 118 | + |
| 119 | +Allocate a request message in shared memory. |
| 120 | + |
| 121 | +| Template Parameter | Description | |
| 122 | +|-----------|-------------| |
| 123 | +| `RequestT` | Request message type (derived from `ServiceT::Request`). | |
| 124 | +| | | |
| 125 | +| **Returns** | Owned pointer to the request message in shared memory. | |
| 126 | + |
| 127 | + |
| 128 | +--- |
| 129 | + |
| 130 | +#### `get_service_name()` |
| 131 | + |
| 132 | +```cpp |
| 133 | +char* Client::get_service_name() const |
| 134 | +``` |
| 135 | + |
| 136 | +Return the resolved service name. |
| 137 | + |
| 138 | +| | | |
| 139 | +|-----------|-------------| |
| 140 | +| **Returns** | Null-terminated service name string. | |
| 141 | + |
| 142 | + |
| 143 | +--- |
| 144 | + |
| 145 | +#### `service_is_ready()` |
| 146 | + |
| 147 | +```cpp |
| 148 | +bool Client::service_is_ready() const |
| 149 | +``` |
| 150 | + |
| 151 | +Check if the service server is available. |
| 152 | + |
| 153 | +| | | |
| 154 | +|-----------|-------------| |
| 155 | +| **Returns** | True if the service server is available. | |
| 156 | + |
| 157 | + |
| 158 | +--- |
| 159 | + |
| 160 | +#### `wait_for_service()` |
| 161 | + |
| 162 | +```cpp |
| 163 | +bool Client::wait_for_service(std::chrono::duration<RepT, RatioT> timeout) const |
| 164 | +``` |
| 165 | +
|
| 166 | +Block until the service is available or the timeout expires. |
| 167 | +
|
| 168 | +| Parameter | Default | Description | |
| 169 | +|-----------|---------|-------------| |
| 170 | +| `timeout` | `std::chrono::nanoseconds(-1)` | Maximum duration to wait (-1 = wait forever). | |
| 171 | +| | | | |
| 172 | +| **Returns** | True if service became available, false on timeout. | |
| 173 | +
|
| 174 | +
|
| 175 | +--- |
| 176 | +
|
| 177 | +#### `async_send_request()` |
| 178 | +
|
| 179 | +```cpp |
| 180 | +SharedFutureAndRequestId Client::async_send_request(agnocast::ipc_shared_ptr<RequestT> &&request, std::function<void(SharedFuture)> callback) |
| 181 | +``` |
| 182 | + |
| 183 | +Send a request asynchronously and invoke a callback when the response arrives. |
| 184 | + |
| 185 | +| Template Parameter | Description | |
| 186 | +|-----------|-------------| |
| 187 | +| `RequestT` | Request message type (derived from `ServiceT::Request`). | |
| 188 | +| **Parameter** | **Description** | |
| 189 | +| `request` | Request from borrow_loaned_request(). Must be moved in. | |
| 190 | +| `callback` | Invoked with a SharedFuture when the response arrives. Call future.get() to obtain the response. | |
| 191 | +| | | |
| 192 | +| **Returns** | A SharedFutureAndRequestId containing the shared future (.future) and a sequence number (.request_id). | |
| 193 | + |
| 194 | + |
| 195 | +--- |
| 196 | + |
| 197 | +#### `async_send_request() [overload 2]` |
| 198 | + |
| 199 | +```cpp |
| 200 | +FutureAndRequestId Client::async_send_request(agnocast::ipc_shared_ptr<RequestT> &&request) |
| 201 | +``` |
| 202 | +
|
| 203 | +Send a request asynchronously and return a future for the response. |
| 204 | +
|
| 205 | +| Template Parameter | Description | |
| 206 | +|-----------|-------------| |
| 207 | +| `RequestT` | Request message type (derived from `ServiceT::Request`). | |
| 208 | +| **Parameter** | **Description** | |
| 209 | +| `request` | Request from borrow_loaned_request(). Must be moved in. | |
| 210 | +| | | |
| 211 | +| **Returns** | A FutureAndRequestId containing the future (.future) and a sequence number (.request_id). Call .future.get() to block until the response arrives. | |
| 212 | +
|
0 commit comments