Spec-Zone.ru › Qt 5.15

Класс QRemoteObjectNode

Узел в сети Qt Remote Objects. Подробнее...

Заголовок: #include <QRemoteObjectNode>
qmake: QT += remoteobjects
Создается из: Узел
Наследует: QObject
Наследуется от:

QRemoteObjectHostBase

  • Список всех членов, включая унаследованные

Открытые типы

перечисление ErrorCode { NoError, RegistryNotAcquired, RegistryAlreadyHosted, NodeIsNoServer, ServerAlreadyCreated, …, ListenFailed }
typedef RemoteObjectSchemaHandler

Свойства

  • heartbeatInterval : int
  • persistedStore : QRemoteObjectAbstractPersistedStore*
  • registryUrl : QUrl

Открытые функции

QRemoteObjectNode(const QUrl &registryAddress, QObject *parent = nullptr)
QRemoteObjectNode(QObject *parent = nullptr)
ObjectType * acquire(const QString &name = QString())
QRemoteObjectDynamicReplica * acquireDynamic(const QString &name)
QAbstractItemModelReplica * acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QVector<int> &rolesHint = {})
void addClientSideConnection(QIODevice *ioDevice)
bool connectToNode(const QUrl &address)
int heartbeatInterval() const
QStringList instances() const
QStringList instances(const QString &typeName) const
QRemoteObjectNode::ErrorCode lastError() const
QRemoteObjectAbstractPersistedStore * persistedStore() const
void registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)
const QRemoteObjectRegistry * registry() const
QUrl registryUrl() const
void setHeartbeatInterval(int interval)
virtual void setName(const QString &name)
void setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore)
virtual bool setRegistryUrl(const QUrl &registryAddress)
bool waitForRegistry(int timeout = 30000)

Сигналы

void heartbeatIntervalChanged(int heartbeatInterval)
void remoteObjectAdded(const QRemoteObjectSourceLocation &loc)
void remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)

Переопределенные защищенные функции

virtual void timerEvent(QTimerEvent *) override

Подробное описание

Класс QRemoteObjectNode предоставляет точку входа в сеть QtRemoteObjects. Сеть может быть простой, например, из двух узлов, или произвольно сложной, состоящей из множества процессов и устройств.

Узел QRemoteObjectNode не имеет URL, к которому другие узлы могут подключиться, и поэтому может получать только реплики. Он не может обмениваться исходными объектами (только узлы QRemoteObjectHost и QRemoteObjectRegistryHost могут обмениваться).

Узлы могут подключаться друг к другу напрямую с помощью connectToNode, или они могут использовать QRemoteObjectRegistry для упрощения подключений.

Регистр QRemoteObjectRegistry — это специальная реплика, доступная каждому узлу, подключенному к URL-адресу реестра. Он знает, как подключиться к каждому объекту QRemoteObjectSource в сети.

См. также QRemoteObjectHost и QRemoteObjectRegistryHost.

Документация по типам членов

перечисление QRemoteObjectNode::ErrorCode

Это перечисление определяет различные коды ошибок, связанные с ошибками QRemoteObjectNode:

Постоянная Значение Описание
QRemoteObjectNode::NoError 0 Нет ошибок.
QRemoteObjectNode::RegistryNotAcquired 1 Реестр не может быть получен.
QRemoteObjectNode::RegistryAlreadyHosted 2 Реестр уже определен и предоставляет Источники.
QRemoteObjectNode::NodeIsNoServer 3 Данный QRemoteObjectNode не является узлом-хостом.
QRemoteObjectNode::ServerAlreadyCreated 4 Узел-хост уже инициализирован.
QRemoteObjectNode::UnintendedRegistryHosting 5 Попытка создать узел-хост QRemoteObjectNode и подключиться к нему как к реестру.
QRemoteObjectNode::OperationNotValidOnClientNode 6 Попытка выполнить операцию невозможна на клиентском узле QRemoteObjectNode.
QRemoteObjectNode::SourceNotRegistered 7 Указанный QRemoteObjectSource не зарегистрирован в этом узле.
QRemoteObjectNode::MissingObjectName 8 У указанного QObject не задан objectName().
QRemoteObjectNode::HostUrlInvalid 9 Схема в URL неверна или не распознается.
QRemoteObjectNode::ProtocolMismatch 10 Клиент и сервер имеют разные версии протокола.
QRemoteObjectNode::ListenFailed 11 Невозможно прослушивать на указанном порту хоста.

typedef QRemoteObjectNode::RemoteObjectSchemaHandler

Тип для метода std::function, который может принимать входные данные QUrl и отвечает за создание канала связи между этим узлом и узлом, на котором размещён необходимый Источник. Так как некоторые типы QIODevices (например, QSslSocket) требуют дополнительных шагов перед тем, как устройство будет готово к использованию, метод отвечает за вызов addClientSideConnection после полного установления соединения.

Этот тип данных был введён в Qt 5.12.

Документация по свойствам

heartbeatInterval : int

Интервал проверки работоспособности в мс.

Проверка работоспособности (полезно только для соединений через сокеты) периодически отправляет сообщение подключённым узлам для проверки того, не было ли прервано соединение. Qt Remote Objects попытается автоматически переподключиться, если обнаружит разрыв соединения. Эта функция может помочь с этим обнаружением, поскольку клиент обнаружит, что сервер недоступен, только когда попытается отправить данные.

Значение 0 (по умолчанию) отключит проверку работоспособности.

Функции доступа:

int heartbeatInterval() const
void setHeartbeatInterval(int interval)

Сигнал уведомления:

void heartbeatIntervalChanged(int heartbeatInterval)

persistedStore : QRemoteObjectAbstractPersistedStore*

Позволяет задать экземпляр QRemoteObjectAbstractPersistedStore для узла.

Позволяет реплицировать члены PROP с атрибутом PERSISTED, чтобы сохранить их текущее значение при удалении реплики и восстановить сохранённое значение при следующем запуске реплики.

Требует реализации класса QRemoteObjectAbstractPersistedStore для управления тем, где и как осуществляется сохранение.

Это свойство было введено в Qt 5.11.

Функции доступа:

QRemoteObjectAbstractPersistedStore * persistedStore() const
void setPersistedStore(QRemoteObjectAbstractPersistedStore *persistedStore)

registryUrl : QUrl

Это свойство содержит адрес Регистра, используемого этим узлом.

Это пустая QUrl, если регистр не используется.

Функции доступа:

QUrl registryUrl() const
virtual bool setRegistryUrl(const QUrl &registryAddress)

Документация по членам-функциям

QRemoteObjectNode::QRemoteObjectNode(const QUrl &registryAddress, QObject *parent = nullptr)

QRemoteObjectNode подключён к {QRemoteObjectRegistry} {Регистру}. Узел, созданный таким образом, не может быть подключён и, следовательно, не может экспонировать объекты Source в сети. Поиск и подключение к другим (хост-) узлам выполняется QRemoteObjectRegistry, указанным параметром registryAddress.

См. также connectToNode, setRegistryUrl, QRemoteObjectHost и QRemoteObjectRegistryHost.

QRemoteObjectNode::QRemoteObjectNode(QObject *parent = nullptr)

Конструктор по умолчанию для QRemoteObjectNode с заданным parent. Узел, созданный таким образом, не может быть подключён и, следовательно, не может экспонировать объекты Source в сети. Он также не будет включать QRemoteObjectRegistry, если не задан вручную с помощью setRegistryUrl.

См. также connectToNode и setRegistryUrl.

[signal] void QRemoteObjectNode::remoteObjectAdded(const QRemoteObjectSourceLocation &loc)

Этот сигнал испускается всякий раз, когда новый объект Источник добавляется в Регистр. Сигнал не будет испускаться, если Регистр не задан (т. е. Источники по соединениям, созданным через connectToNode напрямую). Параметр loc содержит информацию о добавленном Источнике, включая имя, тип и QUrl узла-хоста.

См. также remoteObjectRemoved() и instances().

[signal] void QRemoteObjectNode::remoteObjectRemoved(const QRemoteObjectSourceLocation &loc)

Этот сигнал испускается всякий раз, когда известный объект Источник удаляется из Регистра. Сигнал не будет испускаться, если Регистр не задан (т. е. Источники по соединениям, созданным через connectToNode напрямую). Параметр loc содержит информацию об удалённом Источнике, включая имя, тип и QUrl узла-хоста.

См. также remoteObjectAdded и instances.

template <typename ObjectType> ObjectType *QRemoteObjectNode::acquire(const QString &name = QString())

Возвращает указатель на реплику типа ObjectType (который является параметром шаблона и должен наследоваться от QRemoteObjectReplica). То есть, параметр шаблона должен быть типом, сгенерированным с помощью repc. Параметр name может использоваться для указания имени, заданного объекту во время вызова QRemoteObjectHost::enableRemoting().

QRemoteObjectDynamicReplica *QRemoteObjectNode::acquireDynamic(const QString &name)

Возвращает QRemoteObjectDynamicReplica источника name.

QAbstractItemModelReplica *QRemoteObjectNode::acquireModel(const QString &name, QtRemoteObjects::InitialAction action = QtRemoteObjects::FetchRootSize, const QVector<int> &rolesHint = {})

Возвращает указатель на реплику, которая конкретно наследуется от QAbstractItemModel. Предоставленное значение name должно совпадать с именем, используемым с соответствующим enableRemoting, который поместил модель в сеть. Возвращаемая модель будет пустой, пока не будет инициализирована источником.

void QRemoteObjectNode::addClientSideConnection(QIODevice *ioDevice)

Для получения объектов QRemoteObjectNode::acquire() Replica через внешние QIODevices, Qt Remote Objects требует доступа к каналу связи (QIODevice) между соответствующими узлами. Вызов addClientSideConnection() с указанием ioDevice разрешает это. Любой вызов acquire() без вызова addClientSideConnection() всё ещё будет работать, но узел не сможет инициализировать Replica без предоставления соединения с узлом-хостом.

Эта функция была введена в Qt 5.12.

См. также QRemoteObjectHostBase::addHostSideConnection.

bool QRemoteObjectNode::connectToNode(const QUrl &address)

Подключает клиентский узел к узлу-хосту по адресу address.

Соединения остаются действительными до тех пор, пока узел-хост не будет удалён или больше не будет доступен через сеть.

После подключения клиента к хосту, действительные реплики могут быть получены, если соответствующий Источник отдаётся на удалённое управление.

Возвращает true при успехе, false в противном случае (обычно не распознанный URL или подключение к уже подключённому адресу).

Примечание: Эту функцию можно вызвать через систему метаобъектов и из QML. См. Q_INVOKABLE.

template <typename T> QStringList QRemoteObjectNode::instances() const

Эта шаблонная функция (принимающая тип, сгенерированный repc, в качестве параметра шаблона) вернёт список имён всех экземпляров этого типа в сети удалённых объектов. Например, если у вас есть класс Shape, определённый в файле .rep, а классы Circle и Square наследуются от определения Source, они могут быть общими в сети удалённых объектов с помощью enableRemoting.

Square square;
Circle circle;
myHost.enableRemoting(&square, "Square");
myHost.enableRemoting(&circle, "Circle");

Затем экземпляр можно использовать для поиска доступных экземпляров Shape.

QStringList instances = clientNode.instances<Shape>();
// will return a QStringList containing "Circle" and "Square"
auto instance1 = clientNode.acquire<Shape>("Circle");
auto instance2 = clientNode.acquire<Shape>("Square");
...

QStringList QRemoteObjectNode::instances(const QString &typeName) const

Эта функция перегружает instances().

Эта функция-удобство предоставляет тот же результат, что и шаблонная версия, но принимает имя класса Source в качестве параметра (typeName) вместо получения его из типа класса.

QRemoteObjectNode::ErrorCode QRemoteObjectNode::lastError() const

Возвращает последнюю ошибку.

void QRemoteObjectNode::registerExternalSchema(const QString &schema, QRemoteObjectNode::RemoteObjectSchemaHandler handler)

Предоставляет пользовательский метод для обработки внешних схем

Этот метод связан с Регистром и Внешними схемами. Зарегистрировав обработчик std::function для внешней схемы, зарегистрированный метод будет вызываться, когда реестр уведомлен о доступности Source, который вы приобрели. Без этой регистрации QtRO смог бы обрабатывать только "встроенные" схемы.

Предоставленный метод handler будет вызываться, когда реестр обнаружит объект Source на новом (ещё не подключённом) узле с {QUrl::schema()} schema. Обработчик handler типа QRemoteObjectNode::RemoteObjectSchemaHandler получит QUrl узла, предоставляющего Source, в качестве входного параметра, и отвечает за установление канала связи (QIODevice какого-либо типа) и вызов addClientSideConnection с ним.

Эта функция была добавлена в Qt 5.12.

См. также RemoteObjectSchemaHandler.

const QRemoteObjectRegistry *QRemoteObjectNode::registry() const

Возвращает указатель на QRemoteObjectRegistry узла, если узел использует функцию Регистра; в противном случае возвращает 0.

[virtual] void QRemoteObjectNode::setName(const QString &name)

Устанавливает name как внутреннее имя для этого узла. Это затем выводится как часть журнала (если включено). Это полезно в основном, если вы объединяете данные журнала из нескольких узлов.

[override virtual protected] void QRemoteObjectNode::timerEvent(QTimerEvent *)

Переопределяет: QObject::timerEvent(QTimerEvent *event).

bool QRemoteObjectNode::waitForRegistry(int timeout = 30000)

Задерживает выполнение, пока реестр этого узла (Registry) не будет инициализирован или не истечёт время ожидания timeout (в миллисекундах). Возвращает true если Registry успешно инициализирован при возврате, или false в противном случае.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qremoteobjectnode.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API