13#ifndef IOX2_SERVER_HPP
14#define IOX2_SERVER_HPP
27 typename RequestPayload,
28 typename RequestHeader,
29 typename ResponsePayload,
30 typename ResponseHeader>
48 template <typename T = ResponsePayload, typename = std::enable_if_t<bb::IsSlice<T>::VALUE,
void>>
58 template <
ServiceType, typename, typename, typename, typename>
61 explicit
Server(iox2_server_h handle) noexcept;
65 iox2_server_h m_handle =
nullptr;
69 typename RequestPayload,
71 typename ResponsePayload,
74 *
this = std::move(rhs);
78 typename RequestPayload,
80 typename ResponsePayload,
87 m_handle = rhs.m_handle;
88 rhs.m_handle =
nullptr;
95 typename RequestPayload,
97 typename ResponsePayload,
104 typename RequestPayload,
106 typename ResponsePayload,
111 iox2_active_request_h active_request_handle {};
112 auto result = iox2_server_receive(&m_handle,
nullptr, &active_request_handle);
114 if (result == IOX2_OK) {
115 if (active_request_handle !=
nullptr) {
117 active_request_handle);
119 std::move(active_request));
124 return bb::err(bb::into<ReceiveError>(result));
128 typename RequestPayload,
130 typename ResponsePayload,
132template <
typename T,
typename>
136 return iox2_server_initial_max_slice_len(&m_handle);
140 typename RequestPayload,
142 typename ResponsePayload,
146 iox2_unique_server_id_h id_handle =
nullptr;
147 iox2_server_id(&m_handle,
nullptr, &id_handle);
152 typename RequestPayload,
154 typename ResponsePayload,
158 bool has_requests_result =
false;
159 auto result = iox2_server_has_requests(&m_handle, &has_requests_result);
161 if (result == IOX2_OK) {
162 return has_requests_result;
165 return bb::err(bb::into<ConnectionFailure>(result));
169 typename RequestPayload,
171 typename ResponsePayload,
174 iox2_server_h handle) noexcept
175 : m_handle { handle } {
179 typename RequestPayload,
180 typename RequestHeader,
181 typename ResponsePayload,
182 typename ResponseHeader>
183inline void Server<Service, RequestPayload, RequestHeader, ResponsePayload, ResponseHeader>::drop() {
184 if (m_handle !=
nullptr) {
185 iox2_server_drop(m_handle);
auto initial_max_slice_len() const -> uint64_t
Returns the maximum initial slice length configured for this [Server].
auto has_requests() const -> bb::Expected< bool, ConnectionFailure >
Returns true if the [Server] has [RequestMut]s in its buffer.
Server(const Server &) noexcept=delete
auto operator=(const Server &) noexcept -> Server &=delete
auto id() const -> UniqueServerId
Returns the [UniqueServerId] of the [Server].
Server(Server &&rhs) noexcept
auto receive() -> bb::Expected< bb::Optional< ActiveRequest< Service, RequestPayload, RequestHeader, ResponsePayload, ResponseHeader > >, ReceiveError >
auto operator=(Server &&rhs) noexcept -> Server &
The system-wide unique id of a [Server].
constexpr NulloptT NULLOPT
constexpr auto err(const E &error) -> Unexpected< E >
iox2::bb::variation::Optional< T > Optional
iox2::bb::variation::Expected< T, E > Expected