13#ifndef IOX2_SERVER_HPP
14#define IOX2_SERVER_HPP
28 typename RequestPayload,
29 typename RequestHeader,
30 typename ResponsePayload,
31 typename ResponseHeader>
49 template <typename T = ResponsePayload, typename = std::enable_if_t<bb::IsSlice<T>::VALUE,
void>>
62 template <
ServiceType, typename, typename, typename, typename>
65 explicit
Server(iox2_server_h handle) noexcept;
69 iox2_server_h m_handle =
nullptr;
73 typename RequestPayload,
75 typename ResponsePayload,
78 *
this = std::move(rhs);
82 typename RequestPayload,
84 typename ResponsePayload,
91 m_handle = rhs.m_handle;
92 rhs.m_handle =
nullptr;
99 typename RequestPayload,
101 typename ResponsePayload,
108 typename RequestPayload,
110 typename ResponsePayload,
115 iox2_active_request_h active_request_handle {};
116 auto result = iox2_server_receive(&m_handle,
nullptr, &active_request_handle);
118 if (result == IOX2_OK) {
119 if (active_request_handle !=
nullptr) {
121 active_request_handle);
123 std::move(active_request));
128 return bb::err(bb::into<ReceiveError>(result));
132 typename RequestPayload,
134 typename ResponsePayload,
136template <
typename T,
typename>
140 return iox2_server_initial_max_slice_len(&m_handle);
144 typename RequestPayload,
146 typename ResponsePayload,
150 iox2_unique_server_id_h id_handle =
nullptr;
151 iox2_server_id(&m_handle,
nullptr, &id_handle);
156 typename RequestPayload,
158 typename ResponsePayload,
162 const auto* port_name_ptr = iox2_server_name(&m_handle);
167 typename RequestPayload,
169 typename ResponsePayload,
173 bool has_requests_result =
false;
174 auto result = iox2_server_has_requests(&m_handle, &has_requests_result);
176 if (result == IOX2_OK) {
177 return has_requests_result;
180 return bb::err(bb::into<ConnectionFailure>(result));
184 typename RequestPayload,
186 typename ResponsePayload,
189 iox2_server_h handle) noexcept
190 : m_handle { handle } {
194 typename RequestPayload,
195 typename RequestHeader,
196 typename ResponsePayload,
197 typename ResponseHeader>
198inline void Server<Service, RequestPayload, RequestHeader, ResponsePayload, ResponseHeader>::drop() {
199 if (m_handle !=
nullptr) {
200 iox2_server_drop(m_handle);
Non-owning view of a [PortName].
static auto from_native_ptr(iox2_port_name_ptr m_ptr) -> PortNameView
Creates a [PortNameView] from a native [iox2_port_name_ptr].
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 &
auto name() const -> PortNameView
Returns the [PortNameView] of the [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