rewrite SESSION_PROTO.search
rewrite ASIO NETSERVICE.asyncReceive rewrite ASIO NETSESSION
This commit is contained in:
@@ -93,45 +93,46 @@ concept adc_async_callback_t = traits::adc_is_callable<T> && traits::adc_func_tr
|
||||
|
||||
}
|
||||
*/
|
||||
template <typename SRVT,
|
||||
typename SMSGT = std::vector<char>, // sending message type
|
||||
typename RMSGT = std::vector<char>, // receiving message type
|
||||
typename DURT = adc_common_duration_t // time duration type
|
||||
>
|
||||
concept adc_netservice_c =
|
||||
traits::adc_input_char_range<SMSGT> && traits::adc_output_char_range<RMSGT> && traits::adc_time_duration_c<DURT> &&
|
||||
requires(SRVT srv, const SRVT srv_const) {
|
||||
typename SRVT::netservice_ident_t;
|
||||
template <typename SRVT>
|
||||
concept adc_netservice_c = std::movable<SRVT> && requires(SRVT srv, const SRVT srv_const) {
|
||||
typename SRVT::netservice_ident_t; // service identificator type
|
||||
|
||||
// netservice_ident_t ident() const
|
||||
{ srv_const.ident() } -> std::same_as<typename SRVT::netservice_ident_t>;
|
||||
typename SRVT::send_msg_t; // sending message type
|
||||
typename SRVT::recv_msg_t; // receiving message type
|
||||
typename SRVT::timeout_t; // a type representing timeout (e.g. time duration)
|
||||
|
||||
typename SRVT::async_call_ctx_t;
|
||||
typename SRVT::endpoint_t;
|
||||
typename SRVT::endpoint_t; // a type representing endpoint of the network service
|
||||
// underlying protocol
|
||||
|
||||
// asynchronous (non-blocking) operations
|
||||
srv.asyncAccept(std::declval<const typename SRVT::endpoint_t&>(),
|
||||
std::declval<typename SRVT::async_call_ctx_t&>(), std::declval<const DURT&>());
|
||||
// netservice_ident_t ident() const
|
||||
{ srv_const.ident() } -> std::same_as<typename SRVT::netservice_ident_t>;
|
||||
|
||||
srv.asyncConnect(std::declval<const typename SRVT::endpoint_t&>(),
|
||||
std::declval<typename SRVT::async_call_ctx_t&>(), std::declval<const DURT&>());
|
||||
typename SRVT::async_call_ctx_t;
|
||||
|
||||
srv.asyncSend(std::declval<const SMSGT&>(), std::declval<typename SRVT::async_call_ctx_t&>(),
|
||||
std::declval<const DURT&>());
|
||||
|
||||
srv.asyncReceive(std::declval<typename SRVT::async_call_ctx_t&>(), std::declval<const DURT&>());
|
||||
// asynchronous (non-blocking) operations
|
||||
srv.asyncAccept(std::declval<const typename SRVT::endpoint_t&>(), std::declval<typename SRVT::async_call_ctx_t&>(),
|
||||
std::declval<const typename SRVT::timeout_t&>());
|
||||
|
||||
// synchronous (blocking) operations
|
||||
srv.accept(std::declval<const typename SRVT::endpoint_t&>(), std::declval<const DURT&>());
|
||||
srv.asyncConnect(std::declval<const typename SRVT::endpoint_t&>(), std::declval<typename SRVT::async_call_ctx_t&>(),
|
||||
std::declval<const typename SRVT::timeout_t&>());
|
||||
|
||||
srv.connect(std::declval<const typename SRVT::endpoint_t&>(), std::declval<const DURT&>());
|
||||
srv.asyncSend(std::declval<const typename SRVT::send_msg_t&>(), std::declval<typename SRVT::async_call_ctx_t&>(),
|
||||
std::declval<const typename SRVT::timeout_t&>());
|
||||
|
||||
srv.send(std::declval<const SMSGT&>(), std::declval<const DURT&>());
|
||||
srv.asyncReceive(std::declval<typename SRVT::async_call_ctx_t&>(), std::declval<const typename SRVT::timeout_t&>());
|
||||
|
||||
{ srv.receive(std::declval<const DURT&>()) } -> std::same_as<RMSGT>;
|
||||
// synchronous (blocking) operations
|
||||
srv.accept(std::declval<const typename SRVT::endpoint_t&>(), std::declval<const typename SRVT::timeout_t&>());
|
||||
|
||||
srv.close();
|
||||
};
|
||||
srv.connect(std::declval<const typename SRVT::endpoint_t&>(), std::declval<const typename SRVT::timeout_t&>());
|
||||
|
||||
srv.send(std::declval<const typename SRVT::send_msg_t&>(), std::declval<const typename SRVT::timeout_t&>());
|
||||
|
||||
{ srv.receive(std::declval<const typename SRVT::timeout_t&>()) } -> std::same_as<typename SRVT::recv_msg_t>;
|
||||
|
||||
srv.close();
|
||||
};
|
||||
|
||||
|
||||
/* NETWORK SESSION */
|
||||
@@ -140,6 +141,7 @@ template <typename SESST>
|
||||
concept adc_netsession_c =
|
||||
std::derived_from<SESST, std::enable_shared_from_this<SESST>> && requires(SESST sess, const SESST sess_const) {
|
||||
typename SESST::netsession_ident_t;
|
||||
typename SESST::netsession_ctx_t;
|
||||
|
||||
// netsession_ident_t ident() const
|
||||
{ sess_const.ident() } -> std::same_as<typename SESST::netsession_ident_t>;
|
||||
@@ -169,7 +171,8 @@ concept adc_netsession_proto_c =
|
||||
// flag - true if valid sequence was found, false - otherwise
|
||||
{
|
||||
proto.search(std::declval<const BUFFT&>())
|
||||
} -> std::same_as<std::tuple<std::ranges::iterator_t<BUFFT>, std::ranges::iterator_t<BUFFT>, bool>>;
|
||||
// } -> std::same_as<std::tuple<std::ranges::iterator_t<BUFFT>, std::ranges::iterator_t<BUFFT>, bool>>;
|
||||
} -> traits::adc_view_or_output_char_range;
|
||||
|
||||
|
||||
// construct netsession protocol representation of input user byte sequence
|
||||
|
||||
Reference in New Issue
Block a user