SimsWorld/ComponentBasic/BehaviorPerform.h

119 lines
3.0 KiB
C
Raw Normal View History

2025-06-25 14:34:26 +00:00
#pragma once
#include "componentbasic.h"
#include <messagebasic.h>
/// <summary>
/// <20><>Ϊ<EFBFBD><CEAA>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD>
/// </summary>
class COMPONENTBASIC_EXPORT MapHost : public Serializable {
private:
/// <summary>
/// {Topic<69><63>init-value}
/// </summary>
QHash<QString, std::shared_ptr<TopicData>> _variable_types;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
QHash<QString, std::shared_ptr<TopicData>> _variable_map;
public:
virtual ~MapHost() = default;
/// <summary>
/// ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="init"></param>
virtual void registData(std::shared_ptr<TopicData> init) = 0;
/// <summary>
/// <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>
/// </summary>
virtual void setVariable(const QString& key, 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;
};
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD><DFBC>ڵ<EFBFBD><DAB5>Ļ<EFBFBD><C4BB><EFBFBD>
/// </summary>
class LogicalNode : public Serializable {
public:
virtual ~LogicalNode() = default;
/// <summary>
/// <20><><EFBFBD>ýڵ<C3BD>id
/// </summary>
/// <param name="unique_id"></param>
virtual void setID(int unique_id) = 0;
/// <summary>
/// <20><>ȡ<EFBFBD>ڵ<EFBFBD>id
/// </summary>
/// <returns></returns>
virtual int getID() const = 0;
/// <summary>
/// <20><>ȡ<EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <returns></returns>
virtual QString name() const = 0;
/// <summary>
/// <20><>ȡ<EFBFBD>ӽڵ<D3BD><DAB5>б<EFBFBD>
/// </summary>
/// <returns></returns>
virtual QList<std::shared_ptr<LogicalNode>> children() 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}</returns>
virtual QHash<QString, std::shared_ptr<TopicData>> inputDeclares() 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}</returns>
virtual QHash<QString, std::shared_ptr<TopicData>> outputDeclares() const = 0;
};
/// <summary>
/// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD>ʵ<EFBFBD><CAB5>
/// </summary>
class COMPONENTBASIC_EXPORT BehaviorMapNode : public MapHost, public LogicalNode {
public:
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
/// </summary>
/// <param name="path"></param>
virtual void setBehaviorMap(const QString &path){}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="val"></param>
virtual void resetName(const QString &val){}
};
/// <summary>
/// <20><>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
class COMPONENTBASIC_EXPORT BehaviorPerformPlugin : public ProcList<
WsRespond<SyncRequest, RespondDefault>
>{
private:
std::weak_ptr<WsEntity> _bind_entity;
public:
// ͨ<><CDA8> ProcList <20>̳<EFBFBD>
void execute(std::shared_ptr<Immediate> map, std::shared_ptr<const SyncRequest> in, QList<std::shared_ptr<RespondDefault>>& out) override;
void recoveryFrom(const QJsonObject& obj) override;
void saveTo(QJsonObject& obj) const override;
std::shared_ptr<WsComponent> defaultNew() const override;
void bindEntity(std::weak_ptr<WsEntity> host) override;
QString name() const override;
};