SimsWorld/ComponentBasic/BehaviorPerform.h

614 lines
16 KiB
C
Raw Normal View History

2025-06-25 14:34:26 +00:00
#pragma once
#include "componentbasic.h"
#include <messagebasic.h>
2025-06-28 17:38:37 +00:00
#include <QJsonObject>
#include <QJSEngine>
class MessageLoader;
class CompareKernel;
class ConvertKernel;
class LogicalNode;
2025-06-25 14:34:26 +00:00
2025-06-29 12:30:32 +00:00
/// <summary>
/// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
struct COMPONENTBASIC_EXPORT GeneralData : public TopicData {
QJsonObject _element_bind;
QString topicString() const override;
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// ==================================================================================
2025-06-25 14:34:26 +00:00
/// <summary>
/// <20><>Ϊ<EFBFBD><CEAA>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
/// </summary>
2025-06-28 17:38:37 +00:00
class COMPONENTBASIC_EXPORT MapKernal : virtual public Serializable {
2025-06-25 14:34:26 +00:00
private:
/// <summary>
2025-06-28 17:38:37 +00:00
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
std::shared_ptr<MessageLoader> _bind_loader;
/// <summary>
/// {Topic<69><63>default-value}
2025-06-25 14:34:26 +00:00
/// </summary>
QHash<QString, std::shared_ptr<TopicData>> _variable_types;
2025-06-28 17:38:37 +00:00
2025-06-25 14:34:26 +00:00
/// <summary>
2025-06-28 17:38:37 +00:00
/// <20>Ƚ<EFBFBD><C8BD><EFBFBD>
2025-06-25 14:34:26 +00:00
/// </summary>
2025-06-28 17:38:37 +00:00
QHash<QString, std::shared_ptr<CompareKernel>> _compare_types;
/// <summary>
/// ת<><D7AA><EFBFBD><EFBFBD>
/// </summary>
QHash<QString, std::shared_ptr<ConvertKernel>> _convert_types;
/// <summary>
/// <20><><EFBFBD>п<EFBFBD><D0BF>õĽڵ<C4BD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
QHash<QString, std::shared_ptr<LogicalNode>> _logicalnode_types;
2025-06-25 14:34:26 +00:00
public:
2025-06-28 17:38:37 +00:00
MapKernal(std::shared_ptr<MessageLoader> ins);
virtual ~MapKernal() = default;
/// <summary>
/// <20><>ȡMessageLoader<65><72><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
std::shared_ptr<MessageLoader> messageLoader() const;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD> ======================================================
2025-06-25 14:34:26 +00:00
/// <summary>
/// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="init"></param>
2025-06-28 17:38:37 +00:00
virtual void registData(std::shared_ptr<TopicData> init);
2025-06-25 14:34:26 +00:00
/// <summary>
2025-06-28 17:38:37 +00:00
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD>п<EFBFBD><D0BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-25 14:34:26 +00:00
/// </summary>
2025-06-28 17:38:37 +00:00
/// <returns></returns>
virtual QList<QString> dataTypes() const;
2025-06-25 14:34:26 +00:00
/// <summary>
2025-06-28 17:38:37 +00:00
/// <20><>ȡָ<C8A1><D6B8>topic<69><63><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2025-06-25 14:34:26 +00:00
/// </summary>
2025-06-28 17:38:37 +00:00
/// <param name="topic"></param>
/// <returns></returns>
virtual std::shared_ptr<TopicData> getData(const QString &topic);
// <20>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD> ======================================================
/// <summary>
/// ע<><D7A2><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>
/// </summary>
/// <param name="ins"></param>
virtual void registCompare(std::shared_ptr<CompareKernel> ins);
/// <summary>
/// <20><>ȡ<EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
virtual QList<QString> compareTypes() const;
/// <summary>
/// <20><>ȡ<EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
virtual std::shared_ptr<CompareKernel> getCompare(const QString& name);
// ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD> ======================================================
/// <summary>
/// ע<><D7A2>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
/// </summary>
/// <param name="ins"></param>
virtual void registConvert(std::shared_ptr<ConvertKernel> ins);
/// <summary>
/// ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
virtual QList<QString> convertTypes() const;
/// <summary>
/// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
virtual std::shared_ptr<ConvertKernel> getConvert(const QString& name);
// ͨ<><CDA8> Serializable <20>̳<EFBFBD>
std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override{}
void saveTo(QJsonObject& obj) const override{}
};
/// <summary>
/// <20>ȽϹ<C8BD>ϵʵ<CFB5><CAB5>
/// </summary>
class COMPONENTBASIC_EXPORT CompareKernel {
private:
QJSEngine& _script_engine;
QString _function_name;
public:
CompareKernel(QJSEngine& bind_engine, const QString& func);
QString name() const;
bool compare(std::shared_ptr<TopicData> vleft, std::shared_ptr<TopicData> vright);
};
2025-06-29 12:30:32 +00:00
2025-06-28 17:38:37 +00:00
/// <summary>
/// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ʵ<EFBFBD><CAB5>
/// </summary>
class COMPONENTBASIC_EXPORT ConvertKernel {
public:
typedef QString DATA_TOPIC_STRING;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
/// </summary>
/// <param name="host"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͹<EFBFBD><CDB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="bind_engine"></param>
/// <param name="func"></param>
ConvertKernel(std::shared_ptr<MapKernal> host, QJSEngine& bind_engine, const QString& func);
/// <summary>
/// ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>JS<4A><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
QString name() const;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ͱ󶨱<CDB0>
/// </summary>
/// <returns>list{pair{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}}</returns>
QList<std::pair<DATA_TOPIC_STRING, QString>> inputTable() const;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>
/// </summary>
/// <param name="table">list{pair{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}}</param>
void inputReset(const QList<std::pair<DATA_TOPIC_STRING, QString>> &table);
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns>pair{<7B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>}</returns>
std::pair<DATA_TOPIC_STRING, QString> outputVariable() const;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="appoint"></param>
void outputReset(std::pair<DATA_TOPIC_STRING, QString> appoint);
/// <summary>
/// ִ<><D6B4>ת<EFBFBD><D7AA>
/// </summary>
/// <param name="input_variables"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD></param>
/// <returns></returns>
std::shared_ptr<TopicData> convert(const QList<std::shared_ptr<TopicData>>& input_variables);
private:
std::shared_ptr<MapKernal> _host_bind;
QJSEngine& _script_engine;
QString _function_name;
QList<std::pair<DATA_TOPIC_STRING, QString>> _input_table;
std::pair<DATA_TOPIC_STRING, QString> _output_appoint;
};
2025-06-29 12:30:32 +00:00
2025-06-28 17:38:37 +00:00
/// <summary>
/// ִ<>н<EFBFBD><D0BD><EFBFBD>
/// </summary>
enum class LogicalResult {
UNDEFINED, // δ<><CEB4><EFBFBD><EFBFBD>
SUCCESS, // <20>ɹ<EFBFBD>
FAILURE // ʧ<><CAA7>
};
/// <summary>
/// <20>߼<EFBFBD><DFBC>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
enum class NodeKind {
MAPNODE, // <20>߼<EFBFBD><DFBC><EFBFBD><EFBFBD>ڵ<EFBFBD>
SEQUENCENODE, // ˳<><CBB3><EFBFBD>ڵ<EFBFBD>
SELECTORNODE, // ѡ<><D1A1><EFBFBD>ڵ<EFBFBD>
PARALLELNODE, // <20><><EFBFBD>нڵ<D0BD>
COMPARENODE, // <20>ȽϽڵ<CFBD>
ACTIONNODE, // <20><><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
};
2025-06-25 14:34:26 +00:00
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ڵ<EFBFBD><DAB5>Ļ<EFBFBD><C4BB><EFBFBD>
/// </summary>
2025-06-28 17:38:37 +00:00
class COMPONENTBASIC_EXPORT LogicalNode : virtual public Serializable {
private:
int _node_id = 0;
NodeKind _node_type = NodeKind::ACTIONNODE;
std::weak_ptr<LogicalNode> _parent_bind;
QList<std::shared_ptr<LogicalNode>> _child_list;
2025-06-25 14:34:26 +00:00
public:
2025-06-28 17:38:37 +00:00
LogicalNode(NodeKind t = NodeKind::ACTIONNODE);
2025-06-25 14:34:26 +00:00
virtual ~LogicalNode() = default;
2025-06-29 12:30:32 +00:00
/// <summary>
/// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
NodeKind nodeKind() const;
2025-06-28 17:38:37 +00:00
/// <summary>
/// <20><><EFBFBD>ø<EFBFBD><C3B8>ڵ<EFBFBD>
/// </summary>
/// <param name="pnode"></param>
void setParent(std::weak_ptr<LogicalNode> pnode);
/// <summary>
2025-06-29 12:30:32 +00:00
/// <20><><EFBFBD>˽ڵ<CBBD>
2025-06-28 17:38:37 +00:00
/// </summary>
/// <returns></returns>
2025-06-29 12:30:32 +00:00
std::weak_ptr<LogicalNode> parent() const;
2025-06-28 17:38:37 +00:00
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>ڵ<EFBFBD>
/// </summary>
/// <returns></returns>
2025-06-29 12:30:32 +00:00
std::shared_ptr<LogicalNode> bindMap() const;
2025-06-28 17:38:37 +00:00
2025-06-25 14:34:26 +00:00
/// <summary>
/// <20><><EFBFBD>ýڵ<C3BD>id
/// </summary>
/// <param name="unique_id"></param>
2025-06-28 17:38:37 +00:00
void setID(int unique_id);
2025-06-25 14:34:26 +00:00
/// <summary>
/// <20><>ȡ<EFBFBD>ڵ<EFBFBD>id
/// </summary>
/// <returns></returns>
2025-06-28 17:38:37 +00:00
int getID() const;
/// <summary>
/// ʵ<><CAB5><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
QString runtimeName() const;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD>״̬
/// </summary>
virtual void reset() = 0;
2025-06-25 14:34:26 +00:00
/// <summary>
/// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
2025-06-28 17:38:37 +00:00
virtual QString typeName() const = 0;
/// <summary>
/// ִ<><D6B4><EFBFBD>߼<EFBFBD><DFBC>ڵ<EFBFBD>
/// </summary>
/// <param name="core"></param>
/// <returns></returns>
virtual LogicalResult execute() = 0;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ݽӿ<DDBD>
/// </summary>
/// <returns>map{name, type-ins}</returns>
virtual QHash<QString, std::shared_ptr<TopicData>> inputList() const = 0;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>ʶ<EFBFBD><CAB6><EFBFBD><EFBFBD><EFBFBD>ݽӿ<DDBD>
/// </summary>
/// <returns>map{name, type-ins}</returns>
virtual QHash<QString, std::shared_ptr<TopicData>> outputList() const = 0;
/// <summary>
/// <20>½<EFBFBD>Ĭ<EFBFBD><C4AC>ʵ<EFBFBD><CAB5>
/// </summary>
/// <returns></returns>
virtual std::shared_ptr<Serializable> newDefault() const = 0;
};
/// <summary>
/// <20><><EFBFBD>Ͻڵ<CFBD>
/// </summary>
class COMPONENTBASIC_EXPORT ComposeNode {
private:
QList<std::shared_ptr<LogicalNode>> _child_list;
2025-06-25 14:34:26 +00:00
2025-06-28 17:38:37 +00:00
public:
2025-06-25 14:34:26 +00:00
/// <summary>
/// <20><>ȡ<EFBFBD>ӽڵ<D3BD><DAB5>б<EFBFBD>
/// </summary>
/// <returns></returns>
2025-06-28 17:38:37 +00:00
virtual QList<std::shared_ptr<LogicalNode>> children() const;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ӽڵ<D3BD>
/// </summary>
/// <param name="node"></param>
/// <param name="index"></param>
virtual void insert(std::shared_ptr<LogicalNode> node, int index = -1);
/// <summary>
/// <20>Ƴ<EFBFBD><C6B3>ӽڵ<D3BD>
/// </summary>
/// <param name="node"></param>
virtual void remove(std::shared_ptr<LogicalNode> node);
2025-06-25 14:34:26 +00:00
/// <summary>
2025-06-28 17:38:37 +00:00
/// <20><>ȡִ<C8A1><D6B4><EFBFBD><EFBFBD><EFBFBD>ڽڵ<DABD>
2025-06-25 14:34:26 +00:00
/// </summary>
2025-06-28 17:38:37 +00:00
/// <returns></returns>
virtual QList<std::shared_ptr<LogicalNode>> getForwards() const = 0;
2025-06-25 14:34:26 +00:00
/// <summary>
2025-06-28 17:38:37 +00:00
/// <20><><EFBFBD>нڵ<D0BD>ִ<EFBFBD><D6B4>״̬<D7B4>ط<EFBFBD><D8B7><EFBFBD><EFBFBD><EFBFBD>
2025-06-25 14:34:26 +00:00
/// </summary>
2025-06-28 17:38:37 +00:00
/// <param name="node"></param>
/// <param name="ste"></param>
/// <returns><3E><><EFBFBD><EFBFBD>ִ<EFBFBD>б<EFBFBD>־</returns>
virtual bool fallback(std::shared_ptr<LogicalNode> node, LogicalResult ste) = 0;
2025-06-25 14:34:26 +00:00
};
/// <summary>
2025-06-28 17:38:37 +00:00
/// <20>߼<EFBFBD><DFBC><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
enum class IO_TYPE {
INPUT, OUTPUT
};
/// <summary>
/// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ڵ<EFBFBD>ʵ<EFBFBD><CAB5>
2025-06-25 14:34:26 +00:00
/// </summary>
2025-06-28 17:38:37 +00:00
class COMPONENTBASIC_EXPORT BehaviorMapNode
: public MapKernal, public LogicalNode, public ComposeNode {
private:
/// <summary>
/// <20><>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
QHash<QString, std::pair<IO_TYPE, std::shared_ptr<TopicData>>> _variables;
QString _map_name;
LogicalResult _state_value;
2025-06-25 14:34:26 +00:00
public:
2025-06-28 17:38:37 +00:00
BehaviorMapNode(std::shared_ptr<MessageLoader> core);
2025-06-25 14:34:26 +00:00
/// <summary>
2025-06-28 17:38:37 +00:00
/// <20><><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׳<EFBFBD>UniException<6F>
/// <20>ڵ<EFBFBD><DAB5><EFBFBD>ʼ<EFBFBD><CABC>ʱ<EFBFBD><EFBFBD><E1B0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>Ĭ<EFBFBD><C4AC>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
2025-06-25 14:34:26 +00:00
/// </summary>
2025-06-28 17:38:37 +00:00
virtual void setVariable(const QString& key, IO_TYPE t, std::shared_ptr<TopicData> ins);
/// <summary>
/// <20><>ȡָ<C8A1><D6B8><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
/// </summary>
/// <param name="key"></param>
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD>nullptr<74><72><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD>ȷ<EFBFBD><C8B7></returns>
virtual std::shared_ptr<TopicData> getVariable(const QString& key) const;
2025-06-25 14:34:26 +00:00
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="val"></param>
2025-06-28 17:38:37 +00:00
virtual void resetName(const QString& val);
/// <summary>
/// <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>״̬
/// </summary>
void reset() override;
/// <summary>
/// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
QString typeName() const override;
/// <summary>
/// <20><>ȡǰ<C8A1>ýڵ<C3BD>
/// </summary>
/// <returns></returns>
QList<std::shared_ptr<LogicalNode>> getForwards() const override;
/// <summary>
/// <20><><EFBFBD><EFBFBD>״̬
/// </summary>
/// <param name="node"></param>
/// <param name="ste"></param>
/// <returns></returns>
bool fallback(std::shared_ptr<LogicalNode> node, LogicalResult ste) override;
/// <summary>
/// ִ<><D6B4>״̬
/// </summary>
/// <returns></returns>
LogicalResult execute() override;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
/// </summary>
/// <returns></returns>
QHash<QString, std::shared_ptr<TopicData>> inputList() const override;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
/// </summary>
/// <returns></returns>
QHash<QString, std::shared_ptr<TopicData>> outputList() const override;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
virtual std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
// <20><>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD> ======================================================
/// <summary>
/// ˳<><CBB3><EFBFBD>ڵ<EFBFBD>
/// </summary>
class COMPONENTBASIC_EXPORT SequenceNode
: public ComposeNode, public LogicalNode {
private:
QHash<int, LogicalResult> _state_map;
public:
SequenceNode();
QList<std::shared_ptr<LogicalNode>> getForwards() const override;
QString typeName() const override;
LogicalResult execute() override;
QHash<QString, std::shared_ptr<TopicData>> inputList() const override;
QHash<QString, std::shared_ptr<TopicData>> outputList() const override;
void reset() override;
bool fallback(std::shared_ptr<LogicalNode> node, LogicalResult ste) override;
/// <summary>
/// <20><>ʵ<EFBFBD><CAB5>
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
virtual std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// ѡ<><D1A1><EFBFBD>ڵ<EFBFBD>
/// </summary>
class COMPONENTBASIC_EXPORT SelectorNode
: public ComposeNode, public LogicalNode {
private:
QHash<int, LogicalResult> _state_map;
public:
SelectorNode();
QList<std::shared_ptr<LogicalNode>> getForwards() const override;
QString typeName() const override;
LogicalResult execute() override;
QHash<QString, std::shared_ptr<TopicData>> inputList() const override;
QHash<QString, std::shared_ptr<TopicData>> outputList() const override;
void reset() override;
bool fallback(std::shared_ptr<LogicalNode> node, LogicalResult ste) override;
/// <summary>
/// <20><>ʵ<EFBFBD><CAB5>
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
virtual std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// <20><><EFBFBD>нڵ<D0BD>
/// </summary>
class COMPONENTBASIC_EXPORT ParallelNode
: public ComposeNode, public LogicalNode {
private:
QHash<int, LogicalResult> _state_map;
public:
ParallelNode();
QHash<QString, std::shared_ptr<TopicData>> inputList() const override;
QHash<QString, std::shared_ptr<TopicData>> outputList() const override;
QString typeName() const override;
QList<std::shared_ptr<LogicalNode>> getForwards() const override;
bool fallback(std::shared_ptr<LogicalNode> node, LogicalResult ste) override;
LogicalResult execute() override;
void reset() override;
/// <summary>
/// <20><>ʵ<EFBFBD><CAB5>
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
virtual std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
};
/// <summary>
/// <20>ȽϽڵ<CFBD>
/// </summary>
class COMPONENTBASIC_EXPORT CompareNode : public LogicalNode {
private:
std::shared_ptr<CompareKernel> _bind_delegate;
QHash<QString, std::shared_ptr<TopicData>> _data_map;
public:
CompareNode();
/// <summary>
/// ί<><CEAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
QString delegateName() const;
/// <summary>
/// <20>󶨱Ƚ<F3B6A8B1>ί<EFBFBD><CEAF>
/// </summary>
/// <param name="ins"></param>
void bindDelegate(std::shared_ptr<CompareKernel> ins);
QHash<QString, std::shared_ptr<TopicData>> inputList() const override;
QHash<QString, std::shared_ptr<TopicData>> outputList() const override;
QString typeName() const override;
LogicalResult execute() override;
void reset() override;
/// <summary>
/// <20><>ʵ<EFBFBD><CAB5>
/// </summary>
/// <param name="p"></param>
/// <returns></returns>
virtual std::shared_ptr<Serializable> newDefault() const override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
2025-06-25 14:34:26 +00:00
};
2025-06-28 17:38:37 +00:00
// <20><>Ϊ<EFBFBD>ڵ<EFBFBD> ====================================================================
2025-06-25 14:34:26 +00:00
/// <summary>
/// <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
2025-06-28 17:38:37 +00:00
class COMPONENTBASIC_EXPORT BehaviorPerformPlugin :
public RespondRoute<
WsRespond<EntityInitialRequest, RespondDefault>,
WsRespond<EntityPreparedRequest, RespondDefault>,
WsRespond<SyncRequest, RespondDefault>,
WsRespond<DeduceRequest, RespondDefault>>,
public RequestRoute<>
{
2025-06-25 14:34:26 +00:00
private:
std::weak_ptr<WsEntity> _bind_entity;
public:
2025-06-28 17:38:37 +00:00
void mapReset(const QString &path);
2025-06-25 14:34:26 +00:00
// ͨ<><CDA8> ProcList <20>̳<EFBFBD>
2025-06-28 17:38:37 +00:00
void execute(std::shared_ptr<const EntityInitialRequest> in, QList<std::shared_ptr<RespondDefault>>& out) override;
void execute(std::shared_ptr<const EntityPreparedRequest> in, QList<std::shared_ptr<RespondDefault>>& out) override;
void execute(std::shared_ptr<const SyncRequest> in, QList<std::shared_ptr<RespondDefault>>& out) override;
void execute(std::shared_ptr<const DeduceRequest> in, QList<std::shared_ptr<RespondDefault>>& out) override;
2025-06-25 14:34:26 +00:00
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
2025-06-28 17:38:37 +00:00
std::shared_ptr<Serializable> newDefault() const override;
2025-06-25 14:34:26 +00:00
void bindEntity(std::weak_ptr<WsEntity> host) override;
QString name() const override;
};