#pragma once #include #include #include "componentbasic.h" #include #include #include #include class COMPONENTBASIC_EXPORT ComponentFactory : public Serializable { private: QHash> _comp_types; public: ComponentFactory(); std::shared_ptr makeNew(const QString &type); QList allComponentTypes() const; // 通过 Serializable 继承 std::shared_ptr newDefault() const override; void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; }; class COMPONENTBASIC_EXPORT DeduceFramework : public QObject, public RespondRoute< WsRespond, WsRespond, WsRespond, WsRespond, WsRespond>, public RequestRoute<> { Q_OBJECT private: std::weak_ptr _bind_entity; std::shared_ptr _factory_ins; QHash> _templets_within_0x2ff_0xffff; QHash> _entity_map_over_0xffff; signals: /// /// 推演过程中的回复信息 /// /// 消息列表 void reply(const QList> &msg_set); /// /// 推演完成 /// /// 回复消息 void complete(std::shared_ptr ins); public slots: /// /// 接收消息列表 /// /// 传入的消息队列 void accept(const QList> &set); /// /// 推演入口 /// /// 消息 void deduceBegin(std::shared_ptr ins); public: static QMutex _static_mutex; static QList> _accept_stack; DeduceFramework(); void init_framework(); // ProcList interface ======================================================= std::shared_ptr newDefault() const override; void bindEntity(std::weak_ptr ins) override; QString name() const override; void recoveryFrom(const QJsonObject& obj) override; void saveTo(QJsonObject& obj) const override; void execute(std::shared_ptr in, QList>& out) override; void execute(std::shared_ptr in, QList>& out) override; void execute(std::shared_ptr in, QList>& out) override; void execute(std::shared_ptr in, QList>& out) override; void execute(std::shared_ptr in, QList>& out) override; };