void FSM::VM<X>::readConfFile(const std::string &confPath, const std::string &luaFilePath) { std::ifstream confStream(confPath); std::string line; if (!confStream.good()) throw LuaVirtualMachine::Failure("Open configuration file", "could not be open"); createStates(confStream); setRetValueGlobals(); }
bool ConfigurationManager::init(int argc, char** argv) { po::options_description cmdGeneralOptions("Common Options"); cmdGeneralOptions.add_options() ("config,c", po::value<std::string>()->default_value("./configs/-.conf"), "configuration file"); po::options_description confGeneralOptions; confGeneralOptions.add(cmdGeneralOptions).add_options() ("testnet", po::value<bool>(), "") ("local", po::value<bool>(), ""); cmdGeneralOptions.add_options() ("help,h", "produce this help message and exit") ("local", "start with local node (remote is default)") ("testnet", "testnet mode"); command_line::add_arg(cmdGeneralOptions, command_line::arg_data_dir, tools::get_default_data_dir()); command_line::add_arg(confGeneralOptions, command_line::arg_data_dir, tools::get_default_data_dir()); Configuration::initOptions(cmdGeneralOptions); Configuration::initOptions(confGeneralOptions); po::options_description netNodeOptions("Local Node Options"); CryptoNote::NetNodeConfig::initOptions(netNodeOptions); CryptoNote::CoreConfig::initOptions(netNodeOptions); po::options_description remoteNodeOptions("Remote Node Options"); RpcNodeConfiguration::initOptions(remoteNodeOptions); po::options_description coinBaseOptions("Coin Base Options"); CoinBaseConfiguration::initOptions(coinBaseOptions); po::options_description cmdOptionsDesc; cmdOptionsDesc.add(cmdGeneralOptions).add(remoteNodeOptions).add(netNodeOptions).add(coinBaseOptions); po::options_description confOptionsDesc; confOptionsDesc.add(confGeneralOptions).add(remoteNodeOptions).add(netNodeOptions).add(coinBaseOptions); po::variables_map cmdOptions; po::store(po::parse_command_line(argc, argv, cmdOptionsDesc), cmdOptions); po::notify(cmdOptions); if (cmdOptions.count("help")) { std::cout << cmdOptionsDesc << std::endl; return false; } if (cmdOptions.count("config")) { std::ifstream confStream(cmdOptions["config"].as<std::string>(), std::ifstream::in); if (!confStream.good()) { throw ConfigurationError("Cannot open configuration file"); } po::variables_map confOptions; po::store(po::parse_config_file(confStream, confOptionsDesc, true), confOptions); po::notify(confOptions); gateConfiguration.init(confOptions); netNodeConfig.init(confOptions); coreConfig.init(confOptions); remoteNodeConfig.init(confOptions); coinBaseConfig.init(confOptions); if (confOptions.count("local")) { startInprocess = confOptions["local"].as<bool>(); } } //command line options should override options from config file gateConfiguration.init(cmdOptions); netNodeConfig.init(cmdOptions); coreConfig.init(cmdOptions); remoteNodeConfig.init(cmdOptions); if (cmdOptions.count("local")) { startInprocess = true; } return true; }
virtual bool SlashCommand ( int playerID, bz_ApiString command, bz_ApiString /*message*/, bz_APIStringList* params ) { if (command == "maplist") { std::ifstream confStream(confFile.c_str()); if (!confStream.fail()) { std::string line; bz_sendTextMessage(BZ_SERVER,playerID,"Available configurations: "); bz_APIStringList* lineList = bz_newStringList(); while (std::getline(confStream, line)) { lineList->clear(); lineList->tokenize(line.c_str(), " \t", 2, true); if (lineList->size() == 2) bz_sendTextMessage(BZ_SERVER,playerID,(std::string(" - ") + lineList->get(0).c_str()).c_str()); } bz_deleteStringList(lineList); } return true; } bz_BasePlayerRecord *player = bz_getPlayerByIndex(playerID); if (!player) return true; if (player->hasPerm("mapchange")) { if (!matchInProgress) { if (command == "maprandom") { std::ifstream confStream(confFile.c_str()); std::string line; std::vector<std::string> mapnames; std::vector<std::string> mapfiles; bz_APIStringList* lineList = bz_newStringList(); while (std::getline(confStream, line)) { lineList->clear(); lineList->tokenize(line.c_str(), " \t", 2, true); if (lineList->size() == 2) { mapnames.push_back(lineList->get(0).c_str()); mapfiles.push_back(lineList->get(1).c_str()); } } int i = rand() % mapnames.size(); std::ofstream oputfStream(outputFile.c_str()); oputfStream << mapfiles[i] << std::endl; oputfStream.close(); bz_sendTextMessage(BZ_SERVER,BZ_ALLUSERS,(std::string("Server restarting with randomly selected configuration (") + mapnames[i] + "): Requested by " + player->callsign.c_str()).c_str()); bz_shutdown(); bz_deleteStringList(lineList); bz_freePlayerRecord(player); return true; } if (params->size() != 1) { bz_sendTextMessage(BZ_SERVER,playerID,"Usage: /mapchange <confname>"); bz_freePlayerRecord(player); return true; } bool done = false; std::ifstream confStream(confFile.c_str()); if (!confStream.fail()) { std::string line; bz_APIStringList* lineList = bz_newStringList(); while (std::getline(confStream, line)) { lineList->clear(); lineList->tokenize(line.c_str(), " \t", 2, true); bz_ApiString thisConfName = lineList->get(0); thisConfName.tolower(); bz_ApiString requestedConfName = params->get(0); requestedConfName.tolower(); if (lineList->size() == 2 && thisConfName == requestedConfName) { std::ofstream oputfStream(outputFile.c_str()); oputfStream << lineList->get(1).c_str() << std::endl; oputfStream.close(); bz_sendTextMessage(BZ_SERVER,BZ_ALLUSERS,(std::string("Server restarting with configuration ") + lineList->get(0).c_str() + ": Requested by " + player->callsign.c_str()).c_str()); bz_shutdown(); done = true; } } bz_deleteStringList(lineList); } if (!done) bz_sendTextMessage(BZ_SERVER,playerID,"The configuration you selected does not exist"); } else { bz_sendTextMessage(BZ_SERVER,playerID,"Sorry, you are not allowed to change configurations when a match is in progress"); bz_sendTextMessage(BZ_SERVER,playerID,"For this malicious activity, you will be kicked"); bz_kickUser(playerID, "mapchange during match", true); } } else bz_sendTextMessage(BZ_SERVER,playerID,"Sorry, you are not allowed to change configurations on this server"); bz_freePlayerRecord(player); return true; }