{"id":1661,"date":"2019-06-07T07:30:04","date_gmt":"2019-06-07T12:30:04","guid":{"rendered":"http:\/\/www.jaimerios.com\/?p=1661"},"modified":"2025-12-03T20:24:33","modified_gmt":"2025-12-03T20:24:33","slug":"connecting-with-c","status":"publish","type":"post","link":"https:\/\/jaimerios.com\/?p=1661","title":{"rendered":"Connecting with C++"},"content":{"rendered":"\n<p><style>\npre.cpp {<br \/>\n    font-family: Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace;<br \/>\n    font-size: small;<br \/>\n}<br \/>\npre.ebash {<br \/>\n  background-color: black;<br \/>\n  color: white;<br \/>\n  font-size: 11 ;<br \/>\n  font-family: Consolas,Monaco,Lucida Console,Liberation Mono,DejaVu Sans Mono,Bitstream Vera Sans Mono,Courier New, monospace;<br \/>\n  width: 100%;<br \/>\n  display: inline-block;<br \/>\n}<br \/>\n<\/style><\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><strong>Previously &#8230; <\/strong><\/p>\n\n\n\n<p>We connected to our local JSON server using a console app, writen in Swift: <a href=\"http:\/\/www.jaimerios.com\/?p=1638\" target=\"_blank\" rel=\"noopener noreferrer\">Making a connection using Swift<\/a><\/p>\n\n\n\n<p>In this article, we are going to do the same thing, this time using C++.<\/p>\n\n\n\n<p><strong>Libraries<\/strong><\/p>\n\n\n\n<p>Swift comes with a large library of functionality, including classes to connect to a REST server.<\/p>\n\n\n\n<p>The standard C++ library comes with a lot of functionality, but it does not have a library for connecting to a web server.<\/p>\n\n\n\n<p>For that, we are going to use the <a href=\"https:\/\/github.com\/Microsoft\/cpprestsdk\" target=\"_blank\" rel=\"noopener noreferrer\">CPP REST SDK by Microsoft<\/a>, formally known as Casablanca.<\/p>\n\n\n\n<p>Since this library handles connections to a REST server, in an asynchronous fashion, that is similar to our Swift example, it was natural to choose this library.<\/p>\n\n\n\n<p><strong>Set up<\/strong><\/p>\n\n\n\n<p>Open up your favorite terminal app.<\/p>\n\n\n\n<p>We going to install cpprestsdk using Homebrew:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Bash<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>$brew install cpprestsdk<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #9CDCFE\">$brew<\/span><span style=\"color: #D4D4D4\"> install cpprestsdk<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The CPP REST SDK reliese on the Boost library and the OpenSLL library to do it&#8217;s work.<\/p>\n\n\n\n<p>Boost is a collection of C++ header files, some of which have been adopted into the C++ standard.<\/p>\n\n\n\n<p>To install the Boost libraries using Homebrew, type:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Bash<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>$brew install boost<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #9CDCFE\">$brew<\/span><span style=\"color: #D4D4D4\"> install boost<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>If you prefer to download the Boost library from source and build it yourself, you can do that; if you would like an example of how to do that, I&#8217;ve created a build script for macOS: <a href=\"https:\/\/gist.github.com\/AhiyaHiya\/5c267b61e67e5c5637e4a209b1cd2ee8\">Build Boost library<\/a>.<\/p>\n\n\n\n<p>The other library you are going to need is OpenSSL. Using Homebrew, the command is:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Bash<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>$brew install openssl<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #9CDCFE\">$brew<\/span><span style=\"color: #D4D4D4\"> install openssl<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Like Boost, I created a shell script you can use to build and install the library: <a href=\"https:\/\/gist.github.com\/AhiyaHiya\/5c267b61e67e5c5637e4a209b1cd2ee8\">Build OpenSSL library<\/a>.<\/p>\n\n\n\n<p>With the libraries installed, or built, you can proceed to create a console app to exercise connecting to our REST server.<\/p>\n\n\n\n<p><strong>Developer Side Note<\/strong><\/p>\n\n\n\n<p>There are a lot of ways to get a library into your project.<\/p>\n\n\n\n<p>One way, is to simply download the source code, then &#8220;make&#8221; and &#8220;make install&#8221; the library at the command line.<\/p>\n\n\n\n<p>Another way, is to create a bash shell script, to do the same thing, but this time, the process is automated.<\/p>\n\n\n\n<p>Another, maybe easier way, is to use a Package Manager. There are several package managers available, which make installing a library easier, than if you were to do it by hand.<\/p>\n\n\n\n<p>In this article, I reference <a href=\"https:\/\/brew.sh\" target=\"_blank\" rel=\"noopener noreferrer\">Homebrew<\/a>, which is a macOS\/Linux Package Manager.<\/p>\n\n\n\n<p>Though this is a very popular package manager, it does not have support for Microsoft Windows.<\/p>\n\n\n\n<p>Microsoft has announced, a <a href=\"https:\/\/docs.microsoft.com\/en-us\/cpp\/build\/vcpkg?view=vs-2019\" target=\"_blank\" rel=\"noopener noreferrer\">Cross-Platform package manager<\/a>, for C++, which will run on Windows, Linux and macOS, but, since I have not evaluated their solution, it was not intruduced as a means in this article.<\/p>\n\n\n\n<p>Probably, in later articles, I may use vcpkg, if it delivers on all of it&#8217;s promises.<\/p>\n\n\n\n<p>But for now, we will use <a href=\"https:\/\/brew.sh\" target=\"_blank\" rel=\"noopener noreferrer\">Homebrew<\/a>.<\/p>\n\n\n\n<p><strong>Creating the console app in Xcode<\/strong><\/p>\n\n\n\n<p>Launch Xcode, then create a new project using<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Select &#8220;Create a new Xcode project&#8221; from the &#8220;Welcome to Xcode&#8221; window, OR<\/li>\n\n\n\n<li>File -&gt; New -&gt; Project menu item, OR<\/li>\n\n\n\n<li>\u2318 + Shift + N<\/li>\n<\/ul>\n\n\n\n<p>Select &#8220;Command Line Tool&#8221;<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"744\" height=\"574\" src=\"https:\/\/jaimerios.com\/wp-content\/uploads\/2019\/05\/Xcode_create_console_app.png\" alt=\"\" class=\"wp-image-1641\" srcset=\"https:\/\/jaimerios.com\/wp-content\/uploads\/2019\/05\/Xcode_create_console_app.png 744w, https:\/\/jaimerios.com\/wp-content\/uploads\/2019\/05\/Xcode_create_console_app-300x231.png 300w\" sizes=\"auto, (max-width: 744px) 100vw, 744px\" \/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>Enter in the name for your app. You can leave the organization name to the defaults. Make sure C++ is selected as the language.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/jaimerios.com\/wp-content\/uploads\/2019\/06\/Xcode_console_app_step_2_003.png\" alt=\"\" class=\"wp-image-1641\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p>We are presented with a basic console app project; the file that you are interested in is main.cpp.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/jaimerios.com\/wp-content\/uploads\/2019\/06\/Xcode_initial_project_file_003.png\" alt=\"\" class=\"wp-image-1641\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>&nbsp;<\/p>\n\n\n\n<p><strong>Another Developer Side Note<\/strong><\/p>\n\n\n\n<p>There are many ways to create a console app on macOS; you are not limited to Xcode.<\/p>\n\n\n\n<p>For example, you can use <a href=\"https:\/\/code.visualstudio.com\/docs\/setup\/mac\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a>, install the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode.cpptools\" target=\"_blank\" rel=\"noopener noreferrer\">C++ extension<\/a> and the <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=danielpinto8zz6.c-cpp-project-generator\" target=\"_blank\" rel=\"noopener noreferrer\">C\/C++ Project Generator<\/a> to create a C++ project and debug your code.<\/p>\n\n\n\n<p>However, installing and setting up <a href=\"https:\/\/code.visualstudio.com\/docs\/setup\/mac\" target=\"_blank\" rel=\"noopener noreferrer\">Visual Studio Code<\/a> is outside the scope of this article, so, Xcode it is for this article.<\/p>\n\n\n\n<p><strong>Connecting to REST server<\/strong><\/p>\n\n\n\n<p>To connect to the local JSON server, we are going to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a HTTP client<\/li>\n\n\n\n<li>Create a response handler<\/li>\n\n\n\n<li>Assign a lambda to handle the HTTP response<\/li>\n\n\n\n<li>Create a nasty loop<\/li>\n<\/ul>\n\n\n\n<p>So here&#8217;s the code to accomplish these steps:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">C++<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ The C++ STD Library headers\n#include &lt;iostream>\n#include &lt;string>\n\n\/\/ The Microsoft Headers\n#include &lt;cpprest\/filestream.h>\n#include &lt;cpprest\/http_client.h>\n\nusing namespace std::string_literals;\n\n\/\/ The address to our server\nconst auto server_url = \"http:\/\/localhost:3000\"s;\n\n\/\/ Function that will attempt to connect to a REST endpoint\nvoid connect_to_server()\n{\n  \/\/ The connection to our server\n  auto client = web::http::client::http_client(server_url);\n  auto response = client.request(web::http::methods::GET, U(\"\/events\"));\n  \n  auto done = false;\n  \/\/ Assign a lambda to handle the response from the web server\n  response.then(&#91;&amp;&#93;(web::http::http_response response){\n    std::cout &lt;&lt; \"Response lambda called\\n\";\n    done = true;\n  });\n  \n  \/\/ The nasty loop\n  while (!done) {\n    auto x = 0;\n    ++x;\n  }\n}\n\nint main(int argc, const char* argv[])\n{\n  std::cout &lt;&lt; \"Application is starting\\n\";\n\n  connect_to_server();\n  \n  std::cout &lt;&lt; \"Application will exit now\\n\";\n  return 0;\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">\/\/ The C++ STD Library headers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">#include<\/span><span style=\"color: #569CD6\"> <\/span><span style=\"color: #CE9178\">&lt;iostream&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">#include<\/span><span style=\"color: #569CD6\"> <\/span><span style=\"color: #CE9178\">&lt;string&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ The Microsoft Headers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">#include<\/span><span style=\"color: #569CD6\"> <\/span><span style=\"color: #CE9178\">&lt;cpprest\/filestream.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">#include<\/span><span style=\"color: #569CD6\"> <\/span><span style=\"color: #CE9178\">&lt;cpprest\/http_client.h&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">using<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">namespace<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">string_literals<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ The address to our server<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> server_url = <\/span><span style=\"color: #CE9178\">&quot;http:\/\/localhost:3000&quot;<\/span><span style=\"color: #569CD6\">s<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ Function that will attempt to connect to a REST endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">connect_to_server<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ The connection to our server<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> client = <\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">client<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">http_client<\/span><span style=\"color: #D4D4D4\">(server_url);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> response = <\/span><span style=\"color: #9CDCFE\">client<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">request<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">methods<\/span><span style=\"color: #D4D4D4\">::GET, <\/span><span style=\"color: #DCDCAA\">U<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;\/events&quot;<\/span><span style=\"color: #D4D4D4\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> done = <\/span><span style=\"color: #569CD6\">false<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ Assign a lambda to handle the response from the web server<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">response<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(&#91;&amp;&#93;(<\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http_response<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">response<\/span><span style=\"color: #D4D4D4\">){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Response lambda called<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    done = <\/span><span style=\"color: #569CD6\">true<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  });<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ The nasty loop<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #C586C0\">while<\/span><span style=\"color: #D4D4D4\"> (!done) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> x = <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    ++x;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">int<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">main<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #569CD6\">int<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">argc<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">char*<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">argv<\/span><span style=\"color: #D4D4D4\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Application is starting<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #DCDCAA\">connect_to_server<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Application will exit now<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>You&#8217;ll notice that there is a loop, labeled &#8220;The nasty loop&#8221;. That was put there to give the CPP Rest SDK enough time to connect to the HTTP server.<\/p>\n\n\n\n<p>If you want to see the code in action, first, you have to make sure your json-server is running.<\/p>\n\n\n\n<p>The json-server installation, and the sample db file was covered in the article, <a href=\"http:\/\/www.jaimerios.com\/?p=1631\" target=\"_blank\" rel=\"noopener noreferrer\">Working with REST<\/a><\/p>\n\n\n\n<p>Run through those steps, then open up your favorite terminal app.<\/p>\n\n\n\n<p>cd to the directory where your JSON file is; invoke the following command to start the server:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">Bash<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>$json-server --watch db.json<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #9CDCFE\">$json<\/span><span style=\"color: #D4D4D4\">-server --watch db.json<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Now, you can step through the application code to see that it connects to the local server.<\/p>\n\n\n\n<p><strong>Doing more<\/strong><\/p>\n\n\n\n<p>Now that we can connect to our local REST server, let&#8217;s try to download some JSON data.<\/p>\n\n\n\n<p>To do this, we will:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Create a file_stream, to capture the response from the HTTP REST server<\/li>\n\n\n\n<li>Create a lambda to handle the response from the server<\/li>\n\n\n\n<li>Create a lambda to close the file_stream once we are done processing<\/li>\n<\/ul>\n\n\n\n<p>The code, now looks like:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">C++<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Function that will attempt to connect to a REST endpoint\nvoid connect_to_server()\n{\n  std::cout &lt;&lt; \"Function connect_to_server called\" &lt;&lt; std::endl;\n  \n  \/\/ The connection to our server\n  auto client = web::http::client::http_client(server_url);\n  \n  \/\/ The stream to capture our incoming JSON data\n  auto json_data = std::make_shared&lt; concurrency::streams::ostream >();\n  \n  \/\/\n  \/\/ You'll notice that the naming of the following lambda's are verbs,\n  \/\/ to describe what they intend on doing\n  \/\/\n  \n  \/\/ Lambda to capture the incoming stream and return the client request\n  auto create_request = &#91;json_data, &amp;client&#93;(concurrency::streams::ostream incoming_data) {\n    std::cout &lt;&lt; \"Lambda request called\" &lt;&lt; std::endl;\n    *json_data = incoming_data;\n    \n    \/\/ Return a request object, appending the events path component\n    return client.request(web::http::methods::GET, U(\"\/events\"));\n  };\n  \n  \/\/ Lambda to handle the HTTP response, directing the data to our json_data\n  auto handle_response = &#91;json_data&#93;(web::http::http_response response) {\n    std::cout &lt;&lt; \"Lambda handle_response called\" &lt;&lt; std::endl;\n    std::cout &lt;&lt; \"Response status code: \" &lt;&lt; response.status_code() &lt;&lt; std::endl;\n    return response.body().read_to_end(json_data->streambuf());\n  };\n  \n  \/\/ Lambda to close the json_data once the stream is done\n  auto close_down = &#91;json_data&#93;(size_t) {\n    std::cout &lt;&lt; \"Lambda close_down called\" &lt;&lt; std::endl;\n    return json_data->close();\n  };\n  \n  \/\/ The bool to make our code wait\n  auto done = false;\n  \/\/ The lambda that breaks the code out of the nasty loop\n  auto signal_done = &#91;&amp;done&#93;() {\n    std::cout &lt;&lt; \"Lambda signal_done called\" &lt;&lt; std::endl;\n    done = true;\n  };\n  \n  \/\/ Now, let's put them all together\n  auto output_result_file = concurrency::streams::fstream::open_ostream(U(\"results.html\"));\n  output_result_file \/\/ This step opens the output file ...\n    .then(create_request)\n    .then(handle_response)\n    .then(close_down)\n    .then(signal_done);\n  \n  \/\/ You should see a pattern here how the process flow works\n  \/\/ with cpprestsdk\n  \n  \/\/ The nasty loop\n  auto x = 0;\n  while(!done){\n    ++x;\n  }\n  \n  std::cout &lt;&lt; \"Function connect_to_server done\" &lt;&lt; std::endl;\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">\/\/ Function that will attempt to connect to a REST endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">void<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">connect_to_server<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Function connect_to_server called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ The connection to our server<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> client = <\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">client<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">http_client<\/span><span style=\"color: #D4D4D4\">(server_url);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ The stream to capture our incoming JSON data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> json_data = <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">make_shared<\/span><span style=\"color: #D4D4D4\">&lt; <\/span><span style=\"color: #4EC9B0\">concurrency<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">streams<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">ostream<\/span><span style=\"color: #D4D4D4\"> &gt;();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ You&#39;ll notice that the naming of the following lambda&#39;s are verbs,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ to describe what they intend on doing<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ Lambda to capture the incoming stream and return the client request<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> create_request = &#91;<\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">, &amp;<\/span><span style=\"color: #9CDCFE\">client<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4EC9B0\">concurrency<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">streams<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">ostream<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">incoming_data<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Lambda request called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    *json_data = incoming_data;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ Return a request object, appending the events path component<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">client<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">request<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">methods<\/span><span style=\"color: #D4D4D4\">::GET, <\/span><span style=\"color: #DCDCAA\">U<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;\/events&quot;<\/span><span style=\"color: #D4D4D4\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ Lambda to handle the HTTP response, directing the data to our json_data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> handle_response = &#91;<\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http_response<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">response<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Lambda handle_response called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Response status code: &quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #9CDCFE\">response<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">status_code<\/span><span style=\"color: #D4D4D4\">() &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">response<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">body<\/span><span style=\"color: #D4D4D4\">().<\/span><span style=\"color: #DCDCAA\">read_to_end<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">-&gt;<\/span><span style=\"color: #DCDCAA\">streambuf<\/span><span style=\"color: #D4D4D4\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ Lambda to close the json_data once the stream is done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> close_down = &#91;<\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #569CD6\">size_t<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Lambda close_down called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">-&gt;<\/span><span style=\"color: #DCDCAA\">close<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ The bool to make our code wait<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> done = <\/span><span style=\"color: #569CD6\">false<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ The lambda that breaks the code out of the nasty loop<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> signal_done = &#91;&amp;<\/span><span style=\"color: #9CDCFE\">done<\/span><span style=\"color: #D4D4D4\">&#93;() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Lambda signal_done called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    done = <\/span><span style=\"color: #569CD6\">true<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ Now, let&#39;s put them all together<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> output_result_file = <\/span><span style=\"color: #4EC9B0\">concurrency<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">streams<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">fstream<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">open_ostream<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">U<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;results.html&quot;<\/span><span style=\"color: #D4D4D4\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  output_result_file<\/span><span style=\"color: #6A9955\"> \/\/ This step opens the output file ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(create_request)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(handle_response)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(close_down)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(signal_done);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ You should see a pattern here how the process flow works<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ with cpprestsdk<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">  \/\/ The nasty loop<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> x = <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #C586C0\">while<\/span><span style=\"color: #D4D4D4\">(!done){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    ++x;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Function connect_to_server done&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In the above code, a lambda handles each stage of the processing.<\/p>\n\n\n\n<p>Take a look at the results.html file; you should see the JSON data that the server returned.<\/p>\n\n\n\n<p>Now, instead of using the nasty loop, you could just have the connect_to_server function return the task and have the main thread wait on the execution of the task to complete.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">C++<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ Let's return the task\nreturn concurrency::streams::fstream::open_ostream(U(\"results.html\"))\n  .then(create_request)\n  .then(handle_response)\n  .then(close_down);\n\n\n\n\/\/ and in the main function, let's wait on the task to finish, wrapped in a try\/catch \n\/\/ block in case something bad happens\ntry {\n  auto task = connect_to_server();\n  task.wait();\n} catch (...) {\n  std::cout &lt;&lt; \"Something bad happened\" &lt;&lt; std::endl;\n}\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">\/\/ Let&#39;s return the task<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">concurrency<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">streams<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">fstream<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">open_ostream<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">U<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;results.html&quot;<\/span><span style=\"color: #D4D4D4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(create_request)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(handle_response)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(close_down);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ and in the main function, let&#39;s wait on the task to finish, wrapped in a try\/catch <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ block in case something bad happens<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">try<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> task = <\/span><span style=\"color: #DCDCAA\">connect_to_server<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #9CDCFE\">task<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">wait<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">} <\/span><span style=\"color: #C586C0\">catch<\/span><span style=\"color: #D4D4D4\"> (...) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">  <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Something bad happened&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Waiting on the task is certainly more convenient than having to use a loop.<\/p>\n\n\n\n<p>So, here is the complete code for the main.cpp file:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">C++<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/ The C++ STD Library headers\n#include \n#include \n\n\/\/ The Microsoft Headers\n#include &lt;cpprest\/filestream.h>\n#include &lt;cpprest\/http_client.h>\n\nusing namespace std::string_literals;\n\n\/\/ The address to our server\nconst auto server_url = \"http:\/\/localhost:3000\"s;\n\n\/\/ Function that will attempt to connect to a REST endpoint\nauto connect_to_server()\n{\n    std::cout &lt;&lt; \"Function connect_to_server called\" &lt;&lt; std::endl;\n    \n    \/\/ The connection to our server\n    auto client = web::http::client::http_client(server_url);\n    \n    \/\/ The stream to capture our incoming JSON data\n    auto json_data = std::make_shared&lt; concurrency::streams::ostream >();\n    \n    \/\/\n    \/\/ You'll notice that the naming of the following lambda's are verbs,\n    \/\/ to describe what they intend on doing\n    \/\/\n    \n    \/\/ Lambda to capture the incoming stream and return the client request\n    auto create_request = &#91;json_data, &amp;client&#93;(concurrency::streams::ostream incoming_data) {\n        std::cout &lt;&lt; \"Lambda request called\" &lt;&lt; std::endl;\n        *json_data = incoming_data;\n        \n        \/\/ Return a request object, appending the events path component\n        return client.request(web::http::methods::GET, U(\"\/events\"));\n    };\n    \n    \/\/ Lambda to handle the HTTP response, directing the data to our json_data\n    auto handle_response = &#91;json_data&#93;(web::http::http_response response) {\n        std::cout &lt;&lt; \"Lambda handle_response called\" &lt;&lt; std::endl;\n        std::cout &lt;&lt; \"Response status code: \" &lt;&lt; response.status_code() &lt;&lt; std::endl;\n        return response.body().read_to_end(json_data->streambuf());\n    };\n    \n    \/\/ Lambda to close the json_data once the stream is done\n    auto close_down = &#91;json_data&#93;(size_t) {\n        std::cout &lt;&lt; \"Lambda close_down called\" &lt;&lt; std::endl;\n        return json_data->close();\n    };\n\n    \/\/ Put them all together and return the task\n    return concurrency::streams::fstream::open_ostream(U(\"results.html\"))\n        .then(create_request)\n        .then(handle_response)\n        .then(close_down);\n}\n\nint main(int argc, const char* argv[])\n{\n    std::cout &lt;&lt; \"Application is starting\\n\";\n\n    try {\n        auto task = connect_to_server();\n        task.wait();\n    } catch (...) {\n        std::cout &lt;&lt; \"Something bad happened\" &lt;&lt; std::endl;\n    }\n    \n    std::cout &lt;&lt; \"Application will exit now\\n\";\n    return 0;\n}\n\n<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">\/\/ The C++ STD Library headers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">#include<\/span><span style=\"color: #569CD6\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">#include<\/span><span style=\"color: #569CD6\"> <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ The Microsoft Headers<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">#include<\/span><span style=\"color: #569CD6\"> <\/span><span style=\"color: #CE9178\">&lt;cpprest\/filestream.h&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">#include<\/span><span style=\"color: #569CD6\"> <\/span><span style=\"color: #CE9178\">&lt;cpprest\/http_client.h&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">using<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">namespace<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">string_literals<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ The address to our server<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> server_url = <\/span><span style=\"color: #CE9178\">&quot;http:\/\/localhost:3000&quot;<\/span><span style=\"color: #569CD6\">s<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">\/\/ Function that will attempt to connect to a REST endpoint<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">connect_to_server<\/span><span style=\"color: #D4D4D4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Function connect_to_server called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ The connection to our server<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> client = <\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">client<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">http_client<\/span><span style=\"color: #D4D4D4\">(server_url);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ The stream to capture our incoming JSON data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> json_data = <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">make_shared<\/span><span style=\"color: #D4D4D4\">&lt; <\/span><span style=\"color: #4EC9B0\">concurrency<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">streams<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">ostream<\/span><span style=\"color: #D4D4D4\"> &gt;();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ You&#39;ll notice that the naming of the following lambda&#39;s are verbs,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ to describe what they intend on doing<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ Lambda to capture the incoming stream and return the client request<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> create_request = &#91;<\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">, &amp;<\/span><span style=\"color: #9CDCFE\">client<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4EC9B0\">concurrency<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">streams<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">ostream<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">incoming_data<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Lambda request called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        *json_data = incoming_data;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">        \/\/ Return a request object, appending the events path component<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">client<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">request<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">methods<\/span><span style=\"color: #D4D4D4\">::GET, <\/span><span style=\"color: #DCDCAA\">U<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;\/events&quot;<\/span><span style=\"color: #D4D4D4\">));<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ Lambda to handle the HTTP response, directing the data to our json_data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> handle_response = &#91;<\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #4EC9B0\">web<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">http_response<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">response<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Lambda handle_response called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Response status code: &quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #9CDCFE\">response<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">status_code<\/span><span style=\"color: #D4D4D4\">() &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">response<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">body<\/span><span style=\"color: #D4D4D4\">().<\/span><span style=\"color: #DCDCAA\">read_to_end<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">-&gt;<\/span><span style=\"color: #DCDCAA\">streambuf<\/span><span style=\"color: #D4D4D4\">());<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    };<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ Lambda to close the json_data once the stream is done<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> close_down = &#91;<\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">&#93;(<\/span><span style=\"color: #569CD6\">size_t<\/span><span style=\"color: #D4D4D4\">) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Lambda close_down called&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">json_data<\/span><span style=\"color: #D4D4D4\">-&gt;<\/span><span style=\"color: #DCDCAA\">close<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    };<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">    \/\/ Put them all together and return the task<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #4EC9B0\">concurrency<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">streams<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #4EC9B0\">fstream<\/span><span style=\"color: #D4D4D4\">::<\/span><span style=\"color: #DCDCAA\">open_ostream<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #DCDCAA\">U<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;results.html&quot;<\/span><span style=\"color: #D4D4D4\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(create_request)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(handle_response)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        .<\/span><span style=\"color: #DCDCAA\">then<\/span><span style=\"color: #D4D4D4\">(close_down);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">int<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">main<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #569CD6\">int<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">argc<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #569CD6\">const<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #569CD6\">char*<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">argv<\/span><span style=\"color: #D4D4D4\">[])<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Application is starting<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">try<\/span><span style=\"color: #D4D4D4\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #569CD6\">auto<\/span><span style=\"color: #D4D4D4\"> task = <\/span><span style=\"color: #DCDCAA\">connect_to_server<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #9CDCFE\">task<\/span><span style=\"color: #D4D4D4\">.<\/span><span style=\"color: #DCDCAA\">wait<\/span><span style=\"color: #D4D4D4\">();<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    } <\/span><span style=\"color: #C586C0\">catch<\/span><span style=\"color: #D4D4D4\"> (...) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">        <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Something bad happened&quot;<\/span><span style=\"color: #D4D4D4\"> &lt;&lt; <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::endl;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #4EC9B0\">std<\/span><span style=\"color: #D4D4D4\">::cout &lt;&lt; <\/span><span style=\"color: #CE9178\">&quot;Application will exit now<\/span><span style=\"color: #D7BA7D\">\\n<\/span><span style=\"color: #CE9178\">&quot;<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">    <\/span><span style=\"color: #C586C0\">return<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>If you would like to see the completed example project, the project from this article, and all of the other ones, are available for download from GitHub: <a href=\"https:\/\/github.com\/AhiyaHiya\/art_2019_05_001\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/github.com\/AhiyaHiya\/art_2019_05_001<\/a><\/p>\n\n\n\n<p>The next article is going to be surprise, but, related to what we are doing with REST.<\/p>\n\n\n\n<p>For more examples on how to use the CPP REST SDK, have a look at <a href=\"https:\/\/github.com\/microsoft\/cpprestsdk\/wiki\/Community-Blog-Posts-and-Samples\" target=\"_blank\" rel=\"noopener noreferrer\">samples using CPP REST SDK<\/a><\/p>\n\n\n\n<p><strong>Index<\/strong><br><br><a href=\"http:\/\/www.jaimerios.com\/?p=1717\" target=\"_blank\" rel=\"noopener noreferrer\">Article Series Index<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Previously &#8230; We connected to our local JSON server using a console app, writen in Swift: Making a connection using Swift In this article, we are going to do the same thing, this time using C++. Libraries Swift comes with a large library of functionality, including classes to connect to a REST server. The &#8230; <a title=\"Connecting with C++\" class=\"read-more\" href=\"https:\/\/jaimerios.com\/?p=1661\" aria-label=\"Read more about Connecting with C++\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[100,385],"class_list":["post-1661","post","type-post","status-publish","format-standard","hentry","category-coding","tag-c","tag-rest"],"_links":{"self":[{"href":"https:\/\/jaimerios.com\/index.php?rest_route=\/wp\/v2\/posts\/1661","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jaimerios.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jaimerios.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jaimerios.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jaimerios.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1661"}],"version-history":[{"count":3,"href":"https:\/\/jaimerios.com\/index.php?rest_route=\/wp\/v2\/posts\/1661\/revisions"}],"predecessor-version":[{"id":1907,"href":"https:\/\/jaimerios.com\/index.php?rest_route=\/wp\/v2\/posts\/1661\/revisions\/1907"}],"wp:attachment":[{"href":"https:\/\/jaimerios.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1661"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jaimerios.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1661"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jaimerios.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1661"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}