/** * @RDE_HEADER@ * main (TopicDataGenerator) * $Id$ * $HeadURL$ * $Author$ */ #include #include #include "initialisation.h" #include #include #include #include #include // static static QVector getAvailableTopicTypes() // get topicTypes per plugin mechanism { QVector topicTypeDescs; LtsPluginManager::LtsPluginLoader::getInstance()->loadPlugins(LtsPluginManager::PluginType::TOPIC_TYPE, [&](const LtsPluginManager::PluginInstance &pi) { DDSGeneric::TopicTypePlugin *typePlugin = qobject_cast(pi.plugin); if (!typePlugin) return false; QMap topics = typePlugin->getDataTopics(); topics.unite(typePlugin->getFunctionTopics()); QMap::iterator it = topics.begin(); for( ; it != topics.end(); ++it) { topicTypeDescs.append(it.value()); } return false; // we don't need the plugins anymore -> unload }); return topicTypeDescs; } class CmdLineParser : public LtsCommandLineParser::LtsCommandLineParser { public: CmdLineParser() : LtsCommandLineParser() { addOption( { QStringList() << QLatin1String("s") << QLatin1String("maxSamples"), QLatin1String("Default: 0 (infinite loop)"), QLatin1String("Max Samples"), QLatin1String("0") } ); addOption( { QStringList() << QLatin1String("t") << QLatin1String("doType"), QLatin1String("Default: all, can be a list of doTypes, i.e. 1,2,5 (more Infos on doType, use -h)"), QLatin1String("doType"), QLatin1String("0") } ); } int maxSamples() const { return isSet(QLatin1String("s")) ? value(QLatin1String("s")).toInt() : -1; } QVector getDoTypes(NGL::INGLLogger &logger) const { const QVector availDataTopics = getAvailableDoTypes(); if (!isSet(QLatin1String("t"))) return availDataTopics; // Convert list of DoTypes, separated by comma (given by user) const QString doTypeStr = value(QLatin1String("t")); const QVector strList = doTypeStr.splitRef(QLatin1Char(','), QString::SkipEmptyParts); if (strList.isEmpty()) return availDataTopics; QVector vDt; vDt.reserve(strList.size()); for (const QStringRef &doTypeStr : strList) { bool ok = false; int doTypeInt = doTypeStr.toInt(&ok); INFO_LOG(logger) << "doType: " << doTypeInt; if (ok && doTypeInt >= 0 && doTypeInt < availDataTopics.size()) vDt.append(availDataTopics.at(doTypeInt)); else WARNING_LOG(logger) << doTypeStr.toString() << " is not a valid DoType, skipping.. "; } return vDt; } QVector getAvailableDoTypes() const { return getAvailableTopicTypes(); } bool init() { LtsCommandLineParser::init(false); if (isSet(QLatin1String("h"))) { QVector doTypes = getAvailableDoTypes(); auto it = doTypes.begin(); for(int i=0 ; it != doTypes.end(); ++it, ++i) fprintf(stdout, "\ndoType(%d): %s ", i, (*it).name.c_str()); fprintf(stdout, "\n\n"); } return true; } }; int main ( int argc, char**argv ) { NGLCoreApplication app ( argc, argv ); app.createLogger("DataSampleGenerator.main", "log4cxx_tdsr.props"); CmdLineParser options; if (!options.init()) return -1; QVector doTypes = options.getDoTypes(app.baseLogger()); INFO_LOG(app.baseLogger()) << "size vDoTypes: " << doTypes.size(); DataSampleReceiver::Initialisation* initDtcr = new DataSampleReceiver::Initialisation(options.domainId(), options.exerciseId(), doTypes); if (!initDtcr->init()) return -2; STARTUP_LOG(app.baseLogger()); app.exec(); delete initDtcr; SHUTDOWN_LOG(app.baseLogger()); return 0; }