// main int main(int n, char* args[]) { // parsing arguments for file paths int option; while ((option = getopt(n, args, "t:w:f:a:")) != -1) { switch (option) { case 't': FILE_FOR_WAPITI_TREE_PARSE = optarg; break; case 'w': FILE_FOR_WAPITI_PARSE = optarg; break; case 'f': FILE_FOR_W3AF_PARSE = optarg; break; case 'a': FILE_FOR_ARACHNI_PARSE = optarg; break; case '?': if ((optopt == 't') || (optopt == 'w') || (optopt == 'f') || (optopt == 'a')) fprintf(stderr, "Option -%c requires an argument.\n", optopt); else if (isprint(optopt)) fprintf(stderr, "Unknown option `-%c'.\n", optopt); else fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt); break; default: break; } } start_database(); parse_wapiti(); parse_w3af(); parse_arachni(); finalize_database(); create_json(); return 0; }
shutdown_type application::impl::run(int argc, const char ** argv) { std::list<std::string> targets; if (_config.get_property("log_info", LOG_INFO_DEFAULT)) targets.emplace_back("info"); if (_config.get_property("log_debug", LOG_DEBUG_DEFAULT)) targets.emplace_back("debug"); if (_config.get_property("log_error", LOG_ERROR_DEFAULT)) targets.emplace_back("error"); logger::instance().set_targets(std::move(targets)); std::ostringstream version; version << LOGIN_VERSION_MAJOR << "." << LOGIN_VERSION_MINOR << "." << LOGIN_VERSION_RELEASE; _owner->set_title("desperion login server v" + version.str()); std::cout << "\n"; utils::color<utils::TBLUE>(std::cout) << ",------, ,-----. ,-----, ,------. ,-----. ,------. ,------. ,------, ,, ,,\n" << "| ,--, ` | .---' | ,--` | ,--, | | .---' | ,--, | `--||--' | ,--, | ||\\ ||\n" << "| | | | | |--. | `--, | | | | | |--. | | | | || | | | | || \\ ||\n" << "| | | | | |--' `---, | | `--` | | |--' | `--` , || | | | | || \\ ||\n" << "| '--' , | '---, ,---| | | ,----` | '---, | ,-\\ \\ .--||--, | '--' | || \\||\n" << "`------` `-----' `-----` `-` `-----' `-` '--' `------` `------` `` `'\n"; utils::color<utils::TGREEN>(std::cout) << "Dofus v" << protocol::DOFUS_VERSION_MAJOR << "." << protocol::DOFUS_VERSION_MINOR << "." << protocol::DOFUS_VERSION_RELEASE << "." << protocol::DOFUS_VERSION_REVISION << "." << protocol::DOFUS_VERSION_PATCH << "/" << protocol::DOFUS_VERSION_BUILD_TYPE << ", protocol " << protocol::PROTOCOL_BUILD << "/" << protocol::PROTOCOL_REQUIRED_BUILD << "\n" << "login server v" << version.str() << ", build date: " << __DATE__ << " " << __TIME__ << "\n" << utils::cendl; try { start_database(); } catch (const sql_error & e) { utils::color<utils::TRED>(std::cout) << "an sql error occured, please see log files" << utils::cendl; log_to("error") << "sql error: " << e.what() << "\n"; return shutdown_type::NORMAL; } _world.init(); session::load_patch(); socket_listener listener; auto port = _config.get_property("server_port", SERVER_PORT_DEFAULT); listener.listen<session>(port); port = _config.get_property("system_port", SERVER_PORT_DEFAULT); listener.listen<game_session>(port); std::cout << "\nuptime " << _owner->uptime() << " microseconds" << std::endl; listener.spawn_threads(_config.get_property("pool_threads", POOL_THREADS_DEFAULT)); std::thread t { std::bind(&run_service, std::ref(_owner->_service)) }; std::mutex m; std::unique_lock<std::mutex> lock { m }; while (_owner->get_shutdown() == shutdown_type::NOT_REQUESTED) _owner->_condition.wait(lock); listener.stop(); t.join(); return _owner->get_shutdown(); }