From 1addaaf63852098c44fb0ca51274ab8366139b0a Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Thu, 2 Jan 2014 18:22:05 +0100 Subject: [PATCH] new trigger and action system --- libhive/action.h | 3 ++- libhive/trigger.cpp | 8 ++++---- libhive/trigger.h | 6 +++--- server/jsonrpcserver.cpp | 13 ++++++++----- server/ruleengine.cpp | 17 ++++++++++++----- 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/libhive/action.h b/libhive/action.h index 17b35bb4..2e4741c1 100644 --- a/libhive/action.h +++ b/libhive/action.h @@ -7,7 +7,8 @@ class Action { public: - Action(const QUuid &id = QUuid(), const QUuid &deviceId = QUuid()); + explicit Action(const QUuid &deviceId, const QUuid &id = QUuid::createUuid()); + bool isValid() const; QUuid id() const; diff --git a/libhive/trigger.cpp b/libhive/trigger.cpp index b5d3f120..1b8a168a 100644 --- a/libhive/trigger.cpp +++ b/libhive/trigger.cpp @@ -1,14 +1,14 @@ #include "trigger.h" -Trigger::Trigger(const QUuid &deviceClassid, const QVariantMap ¶ms): - m_deviceClassId(deviceClassid), +Trigger::Trigger(const QUuid &triggerTypeId, const QVariantMap ¶ms): + m_triggerTypeId(triggerTypeId), m_params(params) { } -QUuid Trigger::deviceClassId() const +QUuid Trigger::triggerTypeId() const { - return m_deviceClassId; + return m_triggerTypeId; } QVariantMap Trigger::params() const diff --git a/libhive/trigger.h b/libhive/trigger.h index c17e0925..09aedbaf 100644 --- a/libhive/trigger.h +++ b/libhive/trigger.h @@ -8,15 +8,15 @@ class Trigger { public: - Trigger(const QUuid &deviceClassid, const QVariantMap ¶ms); + Trigger(const QUuid &triggerTypeId, const QVariantMap ¶ms); - QUuid deviceClassId() const; + QUuid triggerTypeId() const; QVariantMap params() const; void setParams(const QVariantMap ¶ms); private: - QUuid m_deviceClassId; + QUuid m_triggerTypeId; QVariantMap m_params; }; diff --git a/server/jsonrpcserver.cpp b/server/jsonrpcserver.cpp index f7690cb8..1c9d9981 100644 --- a/server/jsonrpcserver.cpp +++ b/server/jsonrpcserver.cpp @@ -103,7 +103,7 @@ void JsonRPCServer::handleRulesMessage(int clientId, int commandId, const QStrin foreach (const Rule &rule, HiveCore::instance()->ruleEngine()->rules()) { QVariantMap ruleMap; ruleMap.insert("id", rule.id()); - ruleMap.insert("triggerId", rule.triggerId()); +// ruleMap.insert("triggerId", rule.triggerId()); ruleMap.insert("action", packAction(rule.action())); rulesList.append(ruleMap); } @@ -111,9 +111,12 @@ void JsonRPCServer::handleRulesMessage(int clientId, int commandId, const QStrin rspParams.insert("rules", rulesList); sendResponse(clientId, commandId, rspParams); } else if (method == "AddRule") { - QUuid triggerId = params.value("triggerId").toUuid(); - QUuid actionId = params.value("actionId").toUuid(); - switch(HiveCore::instance()->ruleEngine()->addRule(triggerId, actionId)) { + QUuid triggerTypeId = params.value("triggerTypeId").toUuid(); + Action action(params.value("deviceId").toString()); + action.setName(params.value("name").toString()); + action.setParams(params.value("actionParams").toList()); + + switch(HiveCore::instance()->ruleEngine()->addRule(triggerTypeId, action)) { case RuleEngine::RuleErrorNoError: sendResponse(clientId, commandId); break; @@ -133,7 +136,7 @@ void JsonRPCServer::handleActionMessage(int clientId, int commandId, const QStri QUuid deviceId = QUuid(params.value("deviceId").toUuid()); QVariantList actionParams = params.value("params").toList(); - Action action(QUuid::createUuid(), deviceId); + Action action(deviceId); action.setParams(actionParams); HiveCore::instance()->deviceManager()->executeAction(action); diff --git a/server/ruleengine.cpp b/server/ruleengine.cpp index ee9756b3..7f0efc13 100644 --- a/server/ruleengine.cpp +++ b/server/ruleengine.cpp @@ -17,9 +17,16 @@ RuleEngine::RuleEngine(QObject *parent) : qDebug() << "loading rules from" << rulesFileName; foreach (const QString &idString, settings.childGroups()) { qDebug() << "found rule" << idString; + settings.beginGroup(idString); - Rule rule = Rule(QUuid(idString), settings.value("triggerId").toUuid(), settings.value("actionId").toUuid()); + settings.beginGroup("action"); + Action action = Action(settings.value("deviceId").toUuid(), settings.value("id").toUuid()); + action.setName(settings.value("name").toString()); + action.setParams(settings.value("params").toList()); settings.endGroup(); + settings.endGroup(); + + Rule rule = Rule(QUuid(idString), settings.value("triggerTypeId").toUuid(), action); m_rules.append(rule); } @@ -29,9 +36,9 @@ QList RuleEngine::evaluateTrigger(const Trigger &trigger) { QList actions; for (int i = 0; i < m_rules.count(); ++i) { - if (m_rules.at(i).triggerTypeId() == trigger.) { - actions << m_rules.at(i).action(); - } +// if (m_rules.at(i).triggerTypeId() == trigger.) { +// actions << m_rules.at(i).action(); +// } } return actions; } @@ -44,7 +51,7 @@ RuleEngine::RuleError RuleEngine::addRule(const QUuid &triggerTypeId, const Acti QSettings settings(rulesFileName); settings.beginGroup(rule.id().toString()); - settings.setValue("triggerId", rule.triggerId()); + settings.setValue("triggerTypeId", rule.triggerTypeId()); settings.beginGroup("action"); settings.setValue("id", rule.action().id());