+public:
+ SyncableObject(QObject* parent = nullptr);
+ SyncableObject(const QString& objectName, QObject* parent = nullptr);
+ ~SyncableObject() override;
+
+ //! Stores the object's state into a QVariantMap.
+ /** The default implementation takes dynamic properties as well as getters that have
+ * names starting with "init" and stores them in a QVariantMap. Override this method in
+ * derived classes in order to store the object state in a custom form.
+ * \note This is used by SignalProxy to transmit the state of the object to clients
+ * that request the initial object state. Later updates use a different mechanism
+ * and assume that the state is completely covered by properties and init* getters.
+ * DO NOT OVERRIDE THIS unless you know exactly what you do!
+ *
+ * \return The object's state in a QVariantMap
+ */
+ virtual QVariantMap toVariantMap();
+
+ //! Initialize the object's state from a given QVariantMap.
+ /** \see toVariantMap() for important information concerning this method.
+ */
+ virtual void fromVariantMap(const QVariantMap& properties);
+
+ virtual bool isInitialized() const;
+
+ virtual const QMetaObject* syncMetaObject() const { return metaObject(); }
+
+ inline void setAllowClientUpdates(bool allow) { _allowClientUpdates = allow; }
+ inline bool allowClientUpdates() const { return _allowClientUpdates; }