diff --git a/net/adc_netservice_asio.h b/net/adc_netservice_asio.h index 1820323..c611b8e 100644 --- a/net/adc_netservice_asio.h +++ b/net/adc_netservice_asio.h @@ -37,9 +37,8 @@ public: virtual ~AdcNetServiceASIOStream() = default; - template + template CompletionTokenT> auto asynSend(const NetMessageT& msg, const TimeoutT& timeout, CompletionTokenT&& token) - requires std::derived_from> { 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(token)(ec); } - template - auto asynSend(const NetMessageT& msg, CompletionTokenT&& token) - requires std::derived_from> + template + auto asyncReceive(const TimeoutT& timeout, CompletionTokenT&& token) { } - template - auto asynSend(const NetMessageT& msg, CompletionTokenT&& token) - requires std::derived_from> - { - } - - - protected: socket_t& _socket; asio::streambuf _streamBuffer; + asio::awaitable asyncSendImpl(const NetMessageT& msg) + { + // for (const auto& buff : msg.bytesView()) { + if constexpr (std::derived_from>) { + // 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>) { + co_await _socket.async_send(msg.bytesView(), asio::use_awaitable); + } else if constexpr (std::derived_from>) { + co_await _socket.async_send(msg.bytesView(), asio::use_awaitable); + } else { + static_assert(false, "UNKNOWN ASIO-LIBRARY SOCKET TYPE!!!"); + } + // } + } + template asio::awaitable watchdog(TimepointT& deadline, std::error_code& ec) {