SimsWorld/ComponentBasic/DeduceFramework.h

88 lines
2.8 KiB
C++

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