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