PenetrateBase/PenetrateBasic/dispatch.cpp

75 lines
1.8 KiB
C++

#include "dispatch.h"
using namespace dispatch;
using namespace Inlet;
Dispatch* Dispatch::_unique_inst = new Dispatch();
Dispatch* dispatch::Dispatch::unique() {
return _unique_inst;
}
QList<quint64> Dispatch::allCmds() const {
return _cmds_map.keys();
}
void Dispatch::registerCmd(quint64 addr, IRunbase* unit) {
auto alias = QString("CMD_%1").arg(addr);
_cmds_map[addr] = std::make_pair(alias, unit);
}
void dispatch::Dispatch::setCmdAlias(quint64 addr, const QString& alias) {
if (_cmds_map.contains(addr)) {
auto tuple = _cmds_map[addr];
_cmds_map[addr] = std::make_pair(alias, tuple.second);
}
}
void dispatch::Dispatch::setCmdValidator(quint64 addr, validate::IValidatorTemplet* inst) {
_cmds_validators[addr] = inst;
}
QString Dispatch::getCmdAlias(quint64 addr) const {
return _cmds_map[addr].first;
}
QString Dispatch::getCmdDefault(quint64 addr) const {
return "";
}
void Dispatch::runWith(IRunbase* unit) {
auto addrs = unit->address();
if (_cmds_validators.contains(addrs)) {
auto validate_templet = _cmds_validators[addrs];
if (!validate_templet->doValidate(unit))
return;
}
unit->run();
}
QList<quint64> dispatch::Dispatch::allEvents() const {
return _events_map.keys();
}
void dispatch::Dispatch::registerEvent(quint64 addr, Inlet::IRunbase* unit) {
auto alias = QString("Event_%1").arg(addr);
_events_map[addr] = std::make_pair(alias, unit);
}
void dispatch::Dispatch::setEventAlias(quint64 addr, const QString& alias) {
if (_events_map.contains(addr)) {
auto tuple = _events_map[addr];
_events_map[addr] = std::make_pair(alias, tuple.second);
}
}
QString dispatch::Dispatch::getEventAlias(quint64 addr) const {
return _events_map[addr].first;
}
QString dispatch::Dispatch::getEventDefault(quint64 addr) const {
return QString();
}
void dispatch::Dispatch::notifyWith(Inlet::IRunbase* unit) { }