Implement remove node into the resource and missing network state changed signal handling

This commit is contained in:
Simon Stürz 2020-11-12 13:26:55 +01:00
parent 685948f8c8
commit e9b5b618b2
3 changed files with 21 additions and 0 deletions

View File

@ -46,6 +46,7 @@ ZigbeeHardwareResourceImplementation::ZigbeeHardwareResourceImplementation(Zigbe
ZigbeeHardwareResource(parent),
m_zigbeeManager(zigbeeManager)
{
connect(m_zigbeeManager, &ZigbeeManager::zigbeeNetworkChanged, this, &ZigbeeHardwareResourceImplementation::onZigbeeNetworkChanged);
connect(m_zigbeeManager, &ZigbeeManager::nodeAdded, this, &ZigbeeHardwareResourceImplementation::onZigbeeNodeAdded);
connect(m_zigbeeManager, &ZigbeeManager::nodeRemoved, this, &ZigbeeHardwareResourceImplementation::onZigbeeNodeRemoved);
connect(m_zigbeeManager, &ZigbeeManager::availableChanged, this, &ZigbeeHardwareResourceImplementation::onZigbeeAvailableChanged);
@ -78,6 +79,17 @@ ZigbeeNode *ZigbeeHardwareResourceImplementation::getNode(const QUuid &networkUu
return network->getZigbeeNode(extendedAddress);
}
void ZigbeeHardwareResourceImplementation::removeNodeFromNetwork(const QUuid &networkUuid, ZigbeeNode *node)
{
ZigbeeNetwork *network = m_zigbeeManager->zigbeeNetworks().value(networkUuid);
if (!network) {
qCWarning(dcZigbeeResource()) << "Can not remove note from network" << networkUuid << "because there is no network with this uuid.";
return;
}
network->removeZigbeeNode(node->extendedAddress());
}
ZigbeeNetwork::State ZigbeeHardwareResourceImplementation::networkState(const QUuid &networkUuid)
{
ZigbeeNetwork *network = m_zigbeeManager->zigbeeNetworks().value(networkUuid);
@ -141,6 +153,11 @@ void ZigbeeHardwareResourceImplementation::onZigbeeAvailableChanged(bool availab
emit availableChanged(available);
}
void ZigbeeHardwareResourceImplementation::onZigbeeNetworkChanged(ZigbeeNetwork *network)
{
emit networkStateChanged(network->networkUuid(), network->state());
}
void ZigbeeHardwareResourceImplementation::onZigbeeNodeAdded(const QUuid &networkUuid, ZigbeeNode *node)
{
qCDebug(dcZigbeeResource()) << node << "joined the network" << m_zigbeeManager->zigbeeNetworks().value(networkUuid);

View File

@ -51,6 +51,8 @@ public:
void registerHandler(ZigbeeHandler *handler, HandlerType type = HandlerTypeVendor) override;
ZigbeeNode* getNode(const QUuid &networkUuid, const ZigbeeAddress &extendedAddress) override;
void removeNodeFromNetwork(const QUuid &networkUuid, ZigbeeNode *node) override;
ZigbeeNetwork::State networkState(const QUuid &networkUuid) override;
public slots:
@ -62,6 +64,7 @@ protected:
private slots:
void onZigbeeAvailableChanged(bool available);
void onZigbeeNetworkChanged(ZigbeeNetwork *network);
void onZigbeeNodeAdded(const QUuid &networkUuid, ZigbeeNode *node);
void onZigbeeNodeRemoved(const QUuid &networkUuid, ZigbeeNode *node);

View File

@ -56,6 +56,7 @@ public:
virtual void registerHandler(ZigbeeHandler *handler, HandlerType type = HandlerTypeVendor) = 0;
virtual ZigbeeNode* getNode(const QUuid &networkUuid, const ZigbeeAddress &extendedAddress) = 0;
virtual void removeNodeFromNetwork(const QUuid &networkUuid, ZigbeeNode *node) = 0;
virtual ZigbeeNetwork::State networkState(const QUuid &networkUuid) = 0;