PenetrateBase/PenetrateBasic/dispatch.cpp

107 lines
2.9 KiB
C++

#include "dispatch.h"
using namespace dispatch;
using namespace Inlet;
Dispatch* Dispatch::_unique_inst = new Dispatch();
Dispatch* dispatch::Dispatch::unique() {
return _unique_inst;
}
void dispatch::Dispatch::loadOutput(std::shared_ptr<logs::LogsPort> out_ins) {
this->_output_list << out_ins;
}
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 "";
}
#include "validate_depict.h"
void Dispatch::runWith(IRunbase* unit) {
depict::ValidateDocObject obj;
auto addrs = unit->address();
auto alias_name = _cmds_map[addrs].first;
if (_cmds_validators.contains(addrs) && !_cmds_validators[addrs]->doValidate(unit)) {
unit->saveTo(obj);
obj.setString(u8"CmdAlias", alias_name);
auto args_content = obj.toText();
std::for_each(_output_list.begin(), _output_list.end(), [&](std::shared_ptr<logs::LogsPort> ins) {
ins->write(u8"命令校验", u8"命令执行参数校验失败", args_content);
ins->flush(true);
});
return;
}
unit->run();
unit->saveTo(obj);
obj.setString(u8"CmdAlias", alias_name);
auto args_content = obj.toText();
std::for_each(_output_list.begin(), _output_list.end(), [&](std::shared_ptr<logs::LogsPort> ins) {
ins->write(u8"命令执行", u8"命令执行上下文", args_content);
ins->flush();
});
}
void dispatch::Dispatch::getValidateDepict(datas::IDataObject& object) const {
for (auto key : _cmds_validators.keys()) {
if (_cmds_map.contains(key)) {
auto alias = _cmds_map[key].first;
auto vdesc = object.newObject();
_cmds_validators[key]->getDepict(*vdesc);
object.setChild(alias, vdesc);
}
}
}
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) { }