QtNovelUI/libGenericConsole/commandsdispatcher.h

156 lines
3.8 KiB
C
Raw Normal View History

#ifndef COMMANDLIST_H
#define COMMANDLIST_H
#include "GenericConsole_global.h"
#include <QDateTime>
#include <QDir>
#include <QHash>
#include <QString>
#include <QTextStream>
namespace Schedule {
class CommandsDispatcher;
/**
* @brief Exception
*/
class CmdException : public std::exception
{
public:
virtual ~CmdException() = default;
/**
* @brief
* @return
*/
virtual QString type() const = 0;
/**
* @brief
* @return
*/
virtual QString reason() const = 0;
};
/**
* @brief
*/
class GeCommand
{
public:
virtual ~GeCommand() = default;
/**
* @brief
* @return
*/
virtual QString name() const = 0;
/**
* @brief
* @param core
*/
2023-03-10 13:01:19 +00:00
virtual void run(CommandsDispatcher *core) const = 0;
/**
* @brief
* @return
*/
virtual QString toText() const = 0;
/**
* @brief
* @param line
* @throw CmdException
*/
virtual void fromText(const QString &line) = 0;
};
/**
* @brief 访
*/
class AccessibleObject
{
public:
virtual ~AccessibleObject() = default;
virtual QString name() const = 0;
};
/**
* @brief
*/
class GENERICCONSOLE_EXPORT CommandsDispatcher
{
private:
QDateTime start_time;
bool record_execute;
QHash<QString, GeCommand*> command_types;
QHash<QString, AccessibleObject*> object_instances;
QFile * bout;
QTextStream * tout;
public:
/**
* @brief
* @param script_out 便使
* @param record
*/
CommandsDispatcher(const QDir &script_out, bool record = false);
virtual ~CommandsDispatcher();
/**
* @brief
* @param filepath
*/
virtual void execute_script(const QString &filepath);
// 获取成员 =========================================================
/**
* @brief 访
* @param obj
*/
virtual void registerMember(AccessibleObject *obj);
/**
*
*/
template<class T>
T *get(const QString &name)
{
if(!object_instances.contains(name))
return nullptr;
return static_cast<T*>(object_instances[name]);
}
// 命令的注册和执行 ==================================
/**
* @brief
* @param type
*/
virtual void registerCommand(GeCommand* type);
/**
* @brief
* @return
*/
virtual QList<GeCommand*> listCommands() const;
/**
* @brief
* @param c
*/
2023-03-10 13:01:19 +00:00
virtual void postCommand(const GeCommand &c);
/**
* @brief
* @param line
* @throw CmdException
*/
virtual void postCommandText(const QString &line);
};
}
#endif // COMMANDLIST_H