Don't use async_write_msg in examples

fix #746
This commit is contained in:
Vinnie Falco
2017-08-18 07:55:30 -07:00
parent 830e651f99
commit 59d4b85e15
13 changed files with 88 additions and 49 deletions
@@ -14,7 +14,6 @@
//------------------------------------------------------------------------------
#include "example/common/server_certificate.hpp"
#include "example/common/write_msg.hpp"
#include <boost/beast/core.hpp>
#include <boost/beast/http.hpp>
@@ -234,12 +233,20 @@ class session
void
operator()(http::message<isRequest, Body, Fields>&& msg) const
{
// This function takes ownership of the message by moving
// it into a temporary buffer, otherwise we would have
// to manage the lifetime of the message and serializer.
async_write_msg(
self_.stream_,
std::move(msg),
// The lifetime of the message has to extend
// for the duration of the async operation so
// we use a shared_ptr to manage it.
auto sp = std::make_shared<
http::message<isRequest, Body, Fields>>(std::move(msg));
// Store a type-erased version of the shared
// pointer in the class to keep it alive.
self_.res_ = sp;
// Write the response
http::async_write(
self_.socket_,
*sp,
self_.strand_.wrap(std::bind(
&session::loop,
self_.shared_from_this(),
@@ -253,6 +260,7 @@ class session
boost::beast::flat_buffer buffer_;
std::string const& doc_root_;
http::request<http::string_body> req_;
std::shared_ptr<void> res_;
send_lambda lambda_;
public:
@@ -319,6 +327,9 @@ public:
}
if(ec)
return fail(ec, "write");
// We're done with the response so delete it
res_ = nullptr;
}
// Perform the SSL shutdown