1// Copyright (C) 2017 Ford Motor Company
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQREMOTEOBJECTREPLICA_H
5#define QQREMOTEOBJECTREPLICA_H
6
7#include <QtRemoteObjects/qtremoteobjectglobal.h>
8
9#include <QtCore/qobject.h>
10#include <QtCore/qsharedpointer.h>
11
12Q_MOC_INCLUDE(<QtRemoteObjects/qremoteobjectnode.h>)
13
14QT_BEGIN_NAMESPACE
15
16class QObjectPrivate;
17class QRemoteObjectPendingCall;
18class QRemoteObjectReplicaImplementation;
19class QReplicaImplementationInterface;
20class QRemoteObjectNode;
21
22class Q_REMOTEOBJECTS_EXPORT QRemoteObjectReplica : public QObject
23{
24 Q_OBJECT
25 Q_PROPERTY(QRemoteObjectNode *node READ node WRITE setNode)
26 Q_PROPERTY(State state READ state NOTIFY stateChanged)
27public:
28 enum State {
29 Uninitialized,
30 Default,
31 Valid,
32 Suspect,
33 SignatureMismatch
34 };
35 Q_ENUM(State)
36
37public:
38 ~QRemoteObjectReplica() override;
39
40 bool isReplicaValid() const;
41 bool waitForSource(int timeout = 30000);
42 bool isInitialized() const;
43 State state() const;
44 QRemoteObjectNode *node() const;
45 virtual void setNode(QRemoteObjectNode *node);
46
47Q_SIGNALS:
48 void initialized();
49 void notified();
50 void stateChanged(State state, State oldState);
51
52protected:
53 enum ConstructorType {DefaultConstructor, ConstructWithNode};
54 explicit QRemoteObjectReplica(ConstructorType t = DefaultConstructor);
55 QRemoteObjectReplica(QObjectPrivate &dptr, QObject *parent);
56
57 virtual void initialize();
58 void send(QMetaObject::Call call, int index, const QVariantList &args);
59 QRemoteObjectPendingCall sendWithReply(QMetaObject::Call call, int index, const QVariantList &args);
60
61protected:
62 void setProperties(QVariantList &&);
63 void setChild(int i, const QVariant &);
64 const QVariant propAsVariant(int i) const;
65 void persistProperties(const QString &repName, const QByteArray &repSig, const QVariantList &props) const;
66 QVariantList retrieveProperties(const QString &repName, const QByteArray &repSig) const;
67 void initializeNode(QRemoteObjectNode *node, const QString &name = QString());
68 QSharedPointer<QReplicaImplementationInterface> d_impl;
69private:
70 friend class QRemoteObjectNodePrivate;
71 friend class QConnectedReplicaImplementation;
72};
73
74QT_END_NAMESPACE
75
76#endif
77

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