From a39a38f99393379f44368894c931648328ffbf1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 1 May 2015 22:52:08 +0200 Subject: [PATCH] added rules notifications --- server/guhcore.cpp | 4 +++- server/guhcore.h | 7 +++++-- server/jsonrpc/jsonrpcserver.cpp | 2 +- server/jsonrpc/ruleshandler.cpp | 31 +++++++++++++++++++++++++++++++ server/jsonrpc/ruleshandler.h | 10 ++++++++++ server/ruleengine.cpp | 2 +- server/ruleengine.h | 2 +- tests/auto/api.json | 26 +++++++++++++++++++++++++- 8 files changed, 77 insertions(+), 7 deletions(-) diff --git a/server/guhcore.cpp b/server/guhcore.cpp index f5613b33..32e47511 100644 --- a/server/guhcore.cpp +++ b/server/guhcore.cpp @@ -358,11 +358,13 @@ GuhCore::GuhCore(QObject *parent) : connect(m_deviceManager, &DeviceManager::deviceAdded, this, &GuhCore::deviceAdded); connect(m_deviceManager, &DeviceManager::deviceRemoved, this, &GuhCore::deviceRemoved); connect(m_deviceManager, &DeviceManager::actionExecutionFinished, this, &GuhCore::actionExecutionFinished); - connect(m_deviceManager, &DeviceManager::devicesDiscovered, this, &GuhCore::devicesDiscovered); connect(m_deviceManager, &DeviceManager::deviceSetupFinished, this, &GuhCore::deviceSetupFinished); connect(m_deviceManager, &DeviceManager::pairingFinished, this, &GuhCore::pairingFinished); + connect(m_ruleEngine, &RuleEngine::ruleAdded, this, &GuhCore::ruleAdded); + connect(m_ruleEngine, &RuleEngine::ruleRemoved, this, &GuhCore::ruleRemoved); + m_logger->logSystemEvent(true); } diff --git a/server/guhcore.h b/server/guhcore.h index bd46930f..c0704fe2 100644 --- a/server/guhcore.h +++ b/server/guhcore.h @@ -86,15 +86,18 @@ public: signals: void eventTriggered(const Event &event); void deviceStateChanged(Device *device, const QUuid &stateTypeId, const QVariant &value); - void actionExecuted(const ActionId &id, DeviceManager::DeviceError status); void deviceRemoved(const DeviceId &deviceId); void deviceAdded(Device *device); - + void actionExecuted(const ActionId &id, DeviceManager::DeviceError status); void devicesDiscovered(const DeviceClassId &deviceClassId, const QList deviceDescriptors); void deviceSetupFinished(Device *device, DeviceManager::DeviceError status); void pairingFinished(const PairingTransactionId &pairingTransactionId, DeviceManager::DeviceError status, const DeviceId &deviceId); + void ruleRemoved(const RuleId &ruleId); + void ruleAdded(const Rule &rule); + + private: RuleEngine *ruleEngine() const; DeviceManager* deviceManager() const; diff --git a/server/jsonrpc/jsonrpcserver.cpp b/server/jsonrpc/jsonrpcserver.cpp index dd4e7793..7f6f6120 100644 --- a/server/jsonrpc/jsonrpcserver.cpp +++ b/server/jsonrpc/jsonrpcserver.cpp @@ -44,7 +44,7 @@ #include #include -#define JSON_PROTOCOL_VERSION 19 +#define JSON_PROTOCOL_VERSION 20 JsonRPCServer::JsonRPCServer(QObject *parent): JsonHandler(parent), diff --git a/server/jsonrpc/ruleshandler.cpp b/server/jsonrpc/ruleshandler.cpp index ce859fd7..9845b8a9 100644 --- a/server/jsonrpc/ruleshandler.cpp +++ b/server/jsonrpc/ruleshandler.cpp @@ -88,6 +88,21 @@ RulesHandler::RulesHandler(QObject *parent) : setParams("DisableRule", params); returns.insert("ruleError", JsonTypes::ruleErrorRef()); setReturns("DisableRule", returns); + + // Notifications + params.clear(); returns.clear(); + setDescription("RuleRemoved", "Emitted whenever a Rule was removed."); + params.insert("ruleId", JsonTypes::basicTypeToString(JsonTypes::Uuid)); + setParams("RuleRemoved", params); + + params.clear(); returns.clear(); + setDescription("RuleAdded", "Emitted whenever a Rule was added."); + params.insert("rule", JsonTypes::ruleRef()); + setParams("RuleAdded", params); + + connect(GuhCore::instance(), &GuhCore::ruleAdded, this, &RulesHandler::ruleAddedNotification); + connect(GuhCore::instance(), &GuhCore::ruleRemoved, this, &RulesHandler::ruleRemovedNotification); + } QString RulesHandler::name() const @@ -331,3 +346,19 @@ bool RulesHandler::checkEventDescriptors(const QList eventDescr } return false; } + +void RulesHandler::ruleRemovedNotification(const RuleId &ruleId) +{ + QVariantMap params; + params.insert("ruleId", ruleId); + + emit RuleRemoved(params); +} + +void RulesHandler::ruleAddedNotification(const Rule &rule) +{ + QVariantMap params; + params.insert("rule", JsonTypes::packRule(rule)); + + emit RuleRemoved(params); +} diff --git a/server/jsonrpc/ruleshandler.h b/server/jsonrpc/ruleshandler.h index ce5853bb..b4b02dd4 100644 --- a/server/jsonrpc/ruleshandler.h +++ b/server/jsonrpc/ruleshandler.h @@ -39,10 +39,20 @@ public: Q_INVOKABLE JsonReply* EnableRule(const QVariantMap ¶ms); Q_INVOKABLE JsonReply* DisableRule(const QVariantMap ¶ms); +signals: + void RuleRemoved(const QVariantMap ¶ms); + void RuleAdded(const QVariantMap ¶ms); + private: QVariant::Type getActionParamType(const ActionTypeId &actionTypeId, const QString ¶mName); QVariant::Type getEventParamType(const EventTypeId &eventTypeId, const QString ¶mName); + bool checkEventDescriptors(const QList eventDescriptors, const EventTypeId &eventTypeId); + +private slots: + void ruleRemovedNotification(const RuleId &ruleId); + void ruleAddedNotification(const Rule &rule); + }; #endif // RULESHANDLER_H diff --git a/server/ruleengine.cpp b/server/ruleengine.cpp index 0733980c..7401f2f7 100644 --- a/server/ruleengine.cpp +++ b/server/ruleengine.cpp @@ -324,7 +324,7 @@ RuleEngine::RuleError RuleEngine::addRule(const RuleId &ruleId, const QString &n Rule rule = Rule(ruleId, name, eventDescriptorList, stateEvaluator, actions, exitActions); rule.setEnabled(enabled); appendRule(rule); - emit ruleAdded(rule.id()); + emit ruleAdded(rule); // Save Events / EventDescriptors QSettings settings(m_settingsFile); diff --git a/server/ruleengine.h b/server/ruleengine.h index d7f760a2..f1eb1a45 100644 --- a/server/ruleengine.h +++ b/server/ruleengine.h @@ -72,7 +72,7 @@ public: void removeDeviceFromRule(const RuleId &id, const DeviceId &deviceId); signals: - void ruleAdded(const RuleId &ruleId); + void ruleAdded(const Rule &rule); void ruleRemoved(const RuleId &ruleId); void ruleChanged(const RuleId &ruleId); diff --git a/tests/auto/api.json b/tests/auto/api.json index 1ffa04bb..7f2a4ecc 100644 --- a/tests/auto/api.json +++ b/tests/auto/api.json @@ -1,4 +1,4 @@ -19 +20 { "methods": { "Actions.ExecuteAction": { @@ -365,6 +365,18 @@ } }, "notifications": { + "Devices.DeviceAdded": { + "description": "Emitted whenever a Device was added.", + "params": { + "device": "$ref:Device" + } + }, + "Devices.DeviceRemoved": { + "description": "Emitted whenever a Device was removed.", + "params": { + "deviceId": "Uuid" + } + }, "Devices.StateChanged": { "description": "Emitted whenever a State of a device changes.", "params": { @@ -384,6 +396,18 @@ "params": { "logEntry": "$ref:LogEntry" } + }, + "Rules.RuleAdded": { + "description": "Emitted whenever a Rule was added.", + "params": { + "rule": "$ref:Rule" + } + }, + "Rules.RuleRemoved": { + "description": "Emitted whenever a Rule was removed.", + "params": { + "ruleId": "Uuid" + } } }, "types": {