1/****************************************************************************
2**
3** Copyright (C) 2017 Ford Motor Company
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the QtRemoteObjects module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPL3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or (at your option) the GNU General
28** Public license version 3 or any later version approved by the KDE Free
29** Qt Foundation. The licenses are as published by the Free Software
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
31** included in the packaging of this file. Please review the following
32** information to ensure the GNU General Public License requirements will
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and
34** https://www.gnu.org/licenses/gpl-3.0.html.
35**
36** $QT_END_LICENSE$
37**
38****************************************************************************/
39
40#ifndef QQREMOTEOBJECTREPLICA_H
41#define QQREMOTEOBJECTREPLICA_H
42
43#include <QtRemoteObjects/qtremoteobjectglobal.h>
44
45#include <QtCore/qsharedpointer.h>
46
47QT_BEGIN_NAMESPACE
48
49class QObjectPrivate;
50class QRemoteObjectPendingCall;
51class QRemoteObjectReplicaImplementation;
52class QReplicaImplementationInterface;
53class QRemoteObjectNode;
54
55class Q_REMOTEOBJECTS_EXPORT QRemoteObjectReplica : public QObject
56{
57 Q_OBJECT
58 Q_PROPERTY(QRemoteObjectNode *node READ node WRITE setNode)
59 Q_PROPERTY(State state READ state NOTIFY stateChanged)
60public:
61 enum State {
62 Uninitialized,
63 Default,
64 Valid,
65 Suspect,
66 SignatureMismatch
67 };
68 Q_ENUM(State)
69
70public:
71 ~QRemoteObjectReplica() override;
72
73 bool isReplicaValid() const;
74 bool waitForSource(int timeout = 30000);
75 bool isInitialized() const;
76 State state() const;
77 QRemoteObjectNode *node() const;
78 virtual void setNode(QRemoteObjectNode *node);
79
80Q_SIGNALS:
81 void initialized();
82 void notified();
83 void stateChanged(State state, State oldState);
84
85protected:
86 enum ConstructorType {DefaultConstructor, ConstructWithNode};
87 explicit QRemoteObjectReplica(ConstructorType t = DefaultConstructor);
88 QRemoteObjectReplica(QObjectPrivate &dptr, QObject *parent);
89
90 virtual void initialize();
91 void send(QMetaObject::Call call, int index, const QVariantList &args);
92 QRemoteObjectPendingCall sendWithReply(QMetaObject::Call call, int index, const QVariantList &args);
93
94protected:
95 void setProperties(const QVariantList &);
96 void setChild(int i, const QVariant &);
97 const QVariant propAsVariant(int i) const;
98 void persistProperties(const QString &repName, const QByteArray &repSig, const QVariantList &props) const;
99 QVariantList retrieveProperties(const QString &repName, const QByteArray &repSig) const;
100 void initializeNode(QRemoteObjectNode *node, const QString &name = QString());
101 QSharedPointer<QReplicaImplementationInterface> d_impl;
102private:
103 friend class QRemoteObjectNodePrivate;
104 friend class QConnectedReplicaImplementation;
105};
106
107QT_END_NAMESPACE
108
109#endif
110

source code of qtremoteobjects/src/remoteobjects/qremoteobjectreplica.h