#include #include #include #include #include #include #include #include #include #include #include #include static const std::string logPrefix_ = "scwx::main"; static const auto logger_ = scwx::util::Logger::Create(logPrefix_); int main(int argc, char* argv[]) { // Initialize logger scwx::util::Logger::Initialize(); spdlog::set_level(spdlog::level::debug); QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true); QApplication a(argc, argv); QCoreApplication::setApplicationName("Supercell Wx"); // Enable internationalization support QTranslator translator; if (translator.load(QLocale(), "scwx", "_", ":/i18n")) { QCoreApplication::installTranslator(&translator); } // Start the io_context main loop boost::asio::io_context& ioContext = scwx::util::io_context(); auto work = boost::asio::make_work_guard(ioContext); boost::asio::thread_pool threadPool {4}; boost::asio::post(threadPool, [&]() { while (true) { try { ioContext.run(); break; // run() exited normally } catch (std::exception& ex) { // Log exception and continue logger_->error(ex.what()); } } }); // Initialize AWS SDK Aws::SDKOptions awsSdkOptions; Aws::InitAPI(awsSdkOptions); // Initialize application scwx::qt::config::RadarSite::Initialize(); scwx::qt::manager::SettingsManager::Initialize(); scwx::qt::manager::ResourceManager::Initialize(); // Run Qt main loop int result; { scwx::qt::main::MainWindow w; w.show(); result = a.exec(); } // Deinitialize application scwx::qt::manager::RadarProductManager::Cleanup(); // Gracefully stop the io_context main loop work.reset(); threadPool.join(); // Shutdown application scwx::qt::manager::ResourceManager::Shutdown(); scwx::qt::manager::SettingsManager::Shutdown(); // Shutdown AWS SDK Aws::ShutdownAPI(awsSdkOptions); return result; }