Exemple #1
0
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;
}
Exemple #3
0
  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;
  }