/* * @RDE_HEADER@ * Main for Tetra Simulation * $Id$ * $HeadURL$ * $Author$ */ #include #include #include #include #include #include #include #include "server.h" int main(int argc, char **argv) { QCoreApplication::setApplicationName(QLatin1String("TTS")); QCoreApplication::setOrganizationName(QLatin1String("RME")); NGLCoreApplication app(argc, argv); app.createLogger("tts", "log4cxx_tetratestserver.props"); NGL::INGLLogger &logger = app.baseLogger(); QScopedPointer settings(new QSettings(app.organizationName(), app.applicationName())); ERROR_LOG(logger) << "Settings Directory: " << settings->fileName(); LtsCommandLineParser::LtsCommandLineParser options(LtsCommandLineParser::LtsCommandLineParser::CustomConfigFile); options.addOption({QStringList() << QLatin1String("p") << QLatin1String("player"), QLatin1String("number of players to be simulated."), QLatin1String("Default value"), QLatin1String("5")}); options.addOption({QStringList() << QLatin1String("n") << QLatin1String("northing"), QLatin1String("initial position UTM north."), QLatin1String("Default value"), QLatin1String("77777")}); options.addOption({QStringList() << QLatin1String("e") << QLatin1String("easting"), QLatin1String("initial position UTM east."), QLatin1String("Default value"), QLatin1String("99999")}); options.addOption({QStringList() << QLatin1String("f") << QLatin1String("first-id"), QLatin1String("first equipment ID to use."), QLatin1String("Default value"), QLatin1String("1101")}); options.addOption( {QStringList() << QLatin1String("r") << QLatin1String("pprow"), QLatin1String("players per row."), QLatin1String("Default value"), QLatin1String("25")}); options.addOption({QStringList() << QLatin1String("s") << QLatin1String("pspacing"), QLatin1String("utm based spacing between the players."), QLatin1String("Default value"), QLatin1String("100")}); options.addOption( {QStringList() << QLatin1String("z") << QLatin1String("issi"), QLatin1String("DestinationIssi / HostISSI"), QLatin1String("Default value"), QLatin1String("2")}); options.addOption({QStringList() << QLatin1String("m") << QLatin1String("movements"), QLatin1String("how many movements per milliseconds to make."), QLatin1String("Default value"), QLatin1String("2000")}); options.addOption({QStringList() << QLatin1String("d") << QLatin1String("death"), QLatin1String("minimum times, after the movements timer is triggered, a dead player can revive."), QLatin1String("Default value"), QLatin1String("100")}); options.addOption({QStringList() << QLatin1String("o") << QLatin1String("death-offset"), QLatin1String("maximum times, after the movements timer is triggered, a dead player can revive."), QLatin1String("(0 -> identical to min)"), QLatin1String("0")}); options.addOption( {QStringList() << QLatin1String("t") << QLatin1String("pattern"), QLatin1String("pattern the player has to walk [enter pattern by hand or pattern alias-name from settings file]\r\nfor more info, enter '--pattern-help'."), QLatin1String("Default value"), QLatin1String("3,30,20#3,30,-20#3,-30,-20#3,-30,20")}); options.addOption({QStringList() << QLatin1String("demand-old-broadcast-telegrams"), QLatin1String("player demand old broadcast telegrams starting at BCI "), QLatin1String("Default value"), QLatin1String("0")}); options.addOption({QStringList() << QLatin1String("deactivate-single-mines"), QLatin1String("the first player deactivates single mines with ids from minimum-mine-id to maximum-mine-id")}); options.addOption({QStringList() << QLatin1String("minimum-mine-id"), QLatin1String("sets the value for minimum-mine-id used within deactivate-single-mines command"), QLatin1String("Default value"), QLatin1String("minimum-mine-id 2048")}); options.addOption({QStringList() << QLatin1String("maximum-mine-id"), QLatin1String("sets the value for maximum-mine-Id used within deactivate-single-mines command"), QLatin1String("Default value"), QLatin1String("maximum-mine-id 2100")}); options.addOption({QStringList() << QLatin1String("pattern-help"), QLatin1String("help for the pattern interpreter.")}); if (!options.init()) { options.showHelp(); return -1; } QSettings serverSettings(app.applicationDirPath() + QLatin1String("/") + options.iniFile(), QSettings::IniFormat); TTSArgs ttsArgs; // args.destIssi = serverSettings.value(QLatin1String("Radio/HostISSI"), 2).toInt(); ttsArgs.destIssi = options.isSet(QLatin1String("issi")) ? options.value(QLatin1String("issi")).toInt() : 2; ttsArgs.cntPlayer = options.isSet(QLatin1String("player")) ? options.value(QLatin1String("player")).toInt() : 0; int northPos_arg = options.isSet(QLatin1String("northing")) ? options.value(QLatin1String("northing")).toInt() : 77777; int eastPos_arg = options.isSet(QLatin1String("easting")) ? options.value(QLatin1String("easting")).toInt() : 90000; ttsArgs.position = QPointF(eastPos_arg, northPos_arg); ttsArgs.eqIdStart = options.isSet(QLatin1String("first-id")) ? options.value(QLatin1String("first-id")).toInt() : 1101; ttsArgs.pprow = options.isSet(QLatin1String("pprow")) ? options.value(QLatin1String("pprow")).toInt() : 25; ttsArgs.pspacing = options.isSet(QLatin1String("pspacing")) ? options.value(QLatin1String("pspacing")).toInt() : 100; ttsArgs.movs_per_msec = options.isSet(QLatin1String("movements")) ? options.value(QLatin1String("movements")).toInt() : 2000; ttsArgs.minimumDeathTicks = options.isSet(QLatin1String("death")) ? options.value(QLatin1String("death")).toInt() : 10; ttsArgs.maximumDeathTicks = options.isSet(QLatin1String("death-offset")) ? options.value(QLatin1String("death-offset")).toInt() : 20; ttsArgs.demandOldBraodcastTelegrams = options.isSet(QLatin1String("demand-old-broadcast-telegrams")) ? true : false; if (ttsArgs.demandOldBraodcastTelegrams) ttsArgs.demandOldBraodcastTelegramsCounter = options.value(QLatin1String("demand-old-broadcast-telegrams")).toInt(); ttsArgs.deactivationSingleMines = options.isSet(QLatin1String("deactivate-single-mines")) ? true : false; ttsArgs.minimumMineId = options.isSet(QLatin1String("minimum-mine-id")) ? options.value(QLatin1String("minimum-mine-id")).toInt() : 2048; ttsArgs.maximumMineId = options.isSet(QLatin1String("maximum-mine-id")) ? options.value(QLatin1String("maximum-mine-id")).toInt() : 2100; ttsArgs.pattern = options.isSet(QLatin1String("pattern")) ? options.value(QLatin1String("pattern")) : QLatin1String("3,30,20#3,30,-20#3,-30,-20#3,-30,20"); if (options.isSet(QLatin1String("pattern-help"))) { options.showHelp(); return -1; } if (ttsArgs.maximumDeathTicks == 0) ttsArgs.maximumDeathTicks = ttsArgs.minimumDeathTicks; WARNING_LOG(logger) << "Simulating " << ttsArgs.cntPlayer << " players"; WARNING_LOG(logger) << " ... DestinationIssi/HostIssi: " << ttsArgs.destIssi; WARNING_LOG(logger) << " ... on Position n/e: " << ttsArgs.position.y() << "/" << ttsArgs.position.x(); WARNING_LOG(logger) << " ... first equipmentID is: " << ttsArgs.eqIdStart; WARNING_LOG(logger) << " ... player is reborn randomly after minimum " << ttsArgs.minimumDeathTicks << " ticks and maximum " << ttsArgs.maximumDeathTicks << " ticks"; WARNING_LOG(logger) << " ... pattern = " << ttsArgs.pattern; WARNING_LOG(logger) << " ... max. " << ttsArgs.pprow << " players per row"; WARNING_LOG(logger) << " ... spacing of '" << ttsArgs.pspacing << " UTM east' between players"; WARNING_LOG(logger) << " ... one player will be moved after " << ttsArgs.movs_per_msec << " msecs"; TTServer *s = new TTServer(ttsArgs); if (!s->listen(QHostAddress::Any, serverSettings.value(QLatin1String("Radio/Port"), 4200).toInt())) { ERROR_LOG(logger) << "Error listening on localhost:" << serverSettings.value(QLatin1String("Radio/Port"), 52010).toInt() << ": " << s->errorString(); delete s; return -1; } DEBUG_LOG(logger) << "Starting Server"; int ret = app.exec(); delete s; return ret; }