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
{
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;

View File

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

View File

@ -8,15 +8,15 @@
class Trigger
{
public:
Trigger(const QUuid &deviceClassid, const QVariantMap &params);
Trigger(const QUuid &triggerTypeId, const QVariantMap &params);
QUuid deviceClassId() const;
QUuid triggerTypeId() const;
QVariantMap params() const;
void setParams(const QVariantMap &params);
private:
QUuid m_deviceClassId;
QUuid m_triggerTypeId;
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()) {
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);

View File

@ -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<Action> RuleEngine::evaluateTrigger(const Trigger &trigger)
{
QList<Action> 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());