#pragma once /* ABSTRACT DEVICE COMPONENTS LIBRARY */ #include #include #include "../common/adc_traits.h" /* DEFINITIONS OF NETWORK CONPONENTS INTERFACES */ template concept adc_netservice_c = requires(SRVT srv, const SRVT srv_const) { typename SRVT::netservice_ident_t; // netservice_ident_t ident() const { srv_const.ident() } -> std::same_as; typename SRVT::async_ctx_t; typename SRVT::endpoint_t; requires requires { [](SRVT& srv_obj, const typename SRVT::endpoint_t& endpoint, const typename SRVT::async_ctx_t& ctx, const std::chrono::duration& timeout) { srv_obj.asyncAccept(endpoint, ctx, timeout); srv_obj.asyncConnect(endpoint, ctx, timeout); srv_obj.accept(endpoint, timeout); srv_obj.connect(endpoint, timeout); }(srv, typename SRVT::endpoint_t(), typename SRVT::async_ctx_t(), std::chrono::seconds(1)); []( SRVT& srv_obj, const R& msg, const typename SRVT::async_ctx_t& ctx, const std::chrono::duration& timeout) { srv_obj.asyncSend(msg, ctx, timeout); srv_obj.send(msg, timeout); }(srv, std::span(), typename SRVT::async_ctx_t(), std::chrono::seconds(1)); []( SRVT& srv_obj, R& msg, const typename SRVT::async_ctx_t& ctx, const std::chrono::duration& timeout) { srv_obj.asyncReceive(ctx, timeout); msg = srv_obj.receive(timeout); }(srv, std::string(), typename SRVT::async_ctx_t(), std::chrono::seconds(1)); }; };