// logger_service.hpp
// ~~~~~~~~~~~~~~~~~~
//
-// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+// Copyright (c) 2003-2017 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
/// Service implementation for the logger.
class logger_service
- : public boost::asio::io_service::service
+ : public boost::asio::io_context::service
{
public:
/// The unique service identifier.
- static boost::asio::io_service::id id;
+ static boost::asio::io_context::id id;
/// The backend implementation of a logger.
struct logger_impl
/// The type for an implementation of the logger.
typedef logger_impl* impl_type;
- /// Constructor creates a thread to run a private io_service.
- logger_service(boost::asio::io_service& io_service)
- : boost::asio::io_service::service(io_service),
- work_io_service_(),
- work_(new boost::asio::io_service::work(work_io_service_)),
+ /// Constructor creates a thread to run a private io_context.
+ logger_service(boost::asio::io_context& io_context)
+ : boost::asio::io_context::service(io_context),
+ work_io_context_(),
+ work_(boost::asio::make_work_guard(work_io_context_)),
work_thread_(new boost::thread(
- boost::bind(&boost::asio::io_service::run, &work_io_service_)))
+ boost::bind(&boost::asio::io_context::run, &work_io_context_)))
{
}
- /// Destructor shuts down the private io_service.
+ /// Destructor shuts down the private io_context.
~logger_service()
{
- /// Indicate that we have finished with the private io_service. Its
- /// io_service::run() function will exit once all other work has completed.
+ /// Indicate that we have finished with the private io_context. Its
+ /// io_context::run() function will exit once all other work has completed.
work_.reset();
if (work_thread_)
work_thread_->join();
void use_file(impl_type& /*impl*/, const std::string& file)
{
// Pass the work of opening the file to the background thread.
- work_io_service_.post(boost::bind(
+ boost::asio::post(work_io_context_, boost::bind(
&logger_service::use_file_impl, this, file));
}
std::ostringstream os;
os << impl->identifier << ": " << message;
- // Pass the work of opening the file to the background thread.
- work_io_service_.post(boost::bind(
+ // Pass the work of writing to the file to the background thread.
+ boost::asio::post(work_io_context_, boost::bind(
&logger_service::log_impl, this, os.str()));
}
private:
/// Helper function used to open the output file from within the private
- /// io_service's thread.
+ /// io_context's thread.
void use_file_impl(const std::string& file)
{
ofstream_.close();
ofstream_.open(file.c_str());
}
- /// Helper function used to log a message from within the private io_service's
+ /// Helper function used to log a message from within the private io_context's
/// thread.
void log_impl(const std::string& text)
{
ofstream_ << text << std::endl;
}
- /// Private io_service used for performing logging operations.
- boost::asio::io_service work_io_service_;
+ /// Private io_context used for performing logging operations.
+ boost::asio::io_context work_io_context_;
- /// Work for the private io_service to perform. If we do not give the
- /// io_service some work to do then the io_service::run() function will exit
+ /// Work for the private io_context to perform. If we do not give the
+ /// io_context some work to do then the io_context::run() function will exit
/// immediately.
- boost::scoped_ptr<boost::asio::io_service::work> work_;
+ boost::asio::executor_work_guard<
+ boost::asio::io_context::executor_type> work_;
- /// Thread used for running the work io_service's run loop.
+ /// Thread used for running the work io_context's run loop.
boost::scoped_ptr<boost::thread> work_thread_;
/// The file to which log messages will be written.