summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Stottlemyer <bstottle@ford.com>2020-07-08 09:38:40 -0400
committerSona Kurazyan <sona.kurazyan@qt.io>2021-05-27 18:18:07 +0200
commitcab52cc47d5688b64bf8c0d8bf6cafdd4055b540 (patch)
treee442a3ded307908327cb96cc04d7a92c6bf7c5d8
parent72b5ed2e32c52c98e2070988f5fd8eaf85821bb7 (diff)
Move classes for adding a custom transport protocol to a public header
Although these classes weren't documented, they could be used externally to specify a custom transport via inheriting from them and registering the custom classes using qRegisterRemoteObjectsClient() and qRegisterRemoteObjectsServer() methods. Change-Id: Id4cfddf77cd5b55278b5780f4fca447f0706d464 Reviewed-by: Brett Stottlemyer <bstottle@ford.com> Reviewed-by: Michael Brasser <michael.brasser@live.com>
-rw-r--r--src/remoteobjects/CMakeLists.txt2
-rw-r--r--src/remoteobjects/qconnectionfactories.cpp37
-rw-r--r--src/remoteobjects/qconnectionfactories.h247
-rw-r--r--src/remoteobjects/qconnectionfactories_p.h198
4 files changed, 274 insertions, 210 deletions
diff --git a/src/remoteobjects/CMakeLists.txt b/src/remoteobjects/CMakeLists.txt
index 9105783..3b12302 100644
--- a/src/remoteobjects/CMakeLists.txt
+++ b/src/remoteobjects/CMakeLists.txt
@@ -8,7 +8,7 @@ qt_internal_add_module(RemoteObjects
SOURCES
qconnection_local_backend.cpp qconnection_local_backend_p.h
qconnection_tcpip_backend.cpp qconnection_tcpip_backend_p.h
- qconnectionfactories.cpp qconnectionfactories_p.h
+ qconnectionfactories.cpp qconnectionfactories.h qconnectionfactories_p.h
qremoteobjectabstractitemmodeladapter.cpp qremoteobjectabstractitemmodeladapter_p.h
qremoteobjectabstractitemmodelreplica.cpp qremoteobjectabstractitemmodelreplica.h qremoteobjectabstractitemmodelreplica_p.h
qremoteobjectabstractitemmodeltypes.h
diff --git a/src/remoteobjects/qconnectionfactories.cpp b/src/remoteobjects/qconnectionfactories.cpp
index af674d0..3a6b668 100644
--- a/src/remoteobjects/qconnectionfactories.cpp
+++ b/src/remoteobjects/qconnectionfactories.cpp
@@ -37,10 +37,8 @@
**
****************************************************************************/
-#include <QtCore/private/qobject_p.h>
-
-#include "qconnectionfactories_p.h"
#include "qconnectionfactories_p.h"
+#include "qremoteobjectpacket_p.h"
// BEGIN: Backends
#if defined(Q_OS_QNX)
@@ -63,34 +61,6 @@ public:
Q_GLOBAL_STATIC(QtROFactoryLoader, loader)
-class IoDeviceBasePrivate : public QObjectPrivate
-{
-public:
- IoDeviceBasePrivate() : QObjectPrivate() { m_dataStream.setVersion(dataStreamVersion); }
- ~IoDeviceBasePrivate() = default;
- bool m_isClosing = false;
- quint32 m_curReadSize = 0;
- QDataStream m_dataStream;
- QSet<QString> m_remoteObjects;
- Q_DECLARE_PUBLIC(IoDeviceBase)
-};
-
-class ClientIoDevicePrivate : public IoDeviceBasePrivate
-{
-public:
- ClientIoDevicePrivate() : IoDeviceBasePrivate() { }
- QUrl m_url;
- Q_DECLARE_PUBLIC(ClientIoDevice)
-};
-
-class ExternalIoDevicePrivate : public IoDeviceBasePrivate
-{
-public:
- ExternalIoDevicePrivate(QIODevice *device) : IoDeviceBasePrivate(), m_device(device) { }
- QPointer<QIODevice> m_device;
- Q_DECLARE_PUBLIC(ExternalIoDevice)
-};
-
inline bool fromDataStream(QDataStream &in, QRemoteObjectPacketTypeEnum &type, QString &name)
{
quint16 _type;
@@ -418,3 +388,8 @@ QtROClientFactory *QtROClientFactory::instance()
*/
QT_END_NAMESPACE
+
+IoDeviceBasePrivate::IoDeviceBasePrivate() : QObjectPrivate()
+{
+ m_dataStream.setVersion(dataStreamVersion);
+}
diff --git a/src/remoteobjects/qconnectionfactories.h b/src/remoteobjects/qconnectionfactories.h
new file mode 100644
index 0000000..777a32c
--- /dev/null
+++ b/src/remoteobjects/qconnectionfactories.h
@@ -0,0 +1,247 @@
+/****************************************************************************
+**
+** Copyright (C) 2021 Ford Motor Company
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtRemoteObjects module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QCONNECTIONFACTORIES_H
+#define QCONNECTIONFACTORIES_H
+
+//
+// N O T E
+// -------
+//
+// This file includes "internal" components. They are exported
+// to allow new QIODevice channels to be added to extend QtRO.
+//
+
+#include <QtNetwork/qabstractsocket.h>
+
+#include <QtRemoteObjects/qtremoteobjectglobal.h>
+
+
+QT_BEGIN_NAMESPACE
+
+class IoDeviceBasePrivate;
+class ClientIoDevicePrivate;
+class ExternalIoDevicePrivate;
+
+class Q_REMOTEOBJECTS_EXPORT IoDeviceBase : public QObject
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(IoDeviceBase)
+
+public:
+ explicit IoDeviceBase(QObject *parent = nullptr);
+ ~IoDeviceBase() override;
+
+ bool read(QtRemoteObjects::QRemoteObjectPacketTypeEnum &, QString &);
+
+ virtual void write(const QByteArray &data);
+ virtual void write(const QByteArray &data, qint64);
+ virtual bool isOpen() const;
+ virtual void close();
+ virtual qint64 bytesAvailable() const;
+ virtual QIODevice *connection() const = 0;
+ void initializeDataStream();
+ // TODO Remove stream()
+ QDataStream &stream();
+ bool isClosing() const;
+ void addSource(const QString &);
+ void removeSource(const QString &);
+ QSet<QString> remoteObjects() const;
+
+Q_SIGNALS:
+ void readyRead();
+ void disconnected();
+
+protected:
+ explicit IoDeviceBase(IoDeviceBasePrivate &, QObject *parent);
+ virtual QString deviceType() const = 0;
+ virtual void doClose() = 0;
+
+private:
+ Q_DECLARE_PRIVATE(IoDeviceBase)
+};
+
+class Q_REMOTEOBJECTS_EXPORT ServerIoDevice : public IoDeviceBase
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(ServerIoDevice)
+
+public:
+ explicit ServerIoDevice(QObject *parent = nullptr);
+
+protected:
+ QString deviceType() const override;
+};
+
+class Q_REMOTEOBJECTS_EXPORT QConnectionAbstractServer : public QObject
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(QConnectionAbstractServer)
+
+public:
+ explicit QConnectionAbstractServer(QObject *parent = nullptr);
+ ~QConnectionAbstractServer() override;
+
+ virtual bool hasPendingConnections() const = 0;
+ ServerIoDevice* nextPendingConnection();
+ virtual QUrl address() const = 0;
+ virtual bool listen(const QUrl &address) = 0;
+ virtual QAbstractSocket::SocketError serverError() const = 0;
+ virtual void close() = 0;
+
+protected:
+ virtual ServerIoDevice* configureNewConnection() = 0;
+
+Q_SIGNALS:
+ void newConnection();
+};
+
+class Q_REMOTEOBJECTS_EXPORT ClientIoDevice : public IoDeviceBase
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(ClientIoDevice)
+
+public:
+ explicit ClientIoDevice(QObject *parent = nullptr);
+ ~ClientIoDevice() override;
+
+ void disconnectFromServer();
+ virtual void connectToServer() = 0;
+
+ QUrl url() const;
+
+Q_SIGNALS:
+ void shouldReconnect(ClientIoDevice*);
+
+protected:
+ virtual void doDisconnectFromServer() = 0;
+ QString deviceType() const override;
+ void setUrl(const QUrl &url);
+
+private:
+ Q_DECLARE_PRIVATE(ClientIoDevice)
+ friend class QtROClientFactory;
+};
+
+class QtROServerFactory
+{
+public:
+ Q_REMOTEOBJECTS_EXPORT static QtROServerFactory *instance();
+
+ QConnectionAbstractServer *create(const QUrl &url, QObject *parent = nullptr)
+ {
+ auto creatorFunc = m_creatorFuncs.value(url.scheme());
+ return creatorFunc ? (*creatorFunc)(parent) : nullptr;
+ }
+
+ template<typename T>
+ void registerType(const QString &id)
+ {
+ m_creatorFuncs[id] = [](QObject *parent) -> QConnectionAbstractServer * {
+ return new T(parent);
+ };
+ }
+
+ bool isValid(const QUrl &url)
+ {
+ return m_creatorFuncs.contains(url.scheme());
+ }
+
+private:
+ friend class QtROFactoryLoader;
+ QtROServerFactory();
+
+ using CreatorFunc = QConnectionAbstractServer * (*)(QObject *);
+ QHash<QString, CreatorFunc> m_creatorFuncs;
+};
+
+class QtROClientFactory
+{
+public:
+ Q_REMOTEOBJECTS_EXPORT static QtROClientFactory *instance();
+
+ /// creates an object from a string
+ ClientIoDevice *create(const QUrl &url, QObject *parent = nullptr)
+ {
+ auto creatorFunc = m_creatorFuncs.value(url.scheme());
+ if (!creatorFunc)
+ return nullptr;
+
+ ClientIoDevice *res = (*creatorFunc)(parent);
+ if (res)
+ res->setUrl(url);
+ return res;
+ }
+
+ template<typename T>
+ void registerType(const QString &id)
+ {
+ m_creatorFuncs[id] = [](QObject *parent) -> ClientIoDevice * {
+ return new T(parent);
+ };
+ }
+
+ bool isValid(const QUrl &url)
+ {
+ return m_creatorFuncs.contains(url.scheme());
+ }
+
+private:
+ friend class QtROFactoryLoader;
+ QtROClientFactory();
+
+ using CreatorFunc = ClientIoDevice * (*)(QObject *);
+ QHash<QString, CreatorFunc> m_creatorFuncs;
+};
+
+template <typename T>
+inline void qRegisterRemoteObjectsClient(const QString &id)
+{
+ QtROClientFactory::instance()->registerType<T>(id);
+}
+
+template <typename T>
+inline void qRegisterRemoteObjectsServer(const QString &id)
+{
+ QtROServerFactory::instance()->registerType<T>(id);
+}
+
+QT_END_NAMESPACE
+
+#endif // QCONNECTIONFACTORIES_H
diff --git a/src/remoteobjects/qconnectionfactories_p.h b/src/remoteobjects/qconnectionfactories_p.h
index a5f7a78..c9bde88 100644
--- a/src/remoteobjects/qconnectionfactories_p.h
+++ b/src/remoteobjects/qconnectionfactories_p.h
@@ -51,12 +51,13 @@
// We mean it.
//
-#include <QtNetwork/qabstractsocket.h>
#include <QtCore/qdatastream.h>
#include <QtCore/qiodevice.h>
#include <QtCore/qpointer.h>
+#include <QtCore/private/qobject_p.h>
#include <QtRemoteObjects/qtremoteobjectglobal.h>
+#include <QtRemoteObjects/qconnectionfactories.h>
QT_BEGIN_NAMESPACE
@@ -67,109 +68,6 @@ static const QLatin1String protocolVersion("QtRO 1.3");
}
-class IoDeviceBasePrivate;
-class ClientIoDevicePrivate;
-class ExternalIoDevicePrivate;
-class Q_REMOTEOBJECTS_EXPORT IoDeviceBase : public QObject
-{
- Q_OBJECT
- Q_DISABLE_COPY(IoDeviceBase)
-
-public:
- explicit IoDeviceBase(QObject *parent = nullptr);
- ~IoDeviceBase() override;
-
- bool read(QtRemoteObjects::QRemoteObjectPacketTypeEnum &, QString &);
-
- virtual void write(const QByteArray &data);
- virtual void write(const QByteArray &data, qint64);
- virtual bool isOpen() const;
- virtual void close();
- virtual qint64 bytesAvailable() const;
- virtual QIODevice *connection() const = 0;
- void initializeDataStream();
- // TODO Remove stream()
- QDataStream &stream();
- bool isClosing() const;
- void addSource(const QString &);
- void removeSource(const QString &);
- QSet<QString> remoteObjects() const;
-
-Q_SIGNALS:
- void readyRead();
- void disconnected();
-
-protected:
- explicit IoDeviceBase(IoDeviceBasePrivate &, QObject *parent);
- virtual QString deviceType() const = 0;
- virtual void doClose() = 0;
-
-private:
- Q_DECLARE_PRIVATE(IoDeviceBase)
-};
-
-class Q_REMOTEOBJECTS_EXPORT ServerIoDevice : public IoDeviceBase
-{
- Q_OBJECT
- Q_DISABLE_COPY(ServerIoDevice)
-
-public:
- explicit ServerIoDevice(QObject *parent = nullptr);
-
-protected:
- QString deviceType() const override;
-};
-
-class Q_REMOTEOBJECTS_EXPORT QConnectionAbstractServer : public QObject
-{
- Q_OBJECT
- Q_DISABLE_COPY(QConnectionAbstractServer)
-
-public:
- explicit QConnectionAbstractServer(QObject *parent = nullptr);
- ~QConnectionAbstractServer() override;
-
- virtual bool hasPendingConnections() const = 0;
- ServerIoDevice* nextPendingConnection();
- virtual QUrl address() const = 0;
- virtual bool listen(const QUrl &address) = 0;
- virtual QAbstractSocket::SocketError serverError() const = 0;
- virtual void close() = 0;
-
-protected:
- virtual ServerIoDevice* configureNewConnection() = 0;
-
-Q_SIGNALS:
- void newConnection();
-};
-
-class Q_REMOTEOBJECTS_EXPORT ClientIoDevice : public IoDeviceBase
-{
- Q_OBJECT
- Q_DISABLE_COPY(ClientIoDevice)
-
-public:
- explicit ClientIoDevice(QObject *parent = nullptr);
- ~ClientIoDevice() override;
-
- void disconnectFromServer();
- virtual void connectToServer() = 0;
-
- QUrl url() const;
-
-Q_SIGNALS:
- void shouldReconnect(ClientIoDevice*);
-
-protected:
- virtual void doDisconnectFromServer() = 0;
- QString deviceType() const override;
- void setUrl(const QUrl &url);
-
-private:
- Q_DECLARE_PRIVATE(ClientIoDevice)
- friend class QtROClientFactory;
-};
-
class ExternalIoDevice : public IoDeviceBase
{
Q_OBJECT
@@ -182,93 +80,37 @@ public:
protected:
void doClose() override;
QString deviceType() const override;
-
private:
Q_DECLARE_PRIVATE(ExternalIoDevice)
};
-class QtROServerFactory
+class IoDeviceBasePrivate : public QObjectPrivate
{
public:
- Q_REMOTEOBJECTS_EXPORT static QtROServerFactory *instance();
-
- QConnectionAbstractServer *create(const QUrl &url, QObject *parent = nullptr)
- {
- auto creatorFunc = m_creatorFuncs.value(url.scheme());
- return creatorFunc ? (*creatorFunc)(parent) : nullptr;
- }
-
- template<typename T>
- void registerType(const QString &id)
- {
- m_creatorFuncs[id] = [](QObject *parent) -> QConnectionAbstractServer * {
- return new T(parent);
- };
- }
-
- bool isValid(const QUrl &url)
- {
- return m_creatorFuncs.contains(url.scheme());
- }
-
-private:
- friend class QtROFactoryLoader;
- QtROServerFactory();
-
- using CreatorFunc = QConnectionAbstractServer * (*)(QObject *);
- QHash<QString, CreatorFunc> m_creatorFuncs;
+ IoDeviceBasePrivate();
+ ~IoDeviceBasePrivate() = default;
+ bool m_isClosing = false;
+ quint32 m_curReadSize = 0;
+ QDataStream m_dataStream;
+ QSet<QString> m_remoteObjects;
+ Q_DECLARE_PUBLIC(IoDeviceBase)
};
-class QtROClientFactory
+class ClientIoDevicePrivate : public IoDeviceBasePrivate
{
public:
- Q_REMOTEOBJECTS_EXPORT static QtROClientFactory *instance();
-
- /// creates an object from a string
- ClientIoDevice *create(const QUrl &url, QObject *parent = nullptr)
- {
- auto creatorFunc = m_creatorFuncs.value(url.scheme());
- if (!creatorFunc)
- return nullptr;
-
- ClientIoDevice *res = (*creatorFunc)(parent);
- if (res)
- res->setUrl(url);
- return res;
- }
-
- template<typename T>
- void registerType(const QString &id)
- {
- m_creatorFuncs[id] = [](QObject *parent) -> ClientIoDevice * {
- return new T(parent);
- };
- }
-
- bool isValid(const QUrl &url)
- {
- return m_creatorFuncs.contains(url.scheme());
- }
-
-private:
- friend class QtROFactoryLoader;
- QtROClientFactory();
-
- using CreatorFunc = ClientIoDevice * (*)(QObject *);
- QHash<QString, CreatorFunc> m_creatorFuncs;
+ ClientIoDevicePrivate() : IoDeviceBasePrivate() { }
+ QUrl m_url;
+ Q_DECLARE_PUBLIC(ClientIoDevice)
};
-template <typename T>
-inline void qRegisterRemoteObjectsClient(const QString &id)
-{
- QtROClientFactory::instance()->registerType<T>(id);
-}
-
-template <typename T>
-inline void qRegisterRemoteObjectsServer(const QString &id)
+class ExternalIoDevicePrivate : public IoDeviceBasePrivate
{
- QtROServerFactory::instance()->registerType<T>(id);
-}
+public:
+ ExternalIoDevicePrivate(QIODevice *device) : IoDeviceBasePrivate(), m_device(device) { }
+ QPointer<QIODevice> m_device;
+ Q_DECLARE_PUBLIC(ExternalIoDevice)
+};
QT_END_NAMESPACE