#include "IoContext.h" #include #include #include IoContext::~IoContext() { stop(); } void IoContext::stop() { m_ioContext->stop(); if (m_thread.joinable()) m_thread.join(); } void IoContext::runIoContext() { LOG(info) << "asio context started ..."; BOOST_SCOPE_EXIT(void) { LOG(info) << "asio context exited ..."; } BOOST_SCOPE_EXIT_END try { boost::asio::executor_work_guard work(m_ioContext->get_executor()); m_ioContext->run(); } catch (const boost::log::system_error &error) { LOG(error) << error.what(); } catch (const std::out_of_range &e) { LOG(error) << e.what(); } catch (const boost::exception &e) { LOG(error) << boost::diagnostic_information(e); } catch (const std::exception &e) { #if BOOST_VERSION < 108600 LOG(error) << e.what(); #else boost::stacktrace::stacktrace trace = boost::stacktrace::stacktrace::from_current_exception(); LOG(error) << e.what() << ", trace:\n" << trace; #endif } }