diff --git a/README.md b/README.md index 19370a5..0409ae9 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ The following example illustrates a simple scenario of configuring a Client and #include #include +#include #include #include @@ -73,7 +74,7 @@ int main() { async_mqtt5::retain_e::no, async_mqtt5::publish_props {}, [&c](async_mqtt5::error_code ec) { std::cout << ec.message() << std::endl; - c.cancel(); // close the client + c.async_disconnect(asio::detached); // disconnect and close the client } ); diff --git a/example/openssl-tls.cpp b/example/openssl-tls.cpp index 17890f3..57036c8 100644 --- a/example/openssl-tls.cpp +++ b/example/openssl-tls.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -13,6 +14,8 @@ namespace asio = boost::asio; namespace async_mqtt5 { +constexpr auto use_nothrow_awaitable = asio::as_tuple(asio::use_awaitable); + template struct tls_handshake_type> { static constexpr auto client = asio::ssl::stream_base::client; @@ -79,7 +82,7 @@ void publish_qos0_openssl_tls() { retain_e::no, publish_props{}, [&c](error_code ec) { std::cout << "error_code: " << ec.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -113,7 +116,7 @@ void publish_qos1_openssl_tls() { [&c](error_code ec, reason_code rc, puback_props) { std::cout << "error_code: " << ec.message() << std::endl; std::cout << "reason_code: " << rc.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -148,7 +151,7 @@ void publish_qos2_openssl_tls() { [&c](error_code ec, reason_code rc, pubcomp_props) { std::cout << "error_code: " << ec.message() << std::endl; std::cout << "reason_code: " << rc.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -213,7 +216,7 @@ void subscribe_and_receive_openssl_tls(int num_receive) { std::cout << "payload: " << payload << std::endl; if (i == num_receive - 1) - c.cancel(); + c.async_disconnect(asio::detached); } ); } @@ -253,19 +256,19 @@ void test_coro() { } }); - auto [codes, props] = co_await c.async_subscribe( - topics, subscribe_props {}, asio::use_awaitable + auto [ec1, codes, props] = co_await c.async_subscribe( + topics, subscribe_props {}, use_nothrow_awaitable ); std::cout << "subscribe reason_code: " << codes[0].message() << std::endl; - auto [topic, payload, rec_props] = co_await c.async_receive(asio::use_awaitable); + auto [ec2, topic, payload, rec_props] = co_await c.async_receive(use_nothrow_awaitable); std::cout << "topic: " << topic << std::endl; std::cout << "payload: " << payload << std::endl; asio::steady_timer timer(ioc); timer.expires_from_now(std::chrono::seconds(1)); - co_await timer.async_wait(asio::use_awaitable); - c.cancel(); + co_await timer.async_wait(use_nothrow_awaitable); + co_await c.async_disconnect(use_nothrow_awaitable); co_return; }, asio::detached); @@ -277,6 +280,6 @@ void run_openssl_tls_examples() { publish_qos0_openssl_tls(); publish_qos1_openssl_tls(); publish_qos2_openssl_tls(); - subscribe_and_receive_openssl_tls(1); + subscribe_and_receive_openssl_tls(2); test_coro(); } diff --git a/example/tcp.cpp b/example/tcp.cpp index 8ec951d..b355bfd 100644 --- a/example/tcp.cpp +++ b/example/tcp.cpp @@ -27,7 +27,7 @@ void publish_qos0_tcp() { retain_e::no, publish_props{}, [&c](error_code ec) { std::cout << "error_code: " << ec.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -55,7 +55,7 @@ void publish_qos1_tcp() { [&c](error_code ec, reason_code rc, puback_props) { std::cout << "error_code: " << ec.message() << std::endl; std::cout << "reason_code: " << rc.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -82,7 +82,7 @@ void publish_qos2_tcp() { [&c](error_code ec, reason_code rc, pubcomp_props) { std::cout << "error_code: " << ec.message() << std::endl; std::cout << "reason_code: " << rc.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -129,7 +129,7 @@ void subscribe_and_receive_tcp(int num_receive) { std::cout << "payload: " << payload << std::endl; if (i == num_receive - 1) - c.cancel(); + c.async_disconnect(asio::detached); } ); } @@ -142,5 +142,5 @@ void run_tcp_examples() { publish_qos0_tcp(); publish_qos1_tcp(); publish_qos2_tcp(); - subscribe_and_receive_tcp(1); + subscribe_and_receive_tcp(2); } diff --git a/example/websocket-tcp.cpp b/example/websocket-tcp.cpp index 62d051b..e294d4a 100644 --- a/example/websocket-tcp.cpp +++ b/example/websocket-tcp.cpp @@ -32,7 +32,7 @@ void publish_qos0_websocket_tcp() { retain_e::no, publish_props{}, [&c](error_code ec) { std::cout << "error_code: " << ec.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -63,7 +63,7 @@ void publish_qos1_websocket_tcp() { [&c](error_code ec, reason_code rc, puback_props) { std::cout << "error_code: " << ec.message() << std::endl; std::cout << "reason_code: " << rc.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -94,7 +94,7 @@ void publish_qos2_websocket_tcp() { [&c](error_code ec, reason_code rc, pubcomp_props) { std::cout << "error_code: " << ec.message() << std::endl; std::cout << "reason_code: " << rc.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -154,7 +154,7 @@ void subscribe_and_receive_websocket_tcp(int num_receive) { std::cout << "payload: " << payload << std::endl; if (i == num_receive - 1) - c.cancel(); + c.async_disconnect(asio::detached); } ); } @@ -168,5 +168,5 @@ void run_websocket_tcp_examples() { publish_qos0_websocket_tcp(); publish_qos1_websocket_tcp(); publish_qos2_websocket_tcp(); - subscribe_and_receive_websocket_tcp(1); + subscribe_and_receive_websocket_tcp(2); } diff --git a/example/websocket-tls.cpp b/example/websocket-tls.cpp index 8fb806d..0e3bcdc 100644 --- a/example/websocket-tls.cpp +++ b/example/websocket-tls.cpp @@ -94,7 +94,7 @@ void publish_qos0_websocket_tls() { retain_e::no, publish_props{}, [&c](error_code ec) { std::cout << "error_code: " << ec.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -130,7 +130,7 @@ void publish_qos1_websocket_tls() { [&c](error_code ec, reason_code rc, puback_props) { std::cout << "error_code: " << ec.message() << std::endl; std::cout << "reason_code: " << rc.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -166,7 +166,7 @@ void publish_qos2_websocket_tls() { [&c](error_code ec, reason_code rc, pubcomp_props) { std::cout << "error_code: " << ec.message() << std::endl; std::cout << "reason_code: " << rc.message() << std::endl; - c.cancel(); + c.async_disconnect(asio::detached); } ); @@ -231,7 +231,7 @@ void subscribe_and_receive_websocket_tls(int num_receive) { std::cout << "payload: " << payload << std::endl; if (i == num_receive - 1) - c.cancel(); + c.async_disconnect(asio::detached); } ); } @@ -245,5 +245,5 @@ void run_websocket_tls_examples() { publish_qos0_websocket_tls(); publish_qos1_websocket_tls(); publish_qos2_websocket_tls(); - subscribe_and_receive_websocket_tls(1); + subscribe_and_receive_websocket_tls(2); } diff --git a/include/async_mqtt5/impl/unsubscribe_op.hpp b/include/async_mqtt5/impl/unsubscribe_op.hpp index 44e9edb..3ccecbe 100644 --- a/include/async_mqtt5/impl/unsubscribe_op.hpp +++ b/include/async_mqtt5/impl/unsubscribe_op.hpp @@ -169,7 +169,7 @@ private: void complete_post(error_code ec, size_t num_topics) { _handler.complete_post( - ec, std::vector { num_topics, reason_codes::empty }, suback_props {} + ec, std::vector { num_topics, reason_codes::empty }, unsuback_props {} ); }