diff --git a/net/adc_net_concepts.h b/net/adc_net_concepts.h new file mode 100644 index 0000000..42b09bc --- /dev/null +++ b/net/adc_net_concepts.h @@ -0,0 +1,51 @@ +#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)); + }; +};