/* core/applicationinterface.cc This file is part of the Osirion project and is distributed under the terms of the GNU General Public License version 2 */ #include "core/core.h" #include "filesystem/filesystem.h" #include "sys/sys.h" #include "common/common.h" #include #include #include #include namespace core { extern "C" void signal_handler(int signum) { switch(signum){ case SIGHUP: case SIGINT: case SIGQUIT: case SIGTERM: con_warn << "received signal " << signum << ", shutting down..." << std::endl; if (ApplicationInterface::instance()); ApplicationInterface::instance()->shutdown(); exit(1); break; default: con_warn << "received signal " << signum << ", terminated..." << std::endl; exit(1); break; } } ApplicationInterface *ApplicationInterface::applicationinterface_instance = 0; ApplicationInterface::ApplicationInterface() { if (applicationinterface_instance) { std::cerr << "multiple singleton instances: core::ApplicationInterface" << std::endl; exit(2); } applicationinterface_instance = this; sys::signal(SIGHUP, signal_handler); sys::signal(SIGINT, signal_handler); sys::signal(SIGQUIT, signal_handler); sys::signal(SIGTERM, signal_handler); } ApplicationInterface::~ApplicationInterface() { applicationinterface_instance = 0; } ApplicationInterface *ApplicationInterface::instance() { return applicationinterface_instance; } void ApplicationInterface::init() { filesystem::init(); con_debug << "Initializing core..." << std::endl; if (game()) game()->init(); else con_warn << "No game module found!" << std::endl; } void ApplicationInterface::shutdown() { con_debug << "Shutting down core..." << std::endl; if (game()) game()->shutdown(); else con_warn << "No game module found!" << std::endl; filesystem::shutdown(); } void ApplicationInterface::frame(float seconds) { if (game()) game()->frame(seconds); } }