network-experiment/bmrshared-web/lib/request_response.cpp

57 lines
1.7 KiB
C++

// GNU Lesser General Public License v3.0
// Copyright (c) 2025 Bart Beumer <bart@4beumer.nl>
//
// This program is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License v3.0 as published by
// the Free Software Foundation.
//
#include <bmrshared/request_response.hpp>
#include <iostream>
using bmrshared::web::request_response;
request_response::response_writer_interface::~response_writer_interface() = default;
request_response::internal_request_response::internal_request_response(request_type request, callback_on_finalize cb_finalize)
: m_request(std::move(request))
, m_cb_finalize(std::move(cb_finalize))
, m_response_writer()
{
}
request_response::internal_request_response::~internal_request_response()
{
if (m_response_writer)
{
std::shared_ptr<response_writer_interface> shared_writer(std::move(m_response_writer));
m_cb_finalize(
[shared_writer](boost::beast::tcp_stream& stream)
{
shared_writer->write_response(stream);
});
}
}
const request_response::request_type& request_response::internal_request_response::get_request() const
{
return m_request;
}
void request_response::internal_request_response::set_response_sender(std::unique_ptr<response_writer_interface> response_writer)
{
m_response_writer = std::move(response_writer);
}
request_response::request_response(request_type request, callback_on_finalize cb_finalize)
: m_internal(std::make_unique<internal_request_response>(std::move(request), std::move(cb_finalize)))
{
}
request_response::~request_response() = default;
const request_response::request_type& request_response::get_request() const
{
return m_internal->get_request();
}