PenetrateBase/PenetrateBasic/dispatch.cpp

107 lines
2.9 KiB
C++
Raw Normal View History

2024-11-11 08:29:59 +00:00
#include "dispatch.h"
using namespace dispatch;
using namespace Inlet;
2024-11-17 14:08:08 +00:00
Dispatch* Dispatch::_unique_inst = new Dispatch();
Dispatch* dispatch::Dispatch::unique() {
return _unique_inst;
}
2024-11-20 12:03:31 +00:00
void dispatch::Dispatch::loadOutput(std::shared_ptr<logs::LogsPort> out_ins) {
2024-11-20 10:31:31 +00:00
this->_output_list << out_ins;
}
2024-11-11 08:29:59 +00:00
QList<quint64> Dispatch::allCmds() const {
return _cmds_map.keys();
}
2024-11-17 14:08:08 +00:00
void Dispatch::registerCmd(quint64 addr, IRunbase* unit) {
auto alias = QString("CMD_%1").arg(addr);
2024-11-11 08:29:59 +00:00
_cmds_map[addr] = std::make_pair(alias, unit);
}
2024-11-17 14:08:08 +00:00
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;
}
2024-11-11 08:29:59 +00:00
QString Dispatch::getCmdAlias(quint64 addr) const {
return _cmds_map[addr].first;
}
QString Dispatch::getCmdDefault(quint64 addr) const {
return "";
}
2024-11-20 10:31:31 +00:00
#include "validate_depict.h"
2024-11-11 08:29:59 +00:00
void Dispatch::runWith(IRunbase* unit) {
2024-11-20 10:31:31 +00:00
depict::ValidateDocObject obj;
2024-11-17 14:08:08 +00:00
auto addrs = unit->address();
2024-11-20 12:03:31 +00:00
auto alias_name = _cmds_map[addrs].first;
2024-11-20 10:31:31 +00:00
if (_cmds_validators.contains(addrs) && !_cmds_validators[addrs]->doValidate(unit)) {
unit->saveTo(obj);
2024-11-20 12:03:31 +00:00
obj.setString(u8"CmdAlias", alias_name);
2024-11-20 10:31:31 +00:00
auto args_content = obj.toText();
2024-11-20 12:03:31 +00:00
std::for_each(_output_list.begin(), _output_list.end(), [&](std::shared_ptr<logs::LogsPort> ins) {
ins->write(u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>", u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>в<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>", args_content);
ins->flush(true);
2024-11-20 10:31:31 +00:00
});
return;
2024-11-17 14:08:08 +00:00
}
2024-11-11 08:29:59 +00:00
unit->run();
2024-11-20 12:03:31 +00:00
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"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD>", u8"<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", args_content);
ins->flush();
});
2024-11-11 08:29:59 +00:00
}
2024-11-17 14:08:08 +00:00
2024-11-18 15:33:51 +00:00
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);
}
}
}
2024-11-17 14:08:08 +00:00
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) { }