PenetrateBase/PenetrateBasic/dispatch.h

48 lines
1.2 KiB
C++

#pragma once
#include <QString>
#include <QHash>
#include "cmds_basic.h"
#include "validation.h"
namespace dispatch {
class IOutput {
public:
virtual ~IOutput() = default;
virtual void write(const QString& title, const QString& desc) = 0;
};
class Dispatch {
private:
QHash<quint64, std::pair<QString, Inlet::IRunbase*>> _cmds_map;
QHash<quint64, validate::IValidatorTemplet*> _cmds_validators;
QHash<quint64, std::pair<QString, Inlet::IRunbase*>> _events_map;
QList<IOutput*> _output_list;
static Dispatch* _unique_inst;
public:
static Dispatch* unique();
QList<quint64> allCmds() const;
void registerCmd(quint64 addr, Inlet::IRunbase* unit);
void setCmdAlias(quint64 addr, const QString& alias);
void setCmdValidator(quint64 addr, validate::IValidatorTemplet* inst);
QString getCmdAlias(quint64 addr) const;
QString getCmdDefault(quint64 addr) const;
void runWith(Inlet::IRunbase* unit);
QList<quint64> allEvents() const;
void registerEvent(quint64 addr, Inlet::IRunbase* unit);
void setEventAlias(quint64 addr, const QString& alias);
QString getEventAlias(quint64 addr) const;
QString getEventDefault(quint64 addr) const;
void notifyWith(Inlet::IRunbase* unit);
};
}