From a97830b7cf1335ca9e39ccf210a6196f017a37f7 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Thu, 21 Aug 2014 11:27:17 +0200 Subject: [PATCH] refs #314, fixed DBus crash because of wrong list type discussion here: https://dev.vatsim-germany.org/boards/22/topics/2006?r=2015#message-2015 * Fixed CIndexVariantMap * In the same step added more tests in the DBus sample --- samples/blackmiscdbus/servicetool.cpp | 16 ++++++++++++++ samples/blackmiscdbus/testservice.cpp | 21 ++++++++++++++++++- samples/blackmiscdbus/testservice_interface.h | 14 +++++++++++++ src/blackmisc/indexvariantmap.cpp | 10 ++++++++- src/blackmisc/indexvariantmap.h | 3 +++ 5 files changed, 62 insertions(+), 2 deletions(-) diff --git a/samples/blackmiscdbus/servicetool.cpp b/samples/blackmiscdbus/servicetool.cpp index 95a4a0ee0..feb09f114 100644 --- a/samples/blackmiscdbus/servicetool.cpp +++ b/samples/blackmiscdbus/servicetool.cpp @@ -127,6 +127,9 @@ namespace BlackMiscTest */ CAtcStationList ServiceTool::getStations(qint32 number) { + QElapsedTimer timer; + timer.start(); + BlackMisc::Aviation::CAtcStationList list; for (int i = 0; i < number; i++) { @@ -138,6 +141,8 @@ namespace BlackMiscTest s.setPosition(CCoordinateGeodetic(i, i, i)); list.push_back(s); } + + qDebug() << number << "stations in" << timer.nsecsElapsed() / 1000000; // ms return list; } @@ -329,6 +334,17 @@ namespace BlackMiscTest qDebug() << "Send geo position" << geoPos; qDebug() << "----------------- pings ----------------"; + CPropertyIndex pi({ 1, 2, 3, 4, 5}); + pi = testserviceInterface.pingPropertyIndex(pi); + qDebug() << "Pinged properties via interface" << pi; + + CIndexVariantMap ivm; + ivm.addValue(1, "one"); + ivm.addValue(2, "two"); + ivm.addValue(3, "three"); + ivm = testserviceInterface.pingIndexVariantMap(ivm); + qDebug() << "Pinged variant map via interface" << ivm; + CAtcStation stationReceived = testserviceInterface.pingAtcStation(station); qDebug() << "Pinged ATC station via interface" << ((station == stationReceived) ? "OK" : "ERROR!") << stationReceived; diff --git a/samples/blackmiscdbus/testservice.cpp b/samples/blackmiscdbus/testservice.cpp index 52405263c..c6176091f 100644 --- a/samples/blackmiscdbus/testservice.cpp +++ b/samples/blackmiscdbus/testservice.cpp @@ -10,6 +10,7 @@ #include "testservice.h" #include "blackmisc/blackmiscfreefunctions.h" +using namespace BlackMisc; using namespace BlackMisc::Aviation; using namespace BlackMisc::Geo; using namespace BlackMisc::PhysicalQuantities; @@ -243,7 +244,7 @@ namespace BlackMiscTest */ CAircraftList Testservice::pingAircraftList(const CAircraftList &aircraftList) { - qDebug() << "Pid:" << ServiceTool::getPid() << "ping ATCs:" << aircraftList; + qDebug() << "Pid:" << ServiceTool::getPid() << "ping aircrafts:" << aircraftList; return aircraftList; } @@ -256,6 +257,24 @@ namespace BlackMiscTest return airportList; } + /* + * Ping property index + */ + CPropertyIndex Testservice::pingPropertyIndex(const CPropertyIndex &properties) + { + qDebug() << "Pid:" << ServiceTool::getPid() << "ping properties:" << properties; + return properties; + } + + /* + * Ping index variant map + */ + CIndexVariantMap Testservice::pingIndexVariantMap(const CIndexVariantMap &indexVariantMap) + { + qDebug() << "Pid:" << ServiceTool::getPid() << "ping properties:" << indexVariantMap; + return indexVariantMap; + } + /* * NW client */ diff --git a/samples/blackmiscdbus/testservice_interface.h b/samples/blackmiscdbus/testservice_interface.h index 53c5c60b9..ec5f8c494 100644 --- a/samples/blackmiscdbus/testservice_interface.h +++ b/samples/blackmiscdbus/testservice_interface.h @@ -143,6 +143,20 @@ namespace BlackMiscTest return asyncCallWithArgumentList(QLatin1String("pingCVariant"), argumentList); } + inline QDBusPendingReply pingPropertyIndex(BlackMisc::CPropertyIndex index) + { + QList argumentList; + argumentList << index.toQVariant(); + return asyncCallWithArgumentList(QLatin1String("pingPropertyIndex"), argumentList); + } + + inline QDBusPendingReply pingIndexVariantMap(BlackMisc::CIndexVariantMap indexVariantMap) + { + QList argumentList; + argumentList << indexVariantMap.toQVariant(); + return asyncCallWithArgumentList(QLatin1String("pingIndexVariantMap"), argumentList); + } + inline QDBusPendingReply receiveAltitude(BlackMisc::Aviation::CAltitude altitude) { QList argumentList; diff --git a/src/blackmisc/indexvariantmap.cpp b/src/blackmisc/indexvariantmap.cpp index 733e80a92..e1b19b76d 100644 --- a/src/blackmisc/indexvariantmap.cpp +++ b/src/blackmisc/indexvariantmap.cpp @@ -107,7 +107,7 @@ namespace BlackMisc */ void CIndexVariantMap::unmarshallFromDbus(const QDBusArgument &argument) { - QList indexes; + QList indexes; QList values; argument >> indexes; argument >> values; @@ -129,6 +129,14 @@ namespace BlackMisc this->m_values.insert(index, value); } + /* + * Add string by literal + */ + void CIndexVariantMap::addValue(const CPropertyIndex &index, const char *str) + { + this->addValue(index, QString(str)); + } + /* * Register metadata */ diff --git a/src/blackmisc/indexvariantmap.h b/src/blackmisc/indexvariantmap.h index a84e84d61..68b7353bf 100644 --- a/src/blackmisc/indexvariantmap.h +++ b/src/blackmisc/indexvariantmap.h @@ -47,6 +47,9 @@ namespace BlackMisc //! Add a value void addValue(const CPropertyIndex &index, const QVariant &value); + //! Add QString as literal, disambiguate as I want to add QString + void addValue(const CPropertyIndex &index, const char* str); + //! Add a value as non QVariant template void addValue(const CPropertyIndex &index, const T &value) { this->m_values.insert(index, CVariant::fromValue(value)); }