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) { }
|