From 9e039ccca259e7d86ca6f6d9603b7c6d89d7a4d6 Mon Sep 17 00:00:00 2001 From: Zsolt Simon Date: Wed, 18 Jan 2012 11:19:15 +1000 Subject: move simulator connection to a thread Change-Id: Ice70c7f35315f50e82270961a38d6b130651f76d Sanity-Review: Qt Sanity Bot Reviewed-by: Lincoln Ramsay --- src/plugins/sensors/simulator/simulatorcommon.cpp | 89 ++++++++++++++++++++--- src/plugins/sensors/simulator/simulatorcommon.h | 9 +-- 2 files changed, 81 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/plugins/sensors/simulator/simulatorcommon.cpp b/src/plugins/sensors/simulator/simulatorcommon.cpp index bd0a7dcd..ad7c50ed 100644 --- a/src/plugins/sensors/simulator/simulatorcommon.cpp +++ b/src/plugins/sensors/simulator/simulatorcommon.cpp @@ -43,6 +43,7 @@ #include "qsensordata_simulator_p.h" #include #include +#include using namespace Simulator; @@ -54,24 +55,91 @@ Q_GLOBAL_STATIC(QtMobility::QCompassReadingData, qtCompassData) Q_GLOBAL_STATIC(QtMobility::QProximityReadingData, qtProximityData) Q_GLOBAL_STATIC(SensorsConnection, sensorsConnection) +class SimulatorAsyncConnection: public QThread +{ + Q_OBJECT +public: + SimulatorAsyncConnection() + : QThread() + { + QtMobility::qt_registerSensorTypes(); + + moveToThread(this); + connect(this, SIGNAL(queueConnectToServer()), + this, SLOT(doConnectToServer()), + Qt::QueuedConnection); + + start(); + } + + ~SimulatorAsyncConnection() + { + quit(); + wait(); + } + + void connectToServer() + { + emit queueConnectToServer(); + } + +signals: + void queueConnectToServer(); + + void initialSensorsDataSent(); + void setAmbientLightData(const QtMobility::QAmbientLightReadingData &); + void setLightData(const QtMobility::QLightReadingData &); + void setAccelerometerData(const QtMobility::QAccelerometerReadingData &); + void setMagnetometerData(const QtMobility::QMagnetometerReadingData &); + void setCompassData(const QtMobility::QCompassReadingData &); + void setProximityData(const QtMobility::QProximityReadingData &); + +private slots: + void doConnectToServer() + { + mConnection.reset(new Connection(Connection::Client, "QtSimulator_Mobility_ServerName1.3.0.0", + 0xbeef+1, Version(1,0,0,0), this)); + mWorker.reset(mConnection->connectToServer(Connection::simulatorHostName(true), 0xbeef+1)); + if (!mWorker) { + qWarning("QtSensors simulator backend could not connect to the simulator!"); + return; + } + mWorker->addReceiver(this); + mWorker->call("setRequestsSensors"); + } + +private: + QScopedPointer mConnection; + QScopedPointer mWorker; +}; + SensorsConnection::SensorsConnection(QObject *parent) : QObject(parent) , mInitialDataSent(false) { - QtMobility::qt_registerSensorTypes(); - mConnection = new Connection(Connection::Client, "QtSimulator_Mobility_ServerName1.3.0.0", 0xbeef+1, Version(1,0,0,0), this); - mWorker = mConnection->connectToServer(Connection::simulatorHostName(true), 0xbeef+1); - if (!mWorker) { - qWarning("QtSensors simulator backend could not connect to the simulator!"); - return; - } - mWorker->addReceiver(this); - mWorker->call("setRequestsSensors"); + mConnection = new SimulatorAsyncConnection(); + + connect(mConnection, SIGNAL(initialSensorsDataSent()), + this, SLOT(initialSensorsDataSent())); + connect(mConnection, SIGNAL(setAmbientLightData(QtMobility::QAmbientLightReadingData)), + this, SLOT(setAmbientLightData(QtMobility::QAmbientLightReadingData))); + connect(mConnection, SIGNAL(setLightData(QtMobility::QLightReadingData)), + this, SLOT(setLightData(QtMobility::QLightReadingData))); + connect(mConnection, SIGNAL(setAccelerometerData(QtMobility::QAccelerometerReadingData)), + this, SLOT(setAccelerometerData(QtMobility::QAccelerometerReadingData))); + connect(mConnection, SIGNAL(setMagnetometerData(QtMobility::QMagnetometerReadingData)), + this, SLOT(setMagnetometerData(QtMobility::QMagnetometerReadingData))); + connect(mConnection, SIGNAL(setCompassData(QtMobility::QCompassReadingData)), + this, SLOT(setCompassData(QtMobility::QCompassReadingData))); + connect(mConnection, SIGNAL(setProximityData(QtMobility::QProximityReadingData)), + this, SLOT(setProximityData(QtMobility::QProximityReadingData))); + + mConnection->connectToServer(); } SensorsConnection::~SensorsConnection() { - delete mWorker; + delete mConnection; } void SensorsConnection::setAmbientLightData(const QtMobility::QAmbientLightReadingData &data) @@ -178,3 +246,4 @@ QtMobility::QProximityReadingData get_qtProximityData() return *qtProximityData(); } +#include "simulatorcommon.moc" diff --git a/src/plugins/sensors/simulator/simulatorcommon.h b/src/plugins/sensors/simulator/simulatorcommon.h index 0a0e8b09..6eb2517e 100644 --- a/src/plugins/sensors/simulator/simulatorcommon.h +++ b/src/plugins/sensors/simulator/simulatorcommon.h @@ -47,11 +47,7 @@ class QTimer; -namespace Simulator -{ - class Connection; - class ConnectionWorker; -} +class SimulatorAsyncConnection; class SensorsConnection : public QObject { @@ -72,8 +68,7 @@ public slots: void initialSensorsDataSent(); private: - Simulator::Connection *mConnection; - Simulator::ConnectionWorker *mWorker; + SimulatorAsyncConnection *mConnection; bool mInitialDataSent; }; -- cgit v1.2.3