2020-01-08 22:43:13 +01:00
<!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" >
< head >
< meta http-equiv = "Content-Type" content = "text/xhtml;charset=UTF-8" / >
< meta http-equiv = "X-UA-Compatible" content = "IE=9" / >
2021-08-23 23:48:11 +02:00
< meta name = "generator" content = "Doxygen 1.9.1" / >
2020-01-08 22:43:13 +01:00
< meta name = "viewport" content = "width=device-width, initial-scale=1" / >
< title > mastodonpp: example02_streaming.cpp< / 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 >
< 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" / >
< / 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 style = "height: 56px;" >
< td id = "projectalign" style = "padding-left: 0.5em;" >
< div id = "projectname" > mastodonpp
2020-11-27 15:05:17 +01:00
  < span id = "projectnumber" > 0.5.7< / span >
2020-01-08 22:43:13 +01:00
< / div >
2020-11-13 14:25:43 +01:00
< div id = "projectbrief" > C++ wrapper for the Mastodon and Pleroma APIs.< / div >
2020-01-08 22:43:13 +01:00
< / td >
< / tr >
< / tbody >
< / table >
< / div >
<!-- end header part -->
2021-08-23 23:48:11 +02:00
<!-- Generated by Doxygen 1.9.1 -->
2020-01-08 22:43:13 +01:00
< script type = "text/javascript" >
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
2021-08-23 23:48:11 +02:00
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
2020-01-08 22:43:13 +01:00
/* @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:cf05388f2679ee054f2beb29a391d25f4e673ac3& dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */< / script >
< div id = "main-nav" > < / div >
< / div > <!-- top -->
<!-- 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" >
< iframe src = "javascript:void(0)" frameborder = "0"
name="MSearchResults" id="MSearchResults">
< / iframe >
< / div >
< div class = "header" >
< div class = "headertitle" >
< div class = "title" > example02_streaming.cpp< / div > < / div >
< / div > <!-- header -->
< div class = "contents" >
2021-08-23 23:48:11 +02:00
< div class = "fragment" > < div class = "line" > < span class = "comment" > /* This file is part of mastodonpp.< / span > < / div >
< div class = "line" > < span class = "comment" > * Copyright © 2020 tastytea < tastytea@tastytea.de> < / span > < / div >
< div class = "line" > < span class = "comment" > *< / span > < / div >
< div class = "line" > < span class = "comment" > * Permission to use, copy, modify, and/or distribute this software for any< / span > < / div >
< div class = "line" > < span class = "comment" > * purpose with or without fee is hereby granted.< / span > < / div >
< div class = "line" > < span class = "comment" > *< / span > < / div >
< div class = "line" > < span class = "comment" > * THE SOFTWARE IS PROVIDED " AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES< / span > < / div >
< div class = "line" > < span class = "comment" > * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF< / span > < / div >
< div class = "line" > < span class = "comment" > * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY< / span > < / div >
< div class = "line" > < span class = "comment" > * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES< / span > < / div >
< div class = "line" > < span class = "comment" > * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION< / span > < / div >
< div class = "line" > < span class = "comment" > * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN< / span > < / div >
< div class = "line" > < span class = "comment" > * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.< / span > < / div >
< div class = "line" > < span class = "comment" > */< / span > < / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Print new public events (/api/v1/streaming/public).< / span > < / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "preprocessor" > #if __has_include(" mastodonpp.hpp" < / span > )< / div >
< div class = "line" > < span class = "preprocessor" > # include " mastodonpp.hpp" < / span > < span class = "comment" > // We' re building mastodonpp.< / span > < / div >
< div class = "line" > < span class = "preprocessor" > #else< / span > < / div >
< div class = "line" > < span class = "preprocessor" > # include < mastodonpp/mastodonpp.hpp> < / span > < span class = "comment" > // We' re building outside mastodonpp.< / span > < / div >
< div class = "line" > < span class = "preprocessor" > #endif< / span > < / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "preprocessor" > #include < chrono> < / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include < iostream> < / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include < string> < / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include < string_view> < / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include < thread> < / span > < / div >
< div class = "line" > < span class = "preprocessor" > #include < vector> < / span > < / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "keyword" > namespace < / span > masto = < a class = "code" href = "namespacemastodonpp.html" > mastodonpp< / a > ;< / div >
< div class = "line" > < span class = "keyword" > using namespace < / span > std::chrono_literals;< / div >
< div class = "line" > < span class = "keyword" > using< / span > std::cerr;< / div >
< div class = "line" > < span class = "keyword" > using< / span > std::cout;< / div >
< div class = "line" > < span class = "keyword" > using< / span > std::endl;< / div >
< div class = "line" > < span class = "keyword" > using< / span > std::string_view;< / div >
< div class = "line" > < span class = "keyword" > using< / span > std::thread;< / div >
< div class = "line" > < span class = "keyword" > using< / span > std::to_string;< / div >
< div class = "line" > < span class = "keyword" > using< / span > std::vector;< / div >
< div class = "line" > < span class = "keyword" > using< / span > std::this_thread::sleep_for;< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "keywordtype" > int< / span > main(< span class = "keywordtype" > int< / span > argc, < span class = "keywordtype" > char< / span > *argv[])< / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "keyword" > const< / span > vector< string_view> args(argv, argv + argc);< / div >
< div class = "line" > < span class = "keywordflow" > if< / span > (args.size() < = 1)< / div >
< div class = "line" > {< / div >
< div class = "line" > cerr < < < span class = "stringliteral" > " Usage: " < / span > < < args[0] < < < span class = "stringliteral" > " < instance hostname> \n" < / span > ;< / div >
< div class = "line" > < span class = "keywordflow" > return< / span > 1;< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "keywordflow" > try< / span > < / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "comment" > // Initialize an Instance.< / span > < / div >
< div class = "line" > masto::Instance instance{args[1], {}};< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Initialize a Connection.< / span > < / div >
< div class = "line" > masto::Connection connection{instance};< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Find out if the streaming service is fine.< / span > < / div >
< div class = "line" > < span class = "keyword" > auto< / span > answer{connection.get(masto::API::v1::streaming_health)};< / div >
< div class = "line" > < span class = "keywordflow" > if< / span > (answer & & answer.body == < span class = "stringliteral" > " OK" < / span > )< / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "comment" > // Make a thread, get all public events.< / span > < / div >
< div class = "line" > < span class = "comment" > // clang-format off< / span > < / div >
< div class = "line" > thread stream_thread{[& ]< / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "comment" > // clang-format on< / span > < / div >
< div class = "line" > answer = connection.get(masto::API::v1::streaming_public);< / div >
< div class = "line" > }};< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Print new events every 2 seconds, for 10 seconds.< / span > < / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > auto< / span > counter{0}; counter < 5; ++counter)< / div >
< div class = "line" > {< / div >
< div class = "line" > sleep_for(2s);< / div >
< div class = "line" > < span class = "keywordflow" > for< / span > (< span class = "keyword" > const< / span > < span class = "keyword" > auto< / span > & event : connection.get_new_events())< / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "comment" > // Print type of event and the beginning of the data.< / span > < / div >
< div class = "line" > cout < < < span class = "keyword" > event< / span > .type < < < span class = "stringliteral" > " : " < / span > < < < span class = "keyword" > event< / span > .data.substr(0, 70)< / div >
< div class = "line" > < < < span class = "stringliteral" > " …" < / span > < < endl;< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "comment" > // Cancel the stream, …< / span > < / div >
< div class = "line" > connection.cancel_stream();< / div >
< div class = "line" > < span class = "comment" > // … and wait for the thread.< / span > < / div >
< div class = "line" > stream_thread.join();< / div >
< div class = "line" > }< / div >
< div class = "line" > < span class = "keywordflow" > else< / span > < / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "keywordflow" > if< / span > (answer.curl_error_code == 0)< / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "comment" > // If it is no libcurl error, it must be an HTTP error.< / span > < / div >
< div class = "line" > cerr < < < span class = "stringliteral" > " HTTP status: " < / span > < < answer.http_status < < endl;< / div >
< div class = "line" > }< / div >
< div class = "line" > < span class = "keywordflow" > else< / span > < / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "comment" > // Network errors like “Couldn' t resolve host.”.< / span > < / div >
< div class = "line" > cerr < < < span class = "stringliteral" > " libcurl error " < / span > < < to_string(answer.curl_error_code)< / div >
< div class = "line" > < < < span class = "stringliteral" > " : " < / span > < < answer.error_message < < endl;< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > }< / div >
< div class = "line" > < span class = "keywordflow" > catch< / span > (< span class = "keyword" > const< / span > masto::CURLException & e)< / div >
< div class = "line" > {< / div >
< div class = "line" > < span class = "comment" > // Only libcurl errors that are not network errors will be thrown.< / span > < / div >
< div class = "line" > < span class = "comment" > // There went probably something wrong with the initialization.< / span > < / div >
< div class = "line" > cerr < < e.what() < < endl;< / div >
< div class = "line" > }< / div >
< div class = "line" > < / div >
< div class = "line" > < span class = "keywordflow" > return< / span > 0;< / div >
< div class = "line" > }< / div >
< div class = "ttc" id = "anamespacemastodonpp_html" > < div class = "ttname" > < a href = "namespacemastodonpp.html" > mastodonpp< / a > < / div > < div class = "ttdoc" > C++ wrapper for the Mastodon API.< / div > < div class = "ttdef" > < b > Definition:< / b > api.hpp:25< / div > < / div >
< / div > <!-- fragment --> < / div > <!-- contents -->
2020-01-08 22:43:13 +01:00
<!-- start footer part -->
< hr class = "footer" / > < address class = "footer" > < small >
2021-08-23 23:48:11 +02:00
Generated by  < a href = "https://www.doxygen.org/index.html" > < img class = "footer" src = "doxygen.svg" width = "104" height = "31" alt = "doxygen" / > < / a > 1.9.1
2020-01-08 22:43:13 +01:00
< / small > < / address >
< / body >
< / html >