summaryrefslogtreecommitdiffstats
path: root/src/protocol/qstconnection.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocol/qstconnection.cpp')
-rw-r--r--src/protocol/qstconnection.cpp263
1 files changed, 263 insertions, 0 deletions
diff --git a/src/protocol/qstconnection.cpp b/src/protocol/qstconnection.cpp
new file mode 100644
index 0000000..c57cae8
--- /dev/null
+++ b/src/protocol/qstconnection.cpp
@@ -0,0 +1,263 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of QtSystemTest.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qstconnection.h"
+#include "qstprotocol.h"
+
+#include <QtCore/QDebug>
+
+const QLatin1String QstConnection::appIdProperty("_appid_");
+const QLatin1String QstConnection::enumProperty("_enum_");
+const QLatin1String QstConnection::signatureProperty("_signature_");
+const QLatin1String QstConnection::valueProperty("_value_");
+const QLatin1String QstConnection::widgetSpecifierProperty("widgetSpecifier");
+
+QstConnection::QstConnection(QObject *parent)
+ : QstProtocol(parent)
+{
+}
+
+QstConnection::QstConnection(const QString &host, int port, QObject *parent)
+ : QstProtocol(parent)
+ , m_host(host)
+ , m_port(port)
+ , m_queryFailed(false)
+{
+}
+
+void QstConnection::processMessage( QstMessage *msg )
+{
+ if (!msg) return;
+
+ if (msg->event() == QLatin1String("APP_STARTED")) {
+ emit appStarted(msg->context());
+ } else if (msg->event() == QLatin1String("APP_FINISHED")) {
+ emit appFinished(msg->context());
+ } else {
+ emit messageReceived(msg->event(), msg->context(), msg->toMap());
+ }
+}
+
+bool QstConnection::connectToRemote()
+{
+ if (isConnected()) {
+ qDebug() << Q_FUNC_INFO << "Already connected to "<< m_host;
+ return true;
+ }
+
+ QTime t;
+ t.start();
+ while (t.elapsed() < 10000 && !isConnected()) {
+ QstProtocol::connect(m_host, m_port);
+ waitForConnected(2000);
+ }
+
+ if (!isConnected()) {
+ qDebug() << Q_FUNC_INFO << "Could not connect to " << m_host << ':' << m_port;
+/// FIXME: is this needed?
+// errorMsg = errorStr() ;
+ return false;
+ }
+
+ return true;
+}
+
+QVariantMap QstConnection::sendQuery(const QString &event, const QVariantMap &params, const QVariantMap &widgetSpecifier)
+{
+ QstMessage message(event, params);
+// qDebug() << "message " << event << message.toMap();
+ message[widgetSpecifierProperty] = widgetSpecifier[signatureProperty].toString();
+ if (widgetSpecifier.contains(appIdProperty)) {
+ qDebug() << " context set ";
+ message.setContext(widgetSpecifier[appIdProperty].toString());
+ }
+ else if (params.contains(appIdProperty)) {
+ message.setContext(params[appIdProperty].toString());
+ }
+
+ m_queryFailed = false;
+ QstMessage reply;
+ if (!sendMessage( message, reply, 10000 )) {
+ // Unable to send - should fail test
+ qDebug() << "Failed to send message";
+ m_queryFailed = true;
+ return reply.toMap();
+ }
+
+ return reply.toMap();
+}
+
+QVariantMap QstConnection::sendPositionQuery(const QString &event, const QVariantMap &params, const QPointF &position)
+{
+// qDebug() << event << position;
+ QVariantMap _params(params);
+ _params["pos"] = position;
+ return sendQuery(event, _params);
+}
+
+
+QVariantMap QstConnection::applicationData(const QString &appId)
+{
+ QstMessage message("applicationData");
+ if (!appId.isEmpty()) {
+ message.setContext(appId);
+ }
+
+ QVariantMap ret;
+ QstMessage reply;
+ if (!sendMessage(message, reply, 10000)) {
+ return ret;
+ }
+ ret = reply["applicationdata"].toMap();
+ return ret;
+}
+
+QImage QstConnection::grabImage(const QVariantMap &widgetSpecifier)
+{
+ QImage im;
+ QVariantMap reply = sendQuery("grabImage", QVariantMap(), widgetSpecifier);
+ if (!m_queryFailed) {
+ im = reply["grabimage"].value<QImage>();
+ }
+ return im;
+}
+
+QVariantMap QstConnection::getObjects( const QVariantMap &widgetSpecifier )
+{
+ QVariantMap map;
+ QVariantMap reply = sendQuery("getObjects", QVariantMap(), widgetSpecifier);
+ if (!m_queryFailed) {
+ map = reply["getobjects"].toMap();
+ }
+ return map;
+}
+
+QVariantMap QstConnection::getProperties( const QVariantMap &widgetSpecifier )
+{
+ QVariantMap ret;
+ QVariantMap reply = sendQuery("getProperties", QVariantMap(), widgetSpecifier);
+ if (!m_queryFailed) {
+ ret = reply["getproperties"].toMap();
+ }
+ return ret;
+}
+
+QVariantList QstConnection::getMethods( const QVariantMap &widgetSpecifier )
+{
+ QVariantList ret;
+ QVariantMap reply = sendQuery("getMethods", QVariantMap(), widgetSpecifier);
+ if (!m_queryFailed) {
+ ret = reply["getmethods"].toList();
+ }
+ return ret;
+}
+
+QVariantMap QstConnection::widgetFromSignature( const QString &signature, const QString &appId )
+{
+ QVariantMap ret;
+ ret[signatureProperty] = signature;
+ if (!appId.isEmpty())
+ ret[appIdProperty] = appId;
+
+ return ret;
+}
+
+QStringList QstConnection::getAppIds(const QString &name)
+{
+ QVariantMap params;
+ if (!name.isEmpty()) {
+ params["name"] = name;
+ }
+ QStringList ret;
+ QVariantMap reply = sendQuery("getApplications", params);
+ if (!m_queryFailed) {
+ ret = reply["getapplications"].toStringList();
+ }
+ return ret;
+}
+
+QString QstConnection::currentAppId()
+{
+ QString ret;
+ QVariantMap reply = sendQuery("currentApplication", QVariantMap());
+ if (!m_queryFailed) {
+ ret = reply["currentapplication"].toString();
+ }
+ return ret;
+}
+
+QString QstConnection::homeAppId()
+{
+ QString ret;
+ QVariantMap reply = sendQuery("homeApplication", QVariantMap());
+ if (!m_queryFailed) {
+ ret = reply["homeapplication"].toString();
+ }
+ return ret;
+}
+
+void QstConnection::setAppId(const QString& appId)
+{
+ QstMessage message("setApplication");
+ message.setContext(appId);
+
+ QstMessage reply;
+ sendMessage(message, reply, 10000);
+}
+
+QStringList QstConnection::findByProperties( const QVariantMap &searchValues, int flags )
+{
+ QVariantMap params;
+ params["searchvalues"] = searchValues;
+ params["flags"] = flags;
+
+ QStringList ret;
+ QVariantMap reply = sendQuery("queryProperties", params);
+
+ if (!m_queryFailed) {
+ QVariantList matches = reply["queryproperties"].toList();
+ foreach (const QVariant &item, matches)
+ {
+ ret << item.toMap()[signatureProperty].toString();
+ }
+ }
+ return ret;
+}