This commit is contained in:
Timur A. Fatkhullin 2024-06-12 01:01:40 +03:00
parent 8b2e8fcaaa
commit 986758430e

View File

@ -37,9 +37,8 @@ public:
virtual ~AdcNetServiceASIOStream() = default;
template <typename TimeoutT, typename CompletionTokenT>
template <typename TimeoutT, asio::completion_token_for<void(std::error_code)> CompletionTokenT>
auto asynSend(const NetMessageT& msg, const TimeoutT& timeout, CompletionTokenT&& token)
requires std::derived_from<socket_t, asio::basic_stream_socket<typename socket_t::protocol_type>>
{
using namespace asio::experimental::awaitable_operators;
@ -47,32 +46,41 @@ public:
std::error_code ec;
co_await (asio::async_write(_socket, msg.bytes(), asio::use_awaitable) && watchdog(deadline, ec));
co_await (asyncSendImpl(msg) && watchdog(deadline, ec));
std::forward<CompletionTokenT>(token)(ec);
}
template <typename CompletionTokenT>
auto asynSend(const NetMessageT& msg, CompletionTokenT&& token)
requires std::derived_from<socket_t, asio::basic_datagram_socket<typename socket_t::protocol_type>>
template <typename TimeoutT, typename CompletionTokenT>
auto asyncReceive(const TimeoutT& timeout, CompletionTokenT&& token)
{
}
template <typename CompletionTokenT>
auto asynSend(const NetMessageT& msg, CompletionTokenT&& token)
requires std::derived_from<socket_t, asio::basic_seq_packet_socket<typename socket_t::protocol_type>>
{
}
protected:
socket_t& _socket;
asio::streambuf _streamBuffer;
asio::awaitable<void> asyncSendImpl(const NetMessageT& msg)
{
// for (const auto& buff : msg.bytesView()) {
if constexpr (std::derived_from<socket_t, asio::basic_stream_socket<typename socket_t::protocol_type>>) {
// asio::async_write(_socket, buff, asio::use_awaitable);
co_await asio::async_write(_socket, msg.bytesView(), asio::use_awaitable);
} else if constexpr (std::derived_from<socket_t,
asio::basic_datagram_socket<typename socket_t::protocol_type>>) {
co_await _socket.async_send(msg.bytesView(), asio::use_awaitable);
} else if constexpr (std::derived_from<socket_t,
asio::basic_seq_packet_socket<typename socket_t::protocol_type>>) {
co_await _socket.async_send(msg.bytesView(), asio::use_awaitable);
} else {
static_assert(false, "UNKNOWN ASIO-LIBRARY SOCKET TYPE!!!");
}
// }
}
template <typename TimepointT>
asio::awaitable<void> watchdog(TimepointT& deadline, std::error_code& ec)
{