Skip to content

Commit

Permalink
Merge pull request #183 from redboltz/update_to_510
Browse files Browse the repository at this point in the history
Updated the version to 5.1.0.
  • Loading branch information
redboltz authored May 4, 2024
2 parents cde1662 + 791abb6 commit 21b89e6
Show file tree
Hide file tree
Showing 22 changed files with 3,395 additions and 8 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

= History

== 5.1.0
* Added tests. #180
* Added high level MQTT client APIs support. #178

== 5.0.0

=== breaking changes
Expand Down
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# http://www.boost.org/LICENSE_1_0.txt)

cmake_minimum_required (VERSION 3.13.0)
project(async_mqtt_iface VERSION 5.0.0)
project(async_mqtt_iface VERSION 5.1.0)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
Expand Down Expand Up @@ -115,7 +115,7 @@ if(DOXYGEN_FOUND)
COMMAND ${CMAKE_COMMAND} -E echo "FILE_PATTERNS = *.hpp" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
COMMAND ${CMAKE_COMMAND} -E echo "OUTPUT_DIRECTORY = doc" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NAME = async_mqtt" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NUMBER = 5.0.0" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
COMMAND ${CMAKE_COMMAND} -E echo "PROJECT_NUMBER = 5.1.0" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
COMMAND ${CMAKE_COMMAND} -E echo "RECURSIVE = YES" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
COMMAND ${CMAKE_COMMAND} -E echo "PREDEFINED = _DOXYGEN_ ASYNC_MQTT_USE_TLS ASYNC_MQTT_USE_WS" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
COMMAND ${CMAKE_COMMAND} -E echo "INPUT = ${CMAKE_CURRENT_SOURCE_DIR}/include/async_mqtt" >> ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Asynchronous MQTT communication library.

Version 5.0.0 [![Actions Status](https://github.com/redboltz/async_mqtt/workflows/CI/badge.svg)](https://github.com/redboltz/async_mqtt/actions)[![codecov](https://codecov.io/gh/redboltz/async_mqtt/branch/main/graph/badge.svg)](https://codecov.io/gh/redboltz/async_mqtt)
Version 5.1.0 [![Actions Status](https://github.com/redboltz/async_mqtt/workflows/CI/badge.svg)](https://github.com/redboltz/async_mqtt/actions)[![codecov](https://codecov.io/gh/redboltz/async_mqtt/branch/main/graph/badge.svg)](https://codecov.io/gh/redboltz/async_mqtt)

This is Boost.Asio oriented asynchronous MQTT communication library. You can use async_mqtt to develop not only your MQTT client application but also your server (e.g. broker).
Based on https://github.com/redboltz/mqtt_cpp experience, there are many improvements. See overview.
Expand Down Expand Up @@ -42,6 +42,10 @@ Document is https://github.com/redboltz/async_mqtt/blob/doc/README.adoc

I recommend using [Stackless Coroutine (`boost::asio::coroutine`)](https://www.boost.org/doc/html/boost_asio/overview/composition/coroutine.html) because it can avoid deep nested callbacks and higher performance than [`boost::asio::use_future`](https://www.boost.org/doc/html/boost_asio/overview/composition/futures.html). C++20 Coroutine is also a good choice. It requires C++20 support. It is more elegant than Stackless Coroutine but a little bit slower than Stackless coroutine.

## High level MQTT client APIs support (since 5.1.0)

See [document](https://redboltz.github.io/async_mqtt/doc/latest/tutorial/client.html) and [example](example/cl_cpp20coro_mqtt.cpp).

## Features

- Not only client but also server is supported.
Expand Down
139 changes: 139 additions & 0 deletions doc/api/classasync__mqtt_1_1basic__client-members.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.10.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>async_mqtt: Member List</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="doxygen-awesome.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">async_mqtt<span id="projectnumber">&#160;5.0.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.10.0 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function(){initNavTree('classasync__mqtt_1_1basic__client.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>

<div class="header">
<div class="headertitle"><div class="title">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt; Member List</div></div>
</div><!--header-->
<div class="contents">

<p>This is the complete list of members for <a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a>, including all inherited members.</p>
<table class="directory">
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#aa5a37f75664bb4dd8b883e464f2016e5">acquire_unique_packet_id</a>(CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#acaea92142dca0924af36e5acef91d8bb">acquire_unique_packet_id</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#afbc77b4e603db0c1141d3235c8fa8b35">acquire_unique_packet_id_wait_until</a>(CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#aae0fb6a264f5feac3172c935d63f8f2b">basic_client</a>(Args &amp;&amp;... args)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a9dd11900baa797fded499766bde8b81e">client</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">related</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a0bb29717d22dda60a005f97c3a24b853">client_st</a> typedef</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">related</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a4758d075939de30c77f3f4bdf0f7a4e1">close</a>(CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a13400c20164b4e0d2ed4d295cd6413d0">disconnect</a>(disconnect_packet packet, CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a7b2a774d16a96243e46d7dd9f8efc5c0">get_executor</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a958a6f26550d04d612c90ac28687276d">in_strand</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a0c4b8f45b124d877b1d5e37202432542">lowest_layer</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a899373f16e994c427de1cc1f55e2900d">lowest_layer</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a17f4c62b162f33c95f893e19cc7a045e">next_layer</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a327733ce5f15e48acbdd366cc9b51dae">next_layer</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#ab6bed9cb83ac66b7bcb8595941edae4c">publish</a>(publish_packet packet, CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#aad1963132aa1d0c6458bd6f38d9b7e48">recv</a>(CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a7020cadea9c167746dd248cc66eea67e">register_packet_id</a>(packet_id_t pid, CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a59d9f08b64a0b06a6d94b666fd51a9fa">register_packet_id</a>(packet_id_t pid)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a9e9309f80f102d442e5355adf3c1cc86">release_packet_id</a>(packet_id_t pid, CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a10dcc67eddbb1b31bed4d7831b70edbc">release_packet_id</a>(packet_id_t pid)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#ac04e97c4b491ccfe707158d889e0657b">set_auto_map_topic_alias_send</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a516a226a27334ed324df25a2a530d489">set_auto_replace_topic_alias_send</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#ad5ba02f153d9a4a592acc50f1367f799">set_bulk_write</a>(bool val)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#ae6de76e91012ea196666ca450d025560">set_pingresp_recv_timeout_ms</a>(std::size_t ms)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a64c2b201c643fabc568865933b681f80">start</a>(connect_packet packet, CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a444ec817894b27eb7793b388f54d4067">strand</a>() const</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a58b9fbfa4909f0cf0c91459a454de69d">strand</a>()</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="odd"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#ae74159d835dca15f87b760b53acb4d51">subscribe</a>(subscribe_packet packet, CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
<tr class="even"><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html#a0ff1b5b724340a3df4c9ce9fab7a4b90">unsubscribe</a>(unsubscribe_packet packet, CompletionToken &amp;&amp;token)</td><td class="entry"><a class="el" href="classasync__mqtt_1_1basic__client.html">async_mqtt::basic_client&lt; Version, Strand, NextLayer &gt;</a></td><td class="entry"><span class="mlabel">inline</span></td></tr>
</table></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.10.0 </li>
</ul>
</div>
</body>
</html>
Loading

0 comments on commit 21b89e6

Please sign in to comment.