new trigger and action system

This commit is contained in:
Michael Zanetti 2014-01-02 18:22:05 +01:00
parent f4b6a70735
commit 1addaaf638
5 changed files with 29 additions and 18 deletions

View File

@ -7,7 +7,8 @@
class Action class Action
{ {
public: public:
Action(const QUuid &id = QUuid(), const QUuid &deviceId = QUuid()); explicit Action(const QUuid &deviceId, const QUuid &id = QUuid::createUuid());
bool isValid() const; bool isValid() const;
QUuid id() const; QUuid id() const;

View File

@ -1,14 +1,14 @@
#include "trigger.h" #include "trigger.h"
Trigger::Trigger(const QUuid &deviceClassid, const QVariantMap &params): Trigger::Trigger(const QUuid &triggerTypeId, const QVariantMap &params):
m_deviceClassId(deviceClassid), m_triggerTypeId(triggerTypeId),
m_params(params) m_params(params)
{ {
} }
QUuid Trigger::deviceClassId() const QUuid Trigger::triggerTypeId() const
{ {
return m_deviceClassId; return m_triggerTypeId;
} }
QVariantMap Trigger::params() const QVariantMap Trigger::params() const

View File

@ -8,15 +8,15 @@
class Trigger class Trigger
{ {
public: public:
Trigger(const QUuid &deviceClassid, const QVariantMap &params); Trigger(const QUuid &triggerTypeId, const QVariantMap &params);
QUuid deviceClassId() const; QUuid triggerTypeId() const;
QVariantMap params() const; QVariantMap params() const;
void setParams(const QVariantMap &params); void setParams(const QVariantMap &params);
private: private:
QUuid m_deviceClassId; QUuid m_triggerTypeId;
QVariantMap m_params; QVariantMap m_params;
}; };

View File

@ -103,7 +103,7 @@ void JsonRPCServer::handleRulesMessage(int clientId, int commandId, const QStrin
foreach (const Rule &rule, HiveCore::instance()->ruleEngine()->rules()) { foreach (const Rule &rule, HiveCore::instance()->ruleEngine()->rules()) {
QVariantMap ruleMap; QVariantMap ruleMap;
ruleMap.insert("id", rule.id()); ruleMap.insert("id", rule.id());
ruleMap.insert("triggerId", rule.triggerId()); // ruleMap.insert("triggerId", rule.triggerId());
ruleMap.insert("action", packAction(rule.action())); ruleMap.insert("action", packAction(rule.action()));
rulesList.append(ruleMap); rulesList.append(ruleMap);
} }
@ -111,9 +111,12 @@ void JsonRPCServer::handleRulesMessage(int clientId, int commandId, const QStrin
rspParams.insert("rules", rulesList); rspParams.insert("rules", rulesList);
sendResponse(clientId, commandId, rspParams); sendResponse(clientId, commandId, rspParams);
} else if (method == "AddRule") { } else if (method == "AddRule") {
QUuid triggerId = params.value("triggerId").toUuid(); QUuid triggerTypeId = params.value("triggerTypeId").toUuid();
QUuid actionId = params.value("actionId").toUuid(); Action action(params.value("deviceId").toString());
switch(HiveCore::instance()->ruleEngine()->addRule(triggerId, actionId)) { action.setName(params.value("name").toString());
action.setParams(params.value("actionParams").toList());
switch(HiveCore::instance()->ruleEngine()->addRule(triggerTypeId, action)) {
case RuleEngine::RuleErrorNoError: case RuleEngine::RuleErrorNoError:
sendResponse(clientId, commandId); sendResponse(clientId, commandId);
break; break;
@ -133,7 +136,7 @@ void JsonRPCServer::handleActionMessage(int clientId, int commandId, const QStri
QUuid deviceId = QUuid(params.value("deviceId").toUuid()); QUuid deviceId = QUuid(params.value("deviceId").toUuid());
QVariantList actionParams = params.value("params").toList(); QVariantList actionParams = params.value("params").toList();
Action action(QUuid::createUuid(), deviceId); Action action(deviceId);
action.setParams(actionParams); action.setParams(actionParams);
HiveCore::instance()->deviceManager()->executeAction(action); HiveCore::instance()->deviceManager()->executeAction(action);

View File

@ -17,9 +17,16 @@ RuleEngine::RuleEngine(QObject *parent) :
qDebug() << "loading rules from" << rulesFileName; qDebug() << "loading rules from" << rulesFileName;
foreach (const QString &idString, settings.childGroups()) { foreach (const QString &idString, settings.childGroups()) {
qDebug() << "found rule" << idString; qDebug() << "found rule" << idString;
settings.beginGroup(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();
settings.endGroup();
Rule rule = Rule(QUuid(idString), settings.value("triggerTypeId").toUuid(), action);
m_rules.append(rule); m_rules.append(rule);
} }
@ -29,9 +36,9 @@ QList<Action> RuleEngine::evaluateTrigger(const Trigger &trigger)
{ {
QList<Action> actions; QList<Action> actions;
for (int i = 0; i < m_rules.count(); ++i) { for (int i = 0; i < m_rules.count(); ++i) {
if (m_rules.at(i).triggerTypeId() == trigger.) { // if (m_rules.at(i).triggerTypeId() == trigger.) {
actions << m_rules.at(i).action(); // actions << m_rules.at(i).action();
} // }
} }
return actions; return actions;
} }
@ -44,7 +51,7 @@ RuleEngine::RuleError RuleEngine::addRule(const QUuid &triggerTypeId, const Acti
QSettings settings(rulesFileName); QSettings settings(rulesFileName);
settings.beginGroup(rule.id().toString()); settings.beginGroup(rule.id().toString());
settings.setValue("triggerId", rule.triggerId()); settings.setValue("triggerTypeId", rule.triggerTypeId());
settings.beginGroup("action"); settings.beginGroup("action");
settings.setValue("id", rule.action().id()); settings.setValue("id", rule.action().id());