2023-07-21 11:21:16 +08:00
|
|
|
#include "IoContext.h"
|
|
|
|
#include <boost/asio/executor_work_guard.hpp>
|
|
|
|
#include <boost/scope_exit.hpp>
|
2024-05-05 17:21:45 +08:00
|
|
|
#include <boost/stacktrace.hpp>
|
2023-07-21 11:21:16 +08:00
|
|
|
|
|
|
|
IoContext::~IoContext() {
|
|
|
|
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<boost::asio::io_context::executor_type> 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) {
|
2024-08-27 14:14:27 +08:00
|
|
|
#if BOOST_VERSION < 108600
|
|
|
|
LOG(error) << e.what();
|
|
|
|
#else
|
2024-05-05 17:21:45 +08:00
|
|
|
boost::stacktrace::stacktrace trace = boost::stacktrace::stacktrace::from_current_exception();
|
|
|
|
LOG(error) << e.what() << ", trace:\n" << trace;
|
2024-08-27 14:14:27 +08:00
|
|
|
#endif
|
2023-07-21 11:21:16 +08:00
|
|
|
}
|
|
|
|
}
|