#include "tool.h" #include "blackcore/context_all_interfaces.h" #include "blackmisc/propertyindexallclasses.h" #include "blackmisc/avallclasses.h" #include "blackmisc/pqallquantities.h" #include "blackmisc/loghandler.h" #include "blackmisc/worker.h" #include "blacksound/soundgenerator.h" #include #include #include #include #include #include #include using namespace BlackCore; using namespace BlackMisc; using namespace BlackMisc::PhysicalQuantities; using namespace BlackMisc::Aviation; using namespace BlackMisc::Audio; namespace BlackMiscTest { /* * Send data to testservice, this sends data to the slots on the server */ void Tool::serverLoop(CRuntime *runtime) { QTextStream qtout(stdout); qtout << "Running on server here " << Tool::getPid() << " thread: " << QThread::currentThreadId() << endl; Q_ASSERT(runtime); QThread::sleep(3); // time in secs, let the DBus server startup // log initial severity CLogSubscriber applicationMessageSubscriber, audioMessageSubscriber, networkMessageSubscriber, ownAircraftMessageSubscriber, settingsMessageSubscriber, simulatorMessageSubscriber; CStatusMessage::StatusSeverity messageSeverity = CStatusMessage::SeverityInfo; auto refreshSubscriptionSeverities = [ & ]() { applicationMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextApplication()).withSeverityAtOrAbove(messageSeverity)); audioMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextAudio()).withSeverityAtOrAbove(messageSeverity)); networkMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextNetwork()).withSeverityAtOrAbove(messageSeverity)); ownAircraftMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextOwnAircraft()).withSeverityAtOrAbove(messageSeverity)); settingsMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextSettings()).withSeverityAtOrAbove(messageSeverity)); simulatorMessageSubscriber.changeSubscription(CLogPattern::allOf(runtime->getIContextSimulator()).withSeverityAtOrAbove(messageSeverity)); }; refreshSubscriptionSeverities(); // // Server loop // QTextStream qtin(stdin); QString line; while (line != "x" && runtime) { qtout << "-------------" << endl; qtout << "Connected with network: " << (runtime->getIContextNetwork()->isConnected() ? "yes" : "no") << endl; qtout << "Thread id: " << QThread::currentThreadId() << endl; qtout << "-------------" << endl; qtout << "x .. to exit" << endl; qtout << "0 .. settings 1 .. vatlib audio devices 2 .. Qt audio devices" << endl; qtout << "h .. further commands" << endl; qtout << "-------------" << endl; line = qtin.readLine().toLower().trimmed(); if (line.startsWith("0")) { qtout << "-------------" << endl; QString ret1; QMetaObject::invokeMethod(runtime->getIContextSettings(), "getSettingsFileName", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QString, ret1)); qtout << "Settings: " << ret1 << endl; QMetaObject::invokeMethod(runtime->getIContextSettings(), "getSettingsAsJsonString", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QString, ret1)); qtout << "JSON " << ret1 << endl; } else if (line.startsWith("1")) { qtout << "-------------" << endl; qtout << "vatlib audio devices" << endl; CAudioDeviceInfoList devices; QMetaObject::invokeMethod(runtime->getIContextAudio(), "getAudioDevices", Qt::BlockingQueuedConnection, Q_RETURN_ARG(BlackMisc::Audio::CAudioDeviceInfoList, devices)); qtout << devices << endl; } else if (line.startsWith("2")) { qtout << "-------------" << endl; qtout << "Qt audio devices" << endl; BlackSound::CSoundGenerator::printAllQtSoundDevices(); } else if (line.startsWith("level")) { line = line.replace("level", "").trimmed(); messageSeverity = CStatusMessage::stringToSeverity(line); refreshSubscriptionSeverities(); qtout << "Changed level to " << CStatusMessage::severityToString(messageSeverity) << endl; } else if (line.startsWith("log")) { line.replace("log", ""); bool enable = line.endsWith("e"); if (line.startsWith("app") || line.startsWith("all")) { applicationMessageSubscriber.enableConsoleOutput(enable); } if (line.startsWith("aud") || line.startsWith("all")) { audioMessageSubscriber.enableConsoleOutput(enable); } if (line.startsWith("net") || line.startsWith("all")) { networkMessageSubscriber.enableConsoleOutput(enable); } if (line.startsWith("own") || line.startsWith("all")) { ownAircraftMessageSubscriber.enableConsoleOutput(enable); } if (line.startsWith("set") || line.startsWith("all")) { settingsMessageSubscriber.enableConsoleOutput(enable); } if (line.startsWith("sim") || line.startsWith("all")) { simulatorMessageSubscriber.enableConsoleOutput(enable); } } else if (line.startsWith("h")) { qtout << "1) logging severity levels:" << endl; qtout << " d, i, w, e example: level d for debug level" << endl; qtout << "2) logging for contexts:" << endl; qtout << " log + context + [e]nabled / [d]isabled" << endl; qtout << " contexts: app / aud / net / own (aircraft) / set / sim / all" << endl; qtout << " examples: logappd, lognete, logsimd, logalle" << endl; qtout << "3) all . commands can be used, e.g. .com1 127.35" << endl; qtout << endl; } else if (line.startsWith(".")) { // handle dot commands bool c = runtime->parseCommandLine(line); if (c) { qtout << "Handled command " << line; } else { qtout << "Not handled " << line; } qtout << endl; } } QCoreApplication::quit(); } } // namespace